diff --git a/lib/app/app.dart b/lib/app/app.dart index 3bb931f..d3d5711 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -12,6 +12,7 @@ import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit. import 'package:friflex_starter/features/update/update_routes.dart'; import 'package:friflex_starter/l10n/gen/app_localizations.dart'; import 'package:friflex_starter/l10n/localization_notifier.dart'; +import 'package:friflex_starter/router/app_router.dart'; import 'package:go_router/go_router.dart'; /// {@template app} @@ -26,10 +27,7 @@ import 'package:go_router/go_router.dart'; /// {@endtemplate} class App extends StatefulWidget { /// {@macro app} - const App({required this.router, required this.initDependencies, super.key}); - - /// Роутер приложения для навигации между экранами - final GoRouter router; + const App({required this.initDependencies, super.key}); /// Функция для инициализации зависимостей приложения /// Возвращает Future с контейнером зависимостей @@ -78,7 +76,7 @@ class _AppState extends State { // Если данные получены и не равны null, то отображаем внутренний виджет приложения // Иначе отображаем экран ошибки (snapshot.hasData && snapshot.data != null) - ? _App(router: widget.router, diContainer: snapshot.data!) + ? _AppInternal(diContainer: snapshot.data!) : ErrorScreen( error: snapshot.error, stackTrace: snapshot.stackTrace, @@ -106,20 +104,39 @@ class _AppState extends State { /// /// Настраивает MaterialApp с роутером, темами и локализацией. /// {@endtemplate} -class _App extends StatelessWidget { +class _AppInternal extends StatefulWidget { /// {@macro app_internal} - const _App({required this.router, required this.diContainer}); + const _AppInternal({required this.diContainer}); /// Роутер приложения для навигации - final GoRouter router; /// Контейнер зависимостей final DiContainer diContainer; + @override + State<_AppInternal> createState() => _AppInternalState(); +} + +class _AppInternalState extends State<_AppInternal> { + /// Роутер приложения для навигации + late final GoRouter router; + + @override + void initState() { + super.initState(); + router = AppRouter.createRouter(widget.diContainer.debugService); + } + + @override + void dispose() { + router.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return DependsProviders( - diContainer: diContainer, + diContainer: widget.diContainer, child: BlocConsumer( listener: (context, state) { if (state is UpdateSuccessState && diff --git a/lib/runner/app_runner.dart b/lib/runner/app_runner.dart index c481474..0ef3b9e 100644 --- a/lib/runner/app_runner.dart +++ b/lib/runner/app_runner.dart @@ -65,14 +65,10 @@ class AppRunner { // Инициализация метода обработки ошибок _initErrorHandlers(_debugService); - // Инициализация роутера - router = AppRouter.createRouter(_debugService); - // throw Exception('Test error'); runApp( App( - router: router, initDependencies: () { return _initDependencies( debugService: _debugService,