routed_widget_switcher 1.0.0+2 copy "routed_widget_switcher: ^1.0.0+2" to clipboard
routed_widget_switcher: ^1.0.0+2 copied to clipboard

outdated

Declaratively switch child widgets based on the current `Router` location.

example/lib/main.dart

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'),
      );
}
18
likes
0
pub points
66%
popularity

Publisher

verified publishergskinner.com

Declaratively switch child widgets based on the current `Router` location.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter, path_to_regexp

More

Packages that depend on routed_widget_switcher