Header

Simple Router for Pages, Dialogs, Loading

https://pub.dev/packages/ui_router

init

// global

final router = UiRouter(
  pages: {
    '/a': (params) => PageA(),
    '/b': (params) => PageB(),
    '/c': (params) => PageC(),
  },
);

Widget

UiRouterWidget(router)

(Widget usage sample)

main() {
  final widget = UiRouterWidget(router);
  final app = MaterialApp(home: widget);
  runApp(app);
}

push (go to page B)

router.push('/b');

pop (back one page)

router.pop();

pop until the specific page

router.pop(until: '/a');

current path stack

router.pathStack

use path params

pages: {
  '/a/:id': (params) => Page(params['id']),
},

... ...

router.push('/a/7'); // id=7

start with a root path

final router = UiRouter(
  rootPath: '/b',
  ...
);

Dialog

init

final router = UiRouter(
  ...
  dialogs: {
    '/x': (call) => DialogX(call),
    '/y': (call) => DialogY(call),
  },
);

Open Dialog

final call = router.open('/x');

Event on the Dialog

call.event('USER-TAPPED-CANCEL');

Listen the event

call.onEvent((value) {
  // value='USER-TAPPED-CANCEL'
});

Close Dialog

router.close(call);

Loading

show loading with a task

router.loading(
  label: 'Now Loading...',
  task: () async {
    await Future.delayed(Duration(seconds: 5));
  },
);

😄 Using Navigator 2.0
🎉 Contributions, issues are welcomed!

Libraries

ui_router