Files
friflex_flutter_starter/lib/router/app_router.dart

58 lines
2.2 KiB
Dart
Raw Normal View History

2025-01-21 14:24:31 +03:00
import 'package:flutter/cupertino.dart';
import 'package:friflex_starter/features/debug/debug_routes.dart';
import 'package:friflex_starter/features/debug/i_debug_service.dart';
import 'package:friflex_starter/features/main/presentation/main_routes.dart';
import 'package:friflex_starter/features/profile/presentation/profile_routes.dart';
2025-01-21 14:24:31 +03:00
import 'package:friflex_starter/features/root/root_screen.dart';
import 'package:friflex_starter/features/update/update_routes.dart';
2025-01-21 14:24:31 +03:00
import 'package:go_router/go_router.dart';
/// {@template app_router}
/// AppRouter - класс для управления навигацией в приложении
/// [createRouter] - метод для создания экземпляра GoRouter
/// {@endtemplate}
2025-01-21 14:24:31 +03:00
class AppRouter {
/// {@macro app_router}
2025-01-21 14:24:31 +03:00
const AppRouter();
2025-01-21 14:24:31 +03:00
/// Ключ для доступа к корневому навигатору приложения
static final rootNavigatorKey = GlobalKey<NavigatorState>();
/// Начальный роут приложения
static String get initialLocation => '/main';
2025-01-21 14:24:31 +03:00
/// Метод для создания экземпляра GoRouter
static GoRouter createRouter(IDebugService debugService) {
try {
return _init(debugService);
} on Object catch (error, stackTrace) {
debugService.logError(
'Ошибка при создании роутера',
error: error,
stackTrace: stackTrace,
);
throw StateError('Не удалось создать роутер: $error');
}
2025-01-21 14:24:31 +03:00
}
/// Внутренний метод для инициализации роутера
static GoRouter _init(IDebugService debugService) => GoRouter(
navigatorKey: rootNavigatorKey,
initialLocation: initialLocation,
observers: [debugService.routeObserver],
routes: [
StatefulShellRoute.indexedStack(
parentNavigatorKey: rootNavigatorKey,
builder: (context, state, navigationShell) =>
RootScreen(navigationShell: navigationShell),
branches: [
MainRoutes.buildShellBranch(),
ProfileRoutes.buildShellBranch(),
],
),
DebugRoutes.buildRoutes(),
UpdateRoutes.buildRoutes(),
],
);
2025-01-21 14:24:31 +03:00
}