Flutter go_router

go_routerFlutter 的一个新路由库,提供了声明式的路由管理方式。

与传统的路由管理方式相比,go_router 更加简洁、灵活。

高级主题

路由声明

GoRouter 初始化

初始化:使用 GoRouter 类进行初始化,并传入路由列表。

final goRouter = GoRouter(
  routes: [...],
);

路由页面声明

在路由列表中声明路由,指定页面和路径。

GoRoute(
  path: '/page1',
  pageBuilder: 
	  (context, state) => Page1(),
)

声明路由参数

使用冒号 : 来声明路由参数。

GoRoute(
  path: '/details/:id',
  pageBuilder: (context, state) {
    final id = state.params['id'];
    return DetailsPage(id: id);
  },
)

导航跳转

导航方法签名:

context.go(
	String location, // 路径 
	{Object? extra}) // 传参

使用 goRouter.go() 方法进行页面跳转。

goRouter.go('/details/123');

URL 传参:

context.go('/detail?id=b');

路由守卫

使用 redirectGuard 属性来实现路由守卫功能。

GoRoute(
  path: '/protected',
  pageBuilder: 
	(context, state) 
		=> ProtectedPage(),
  redirectGuard: (state) {
    if (!isLoggedIn) {
      return '/login';
    }
    return null;
  },
)

嵌套路由

使用 children 属性来实现嵌套路由。

GoRoute(
  path: '/dashboard',
  pageBuilder: (context, state) 
	  => DashboardPage(),
  children: [
    GoRoute(
      path: 'profile',
      pageBuilder: (context, state) 
	      => ProfilePage(),
    ),
  ],
)

过场动画

使用 transitionsBuilder 属性来自定义页面转场动画。

GoRoute(
  path: '/animated',
  pageBuilder: (context, state) 
	  => AnimatedPage(),
  transitionsBuilder: 
	  (context, animation,
	   secondaryAnimation, child) {
    return FadeTransition(
	    opacity: animation, 
	    child: child);
  },
)

网络资源


本文作者:Maeiee

本文链接:Flutter go_router

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!