routed_widget_switcher 1.0.0+2 routed_widget_switcher: ^1.0.0+2 copied to clipboard
Declaratively switch child widgets based on the current `Router` location.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:routed_widget_switcher/routed_widget_switcher.dart';
void main() {
runApp(MyGoRouterApp());
}
class MyGoRouterApp extends StatefulWidget {
@override
State<MyGoRouterApp> createState() => _MyGoRouterAppState();
}
class _MyGoRouterAppState extends State<MyGoRouterApp> {
GoRouter goRouter = GoRouter(
navigatorBuilder: (_, __, navigator) {
return Row(children: [
SideBar(),
Expanded(child: navigator),
]);
},
routes: [],
);
@override
void initState() {
super.initState();
WidgetsBinding.instance?.keyboard.addHandler((event) {
if (event is KeyDownEvent) {
final actions = {
LogicalKeyboardKey.digit1: '/',
LogicalKeyboardKey.digit2: '/home1',
LogicalKeyboardKey.digit3: '/home2',
LogicalKeyboardKey.digit4: '/dashboard',
LogicalKeyboardKey.digit5: '/dashboard/1',
LogicalKeyboardKey.digit6: '/dashboard/2',
LogicalKeyboardKey.digit7: '/settings',
LogicalKeyboardKey.digit8: '/settings/1',
LogicalKeyboardKey.digit9: '/settings/2',
};
if (actions.containsKey(event.logicalKey)) {
goRouter.go(actions[event.logicalKey]!);
}
}
return true;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routeInformationParser: goRouter.routeInformationParser,
routerDelegate: goRouter.routerDelegate,
);
}
}
class SideBar extends StatelessWidget {
const SideBar({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Material(
child: Container(
width: 250,
color: Colors.grey,
child: RoutedWidgetSwitcher(
builders: [
PathBuilder('/', builder: (_) => const MainMenu()),
PathBuilder('/dashboard', builder: (_) => const DashboardMenu()),
PathBuilder('/settings', builder: (_) => const SettingsMenu()),
],
),
),
);
}
}
class MainMenu extends StatelessWidget {
const MainMenu({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => const Center(
child: Text('MAIN MENU'),
);
}
class DashboardMenu extends StatelessWidget {
const DashboardMenu({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => const Center(
child: Text('DASHBOARD\nMENU'),
);
}
class SettingsMenu extends StatelessWidget {
const SettingsMenu({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => const Center(
child: Text('SETTINGS MENU'),
);
}