import 'package:didvan/views/authentication/authentication.dart'; import 'package:didvan/views/authentication/authentication_state.dart'; import 'package:didvan/views/comments/comments.dart'; import 'package:didvan/views/comments/comments_state.dart'; import 'package:didvan/views/direct/direct.dart'; import 'package:didvan/views/direct/direct_state.dart'; import 'package:didvan/views/hashtag/hashtag.dart'; import 'package:didvan/views/hashtag/hashtag_state.dart'; import 'package:didvan/views/home/home.dart'; import 'package:didvan/views/home/infography/infography_screen.dart'; import 'package:didvan/views/home/infography/infography_screen_state.dart'; import 'package:didvan/views/home/main/main_page_state.dart'; import 'package:didvan/views/home/home_state.dart'; import 'package:didvan/views/home/new_statistic/new_statistics_state.dart'; import 'package:didvan/views/home/new_statistic/statistics_details/stat_cats_general_screen.dart'; import 'package:didvan/views/home/new_statistic/statistics_details/stat_cats_general_state.dart'; import 'package:didvan/views/home/new_statistic/stock/newStock_state.dart'; import 'package:didvan/views/home/new_statistic/stock/new_stock.dart'; import 'package:didvan/views/news/news.dart'; import 'package:didvan/views/news/news_details/news_details.dart'; import 'package:didvan/views/news/news_details/news_details_state.dart'; import 'package:didvan/views/news/news_state.dart'; import 'package:didvan/views/podcasts/podcasts.dart'; import 'package:didvan/views/profile/profile.dart'; import 'package:didvan/views/radar/radar.dart'; import 'package:didvan/views/radar/radar_details/radar_details.dart'; import 'package:didvan/views/radar/radar_details/radar_details_state.dart'; import 'package:didvan/views/radar/radar_state.dart'; import 'package:didvan/views/home/bookmarks/bookmarks.dart'; import 'package:didvan/views/home/bookmarks/bookmark_state.dart'; import 'package:didvan/views/home/bookmarks/filtered_bookmark/filtered_bookmark.dart'; import 'package:didvan/views/home/bookmarks/filtered_bookmark/filtered_bookmarks_state.dart'; import 'package:didvan/views/profile/direct_list/direct_list.dart'; import 'package:didvan/views/profile/direct_list/direct_list_state.dart'; import 'package:didvan/views/profile/general_settings/settings.dart'; import 'package:didvan/views/profile/general_settings/settings_state.dart'; import 'package:didvan/views/profile/edit_profile/edit_profile.dart'; import 'package:didvan/views/home/statistic/statistic_details/statistic_details.dart'; import 'package:didvan/views/home/statistic/statistic_details/statistic_details_state.dart'; import 'package:didvan/views/home/statistic/statistic_state.dart'; import 'package:didvan/views/podcasts/studio_details/studio_details.mobile.dart' if (dart.library.io) 'package:didvan/views/podcasts/studio_details/studio_details.mobile.dart' if (dart.library.html) 'package:didvan/views/podcasts/studio_details/studio_details.web.dart'; import 'package:didvan/views/splash/splash.dart'; import 'package:didvan/routes/routes.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class RouteGenerator { static Route generateRoute(RouteSettings settings) { switch (settings.name) { case Routes.splash: return _createRoute( const Splash(), ); case Routes.authenticaion: return _createRoute( ChangeNotifierProvider( create: (context) => AuthenticationState(), child: Authentication(isResetPassword: settings.arguments as bool), ), ); case Routes.home: return _createRoute( MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => HomeState(), ), ChangeNotifierProvider( create: (context) => MainPageState(), ), ChangeNotifierProvider( create: (context) => StatisticState(), ), ChangeNotifierProvider( create: (context) => NewStatisticState(), ), ChangeNotifierProvider( create: (context) => BookmarksState(), ), ], child: const Home(), ), ); case Routes.editProfile: return _createRoute( const EditProfile(), ); case Routes.profile: return _createRoute( const ProfilePage(), ); case Routes.generalSettings: return _createRoute( ChangeNotifierProvider( create: (context) => GeneralSettingsState(), child: const GeneralSettings(), ), ); case Routes.podcasts: return _createRoute( const Podcasts(viewPodcasts: true), ); case Routes.videocasts: return _createRoute( const Podcasts(), ); case Routes.radars: return _createRoute( ChangeNotifierProvider( create: (context) => RadarState(), child: const Radar(), ), ); case Routes.news: return _createRoute( ChangeNotifierProvider( create: (context) => NewsState(), child: const News(), ), ); case Routes.infography: return _createRoute(ChangeNotifierProvider( create: (context) => InfographyScreenState(), child: const InfographyScreen(), )); case Routes.radarDetails: return _createRoute( ChangeNotifierProvider( create: (context) => RadarDetailsState(), child: RadarDetails( pageData: settings.arguments as Map, ), ), ); case Routes.statGeneral: return _createRoute(MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => StatGeneralScreenState()), ChangeNotifierProvider( create: (context) => NewStatisticState()), ], child: StatGeneralScreen( pageData: settings.arguments as Map), )); case Routes.newsDetails: return _createRoute( ChangeNotifierProvider( create: (context) => NewsDetailsState(), child: NewsDetails( pageData: settings.arguments as Map, ), ), ); case Routes.studioDetails: return _createRoute( StudioDetails( pageData: settings.arguments as Map, ), ); case Routes.statisticDetails: return _createRoute( ChangeNotifierProvider( create: (context) => StatisticDetailsState(), child: StatisticDetails( pageData: settings.arguments as Map, ), ), ); case Routes.stock: return _createRoute(MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => NewStockState(), ), ], child: const NewStock(), )); case Routes.directList: return _createRoute( ChangeNotifierProvider( create: (context) => DirectListState(), child: const DirectList(), ), ); case Routes.direct: return _createRoute( ChangeNotifierProvider( create: (context) => DirectState(), child: Direct(pageData: settings.arguments as Map), ), ); case Routes.comments: return _createRoute( ChangeNotifierProvider( create: (context) => CommentsState(), child: Comments( pageData: settings.arguments as Map, ), ), ); case Routes.bookmarks: return _createRoute( ChangeNotifierProvider( create: (context) => BookmarksState(), child: const Bookmarks(), ), ); case Routes.hashtag: return _createRoute( ChangeNotifierProvider( create: (context) => HashtagState(), child: Hashtag(pageData: settings.arguments as Map), ), ); case Routes.filteredBookmarks: return _createRoute( ChangeNotifierProvider( create: (context) => FilteredBookmarksState( (settings.arguments as Map)['type'], ), child: FilteredBookmarks( onDeleted: (settings.arguments as Map)['onDeleted']), ), ); default: return _errorRoute(settings.name ?? ''); } } static Route _errorRoute(String name) { return MaterialPageRoute(builder: (_) { return Scaffold( appBar: AppBar( title: const Text('Error'), ), body: Center( child: Text('$name is not valid'), ), ); }); } static Route _createRoute(page) { return MaterialPageRoute( builder: (context) { final shortestSide = MediaQuery.of(context).size.shortestSide; final bool useMobileLayout = shortestSide < 600; if (kIsWeb && !useMobileLayout) { final deviceSize = MediaQuery.of(context).size; return MediaQuery( data: MediaQuery.of(context).copyWith( size: Size( deviceSize.height * 9 / 16, deviceSize.height, ), textScaler: const TextScaler.linear(1.0), ), child: Container( color: Theme.of(context).colorScheme.background, alignment: Alignment.center, child: AspectRatio(aspectRatio: 9 / 16, child: page), ), ); } return MediaQuery( data: MediaQuery.of(context).copyWith(textScaler: const TextScaler.linear(1.0)), child: Container( color: Theme.of(context).colorScheme.surface, child: SafeArea( child: page, top: false, ), ), ); }, ); } }