multilevel_navigator 2.0.0 copy "multilevel_navigator: ^2.0.0" to clipboard
multilevel_navigator: ^2.0.0 copied to clipboard

Мультиуровневая адаптивная навигация для Flutter поверх go_router: 4 уровня, автоподбор колонок под экран, resizable-колонки, модалки и сохранение состояния.

example/lib/main.dart

import 'package:multilevel_navigator/multilevel_navigator.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:multilevel_navigator_example/core/dependency_injection/dependency_injection.dart';
import 'package:multilevel_navigator_example/core/dependency_injection/dependency_data.dart';
import 'package:multilevel_navigator_example/core/navigation/nav_bar_visibility_cubit/nav_bar_visibility_cubit.dart';
import 'package:multilevel_navigator_example/core/navigation/navigation_panel.dart';
import 'package:multilevel_navigator_example/features/authentication/authentication.dart';
import 'package:multilevel_navigator_example/features/calls/calls.dart';
import 'package:multilevel_navigator_example/features/chats/chats.dart';
import 'package:multilevel_navigator_example/features/chats/widgets/modal_call.dart';
import 'package:multilevel_navigator_example/features/guest/guest.dart';
import 'package:multilevel_navigator_example/features/profile/profile.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Инициализируем зависимости
  final dependencies = await DependencyInitializer.initializeDependencies();

  /// Порядок важен
  final features = [
    /// Неавторизованные фичи
    AuthenticationNavigationConfiguration(),
    GuestNavigationConfiguration(),

    /// Авторизованные фичи
    ChatsNavigationConfiguration(),
    CallsNavigationConfiguration(),
    ProfileNavigationConfiguration(),
  ];

  final multilevelNavigator = MultilevelNavigator(
    features: features,
    authenticationStateNotifier: AuthenticationStateNotifierImpl(
      dependencies.currentUserRepository,
    ),
    header: null,
    overlay: null,
    navigationPanelBuilder: (navigationShell) {
      return NavigationPanel(navigationShell: navigationShell);
    },
  );

  runApp(
    MyApp(dependencies: dependencies, multilevelNavigator: multilevelNavigator),
  );
}

class MyApp extends StatefulWidget {
  const MyApp({
    super.key,
    required this.dependencies,
    required this.multilevelNavigator,
  });

  final DependencyData dependencies;
  final MultilevelNavigator multilevelNavigator;

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (_) => NavBarVisibilityCubit(),
      child: DependencyContainer(
        currentUserRepository: widget.dependencies.currentUserRepository,
        child: MultilevelNavigatorProvider(
          multilevelNavigator: widget.multilevelNavigator,
          child: MaterialApp.router(
            title: 'Multilevel Navigator',
            debugShowCheckedModeBanner: false,
            theme: ThemeData(
              colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
              useMaterial3: true,
            ),
            routerConfig: widget.multilevelNavigator.router,
            builder: (context, child) {
              return Stack(
                children: [
                  child ?? SizedBox.shrink(),
                  Positioned(
                    top: 80,
                    right: 10,
                    child: ElevatedButton(
                      onPressed: () {
                        NavigationUtils.openModal(
                          widget.multilevelNavigator.router,
                          ModalCall().id,
                        );
                      },
                      child: Text('test modal'),
                    ),
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}
1
likes
130
points
58
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Мультиуровневая адаптивная навигация для Flutter поверх go_router: 4 уровня, автоподбор колонок под экран, resizable-колонки, модалки и сохранение состояния.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

bloc_concurrency, collection, equatable, flutter, flutter_bloc, go_router, meta, provider, rxdart

More

Packages that depend on multilevel_navigator