go_router 0.3.1 go_router: ^0.3.1 copied to clipboard
A declarative router for Flutter based on Navigation 2 supporting deep linking, data-drive routes and more
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'shared/data.dart';
import 'shared/pages.dart';
void main() => runApp(App());
/// sample class using simple declarative routes
class App extends StatelessWidget {
App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MaterialApp.router(
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate,
title: 'Declarative Routes GoRouter Example',
);
late final _router = GoRouter(routes: _routesBuilder, error: _errorBuilder);
List<GoRoute> _routesBuilder(BuildContext context, String location) => [
GoRoute(
pattern: '/',
builder: (context, args) => MaterialPage<FamiliesPage>(
key: const ValueKey('FamiliesPage'),
child: FamiliesPage(families: Families.data),
),
),
GoRoute(
pattern: '/family/:fid',
builder: (context, args) {
final family = Families.family(args['fid']!);
return MaterialPage<FamilyPage>(
key: ValueKey(family),
child: FamilyPage(family: family),
);
},
),
GoRoute(
pattern: '/family/:fid/person/:pid',
builder: (context, args) {
final family = Families.family(args['fid']!);
final person = family.person(args['pid']!);
return MaterialPage<PersonPage>(
key: ValueKey(person),
child: PersonPage(family: family, person: person),
);
},
),
];
Page<dynamic> _errorBuilder(BuildContext context, GoRouteException ex) =>
MaterialPage<Four04Page>(
key: const ValueKey('Four04Page'),
child: Four04Page(message: ex.nested.toString()),
);
}