simplified_router 0.0.4 simplified_router: ^0.0.4 copied to clipboard
A simpler API for RouterDelegate and Router
import 'package:flutter/material.dart';
import 'package:simplified_router/simplified_router.dart';
void main() {
runApp(ExampleApp());
}
class ExampleApp extends StatefulWidget {
@override
_ExampleAppState createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
late final SimplifiedRouter _routerData;
final navigatorKey = GlobalKey<NavigatorState>();
_ExampleAppState() {
_routerData =
SimplifiedRouter(builder: _appBuilder, navigatorKey: navigatorKey);
}
@override
Widget build(BuildContext context) {
return SimplifiedRouterScope(
router: _routerData,
child: MaterialApp.router(
routerDelegate: _routerData.delegate,
routeInformationParser: _routerData.parser,
),
);
}
Widget _appBuilder(BuildContext context, String routePath) {
var uri = Uri.parse(routePath);
var segments = uri.pathSegments;
return Navigator(
key: navigatorKey,
onPopPage: (route, result) {
return route.didPop(result);
},
pages: [
if (segments.length == 0)
FadeTransitionPage(
key: ValueKey('/'),
child: Scaffold(
body: Center(
child: Column(
children: [
Text(
'🏡 Home Page',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: () {
_routerData.navigateTo('/books');
},
child: Text('Go to /books'),
),
],
),
),
),
),
if (segments.length >= 1 && segments[0] == 'books')
FadeTransitionPage(
key: ValueKey('/books'),
child: Scaffold(
body: Center(
child: Column(
children: [
Text('📕 Books Page',
style: Theme.of(context).textTheme.headline4),
ElevatedButton(
onPressed: () {
_routerData.navigateTo('/');
},
child: Text('Go to /'),
),
],
),
),
),
),
],
);
}
}
class FadeTransitionPage extends Page {
final Widget child;
FadeTransitionPage({
LocalKey? key,
required this.child,
}) : super(key: key);
Route createRoute(BuildContext context) {
return PageRouteBuilder(
settings: this,
pageBuilder: (context, animation, animation2) {
return FadeTransition(
opacity: animation,
child: child,
);
},
);
}
}