/
fraq11
/
ElijahFlutter
Обзор
Документация
Войти
/
fraq11
/
ElijahFlutter
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
4
CI/CD
Аналитика
Безопасность
develop
lib/view/app_root.dart
95 строк
3 KB
octomors
ui done
26 апр 2026, 13:21
26 апр 2026, 13:21
324acce
Код
Авторство
О чём код?
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../viewmodel/pages/chef_mode_view_model.dart'; import '../viewmodel/pages/forgot_password_view_model.dart'; import '../viewmodel/pages/login_view_model.dart'; import '../viewmodel/pages/onboarding_view_model.dart'; import '../viewmodel/pages/recipe_detail_view_model.dart'; import '../viewmodel/pages/register_view_model.dart'; import '../viewmodel/shared/settings_view_model.dart'; import 'pages/chef_mode_page.dart'; import 'pages/forgot_password_page.dart'; import 'pages/login_page.dart'; import 'pages/main_page.dart'; import 'pages/missing_recipe_page.dart'; import 'pages/onboarding_page.dart'; import 'pages/recipe_detail_page.dart'; import 'pages/register_page.dart'; import 'theme/app_theme.dart'; class AppRoot extends StatelessWidget { const AppRoot({super.key}); @override Widget build(BuildContext context) { return Consumer<SettingsViewModel>( builder: (context, settingsViewModel, _) { final themeMode = settingsViewModel.isDarkTheme ? ThemeMode.dark : ThemeMode.light; return MaterialApp( debugShowCheckedModeBanner: false, title: 'Elijah Recipes', themeMode: themeMode, theme: buildAppTheme(Brightness.light), darkTheme: buildAppTheme(Brightness.dark), initialRoute: '/', routes: <String, WidgetBuilder>{ '/': (_) => ChangeNotifierProvider<OnboardingViewModel>( create: (_) => OnboardingViewModel(), child: const OnboardingPage(), ), '/login': (_) => ChangeNotifierProvider<LoginViewModel>( create: (_) => LoginViewModel(), child: const LoginPage(), ), '/register': (_) => ChangeNotifierProvider<RegisterViewModel>( create: (_) => RegisterViewModel(), child: const RegisterPage(), ), '/forgot-password': (_) => ChangeNotifierProvider<ForgotPasswordViewModel>( create: (_) => ForgotPasswordViewModel(), child: const ForgotPasswordPage(), ), '/main': (_) => const MainPage(), }, onGenerateRoute: (settings) { if (settings.name == '/recipe') { final recipeId = settings.arguments; if (recipeId is! String) { return MaterialPageRoute<void>( builder: (_) => const MissingRecipePage(), ); } return MaterialPageRoute<void>( builder: (_) => ChangeNotifierProvider<RecipeDetailViewModel>( create: (_) => RecipeDetailViewModel(recipeId: recipeId), child: const RecipeDetailPage(), ), ); } if (settings.name == '/chef-mode') { final recipeId = settings.arguments; if (recipeId is! String) { return MaterialPageRoute<void>( builder: (_) => const MissingRecipePage(), ); } return MaterialPageRoute<void>( builder: (_) => ChangeNotifierProvider<ChefModeViewModel>( create: (_) => ChefModeViewModel(recipeId: recipeId), child: const ChefModePage(), ), ); } return null; }, ); }, ); } }