navigator_manager 1.0.0 copy "navigator_manager: ^1.0.0" to clipboard
navigator_manager: ^1.0.0 copied to clipboard

A Flutter router based on navigator 2.0 for app and web, provide many useful methods and send params easily.

简介 #

A Flutter router based on navigator 2.0 for app and web, provide many useful methods and send params easily.

快速开始 #

在main.dart文件引入路由管理,并进行路由配置

初始化路由管理 #

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _routerDelegate = LRouterDelegate(
    // 配置没有匹配url的页面(app可不配置)
    pageNotFound: (uri, params) => MaterialPage(
      key: ValueKey('not-found-page'),
      child: Builder(
        builder: (context) => Scaffold(
          body: Center(
            child: Text('Page ${uri.path} not found'),
          ),
        ),
      ),
    ),
    // 配置所有路由信息(必填)
    routes: {
      '/': (uri, params) => CreateRoutePage(name: 'main', child: HomePage()),
      '/test/todo': (uri, params) => CreateRoutePage(name: 'test', child: TestPage(uri)),
      '/result': (uri, params) => CreateRoutePage(name: 'result', child: ResultPage()),
      '/login': (uri, params) => CreateRoutePage(name: 'login', child: LoginPage()),
    },
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Uri navigator App',
      routerDelegate: _routerDelegate,
      routeInformationParser: LRouteInformationParser(),
    );
  }
}

其中routes字段:

key为url

value为返回页面的函数, uri是路由参数,params是页面参数,根据参数类型传递

方法 #

1.go(Uri uri, {dynamic params})

路由跳转方法, 支持路由传参和自定义数据类型传参

RouteManager.go(Uri(path: '/test/todo', queryParameters: {'limit': '12'}));
RouteManager.go(Uri(path: '/test/todo'), params: your model);

2.replace(Uri uri, {dynamic params})

替换当前路由并跳转

RouteManager.replace(Uri(path: '/test/todo'));

3.goBack()

返回上一页, 如若返回传参请用returnResultGo

RouteManager.goBack();

4.clearAndGo(Uri uri, {dynamic params})

清空路由栈并重设首页,如登陆场景

RouteManager.clearAndGo(Uri(path: '/login'));

5.multipleGo(List<Uri> uris, {List<dynamic> params})

一次设置多个uri并跳转到最后一个路由

RouteManager.multipleGo([Uri(path: '/test/todo', queryParameters: {'limit': '12'}), Uri(path: '/test/todo')]);

6.clearAndMultipleGo(List<Uri> uris, {List<dynamic> params})

清空路由栈并跳转(设置多个uri)

RouteManager.clearAndMultipleGo(Uri(path: '/test/todo', queryParameters: {'limit': '12'}));

7.waitResultGo(Uri uri, {dynamic params})

跳转等待结果

RouteManager.waitResultGo(Uri(path: '/test/todo', queryParameters: {'limit': '12'}));

8.returnResultGo(dynamic value)

跳转返回结果

RouteManager.returnResultGo(your value);

9.goRoot()

路由栈只保留首页

RouteManager.goRoot();

10.removeUri(Uri uri)

删除指定路由

RouteManager.removeUri(Uri(path: '/test/todo'));

11.removeLastUri()

删除栈顶的路由

RouteManager.removeLastUri();

页面监听 #

路由栈变化的监听有两种方式:

routerDelegate.addListener(() {
  if (routerDelegate.currentConfiguration == Uri(path: '/')) {
    /// to do
  }
}
class APage extends StatefulWidget {
  const APage({Key key}) : super(key: key);

  @override
  _APageState createState() => _APageState();
}

// 3. Add `with RouteAware, RouteObserverMixin` to State and override RouteAware methods.
class _APageState extends State<APage> with RouteAware, RouteObserverMixin {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('A Page'),
        ),
      ),
    );
  }

  /// Called when the top route has been popped off, and the current route
  /// shows up.
  @override
  void didPopNext() { }

  /// Called when the current route has been pushed.
  @override
  void didPush() { }

  /// Called when the current route has been popped off.
  @override
  void didPop() { }

  /// Called when a new route has been pushed, and the current route is no
  /// longer visible.
  @override
  void didPushNext() { }
}

Todo #

  1. 升级Flutter v2,支持空安全

  2. 自定义动画路由

  3. 嵌套路由

6
likes
110
pub points
29%
popularity

Publisher

unverified uploader

A Flutter router based on navigator 2.0 for app and web, provide many useful methods and send params easily.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter, provider, route_observer_mixin

More

Packages that depend on navigator_manager