Pakete, Repositories und App-Kategorien suchen

Paketdetailsv1.0.9

nested_navigators

Flutter-Widget zur Implementierung mehrerer verschachtelter Navigator mit eigenen Routenstapeln.

30-Tage-Downloads
22
Likes
17
Pub-Punkte
40

Paket installieren

flutter pub add nested_navigators

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

NestedNavigators ist ein Flutter-Paket, das die Implementierung mehrerer verschachtelter Navigatoren ermöglicht, wobei jeder seinen eigenen unabhängigen Routenstapel verwaltet. Es vereinfacht komplexe Navigations-Szenarien in Apps mit geschichteten Benutzeroberflächen, wie beispielsweise Tab-Interfaces oder Modals innerhalb von Bildschirmen. Durch die Isolierung des Navigationsverhaltens pro Navigator verhindert es unbeabsichtigte Route-Konflikte und verbessert die Wartbarkeit. Das Paket lässt sich nahtlos in bestehende Flutter-Projekte integrieren und unterstützt dynamische Routing innerhalb verschachtelter Strukturen.

Anwendungsfälle

  • Komplexe tabbasierte Schnittstellen
  • Modale Dialogfelder innerhalb von Bildschirmen
  • Mehrschrittige Navigationsabläufe
  • Unabhängige Routenstapel in Komponenten
  • Verschachtelte Bildschirmübergänge

Hauptmerkmale

  • Route-Stack-Isolation pro Navigator
  • Unterstützung für Deep Linking
  • Klare Trennung der Navigationslogik
  • Einfache Integration mit MaterialApp
  • Dynamische Routenverwaltung

Geeignet für

  • Apps mit mehreren Navigations-Ebenen
  • Entwickler, die komplexe Routing-Verwaltung durchführen
  • UIs, die unabhängige Navigationskontexte erfordern
  • Projekte, die modulare Bildschirmarchitektur verwenden
  • Teams, die wartbaren Navigationscode priorisieren

Hinweise

  • Erfordert sorgfältige Zustandsverwaltung
  • Kann die App-Komplexität erhöhen, wenn sie übermäßig verwendet wird
  • Nicht erforderlich für einfache Navigation
  • Eingeschränkte Dokumentation im Vergleich zu Core Flutter
  • Mögliche Leistungseinbußen durch übermäßige Verschachtelung

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

NestedNavigators

Flutter widget for implementing multiple nested navigators with their own route stacks.

Usage

To use, you must at least specify two arguments items and generateRoute:

class RootPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _RootPageState();
}

class _RootPageState extends State<RootPage> {
  @override
  Widget build(BuildContext context) {
    return NestedNavigators(
      items: {
        NestedNavItemKey.blue: NestedNavigatorItem(
          initialRoute: Routes.blue,
          icon: Icons.access_time,
          text: "Blue",
        ),
        NestedNavItemKey.red: NestedNavigatorItem(
          initialRoute: Routes.red,
          icon: Icons.send,
          text: "Red",
        ),
        NestedNavItemKey.green: NestedNavigatorItem(
          initialRoute: Routes.green,
          icon: Icons.perm_identity,
          text: "Green",
        ),
      },
      generateRoute: Routes.generateRoute,
    );
  }
}

See Routes.generateRoute()

By default NestedNavigators displays BottomNavigationBar, but you can hide it if you want:

clearStackAfterTapOnCurrentTab: false

You can customize BottomNavigatosBar items in two ways:

  • configure BottomNavigationBarItem:
buildBottomNavigationItem: (key, item, selected) => BottomNavigationBarItem(
           icon: Icon(
             item.icon,
             color: Colors.blue,
           ),
           title: Text(
             item.text,
             style: TextStyle(fontSize: 20),
           ),
         )
  • Define your own widget:
buildCustomBottomNavigationItem: (key, item, selected) => Container(
            height: 60,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Icon(
                  item.icon,
                  size: 24,
                  color: selected ? Colors.blue : null,
                ),
                Text(
                  item.text,
                  style: TextStyle(fontSize: 20, color: selected ? Colors.blue : null),
                ),
              ],
            ),
          )

Initial selected navigator:

  • If number of navigators is even number, than it will be the first elemnt of items;
  • If number of navigators is odd number, than it will be the middle element of items;
  • You can specify your navigator key:
 initialNavigatorKey: NestedNavItemKey.green

You can specify the color of ripple effect in your app theme or in bottomNavigationBarTheme:

bottomNavigationBarTheme: Theme.of(context).copyWith(
       splashColor: Colors.blue[100],
   )

By default, if a user clicks on an already selected tab item, the route stack will be cleared and the initial route will be displayed. You can disable this option:

clearStackAfterTapOnCurrentTab: false

When you navigate to another route within nested navigator, you can hide BottomNavigatorsBar for specific route, just add hideNavTabBar: true to route arguments:

Navigator.of(context).pushNamed(
                    Routes.red,
                    arguments: {
                      hideNavTabBar: true,
                    },
                  );

You can select another navigator from your routes:

NestedNavigatorsBlocProvider.of(context).select(NestedNavItemKey.green)

You can also switch displayed navigator and at the same time make navigation in the new navigator:

NestedNavigatorsBlocProvider.of(context).selectAndNavigate(
                      NestedNavItemKey.green,
                      (navigator) => navigator.pushNamed(
                            Routes.green,
                            arguments: {
                              ArgumentKeys.value: 100,
                            },
                          ));

Add NestedNavigatorsBlocProvider to app widget if you want to use the root navigator and need access to nested navigators from there:

class App extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _AppState();
}

class _AppState extends State<App> {
  final NestedNavigatorsBloc _bloc = NestedNavigatorsBloc<NestedNavItemKey>();

  @override
  Widget build(BuildContext context) {
    return NestedNavigatorsBlocProvider(
      bloc: _bloc,
      child: MaterialApp(
        title: 'Flutter Demo',
        home: RootPage(),
        onGenerateRoute: (routeSettings) => Routes.generateRoute(routeSettings),
      ),
    );
  }
}

You can use Drawer instead of BottomNavigationBar, use drawer or endDrawer for this:

drawer: (items, selectedItemKey, selectNavigator) => Drawer(
            child: ListView(
              children: items.entries
                  .map((entry) => ListTile(
                        title: Text(
                          entry.value.text,
                          style: TextStyle(
                            color: entry.key == selectedItemKey
                                ? Colors.blue
                                : null,
                          ),
                        ),
                        trailing: Icon(
                          entry.value.icon,
                          color:
                              entry.key == selectedItemKey ? Colors.blue : null,
                        ),
                        onTap: () => selectNavigator(entry.key),
                      ))
                  .toList(),
            ),
          ),

Also you can open drawers from your pages:

NestedNavigatorsBlocProvider.of(context).actionWithScaffold(
                  (scaffoldState) => scaffoldState.openDrawer(),
                );

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.