didvan-app/lib/routes/route_generator.dart

324 lines
12 KiB
Dart

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/customize_category/customize_category_state.dart';
import 'package:didvan/views/customize_category/favorites_step.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/notification_time/notification_time_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';
import '../views/customize_category/notification_status_step.dart';
import '../views/notification_time/notification_time.dart';
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case Routes.splash:
return _createRoute(
const Splash(),
);
case Routes.notificationTime:
return _createRoute(
ChangeNotifierProvider<NotificationTimeState>(
create: (context) => NotificationTimeState(),
child: NotificationTime(
pageData: settings.arguments as Map<String, dynamic>,
)),
);
case Routes.favouritesStep:
return _createRoute(
ChangeNotifierProvider<CustomizeCategoryState>(
create: (context) => CustomizeCategoryState(),
child: FavoritesStep(
pageData: settings.arguments as Map<String, dynamic>,
)),
);
case Routes.notificationStatusStep:
return _createRoute(
ChangeNotifierProvider<CustomizeCategoryState>(
create: (context) => CustomizeCategoryState(),
child: NotificationStatusStep(
pageData: settings.arguments as Map<String, dynamic>,
)),
);
case Routes.authenticaion:
return _createRoute(
ChangeNotifierProvider<AuthenticationState>(
create: (context) => AuthenticationState(),
child: Authentication(isResetPassword: settings.arguments as bool),
),
);
case Routes.home:
return _createRoute(
MultiProvider(
providers: [
ChangeNotifierProvider<HomeState>(
create: (context) => HomeState(),
),
ChangeNotifierProvider<MainPageState>(
create: (context) => MainPageState(),
),
ChangeNotifierProvider<StatisticState>(
create: (context) => StatisticState(),
),
ChangeNotifierProvider<NewStatisticState>(
create: (context) => NewStatisticState(),
),
ChangeNotifierProvider<BookmarksState>(
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<GeneralSettingsState>(
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<RadarState>(
create: (context) => RadarState(),
child: const Radar(),
),
);
case Routes.news:
return _createRoute(
ChangeNotifierProvider<NewsState>(
create: (context) => NewsState(),
child: const News(),
),
);
case Routes.infography:
return _createRoute(ChangeNotifierProvider<InfographyScreenState>(
create: (context) => InfographyScreenState(),
child: const InfographyScreen(),
));
case Routes.radarDetails:
return _createRoute(
ChangeNotifierProvider<RadarDetailsState>(
create: (context) => RadarDetailsState(),
child: RadarDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
case Routes.statGeneral:
return _createRoute(MultiProvider(
providers: [
ChangeNotifierProvider<StatGeneralScreenState>(
create: (context) => StatGeneralScreenState()),
ChangeNotifierProvider<NewStatisticState>(
create: (context) => NewStatisticState()),
],
child: StatGeneralScreen(
pageData: settings.arguments as Map<String, dynamic>),
));
case Routes.newsDetails:
return _createRoute(
ChangeNotifierProvider<NewsDetailsState>(
create: (context) => NewsDetailsState(),
child: NewsDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
case Routes.studioDetails:
return _createRoute(
StudioDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
);
case Routes.statisticDetails:
return _createRoute(
ChangeNotifierProvider<StatisticDetailsState>(
create: (context) => StatisticDetailsState(),
child: StatisticDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
case Routes.stock:
return _createRoute(MultiProvider(
providers: [
ChangeNotifierProvider<NewStockState>(
create: (context) => NewStockState(),
),
],
child: const NewStock(),
));
case Routes.directList:
return _createRoute(
ChangeNotifierProvider<DirectListState>(
create: (context) => DirectListState(),
child: const DirectList(),
),
);
case Routes.direct:
return _createRoute(
ChangeNotifierProvider<DirectState>(
create: (context) => DirectState(),
child: Direct(pageData: settings.arguments as Map<String, dynamic>),
),
);
case Routes.comments:
return _createRoute(
ChangeNotifierProvider<CommentsState>(
create: (context) => CommentsState(),
child: Comments(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
case Routes.bookmarks:
return _createRoute(
ChangeNotifierProvider<BookmarksState>(
create: (context) => BookmarksState(),
child: const Bookmarks(),
),
);
case Routes.hashtag:
return _createRoute(
ChangeNotifierProvider<HashtagState>(
create: (context) => HashtagState(),
child:
Hashtag(pageData: settings.arguments as Map<String, dynamic>),
),
);
case Routes.filteredBookmarks:
return _createRoute(
ChangeNotifierProvider<FilteredBookmarksState>(
create: (context) => FilteredBookmarksState(
(settings.arguments as Map<String, dynamic>)['type'],
),
child: FilteredBookmarks(
onDeleted:
(settings.arguments as Map<String, dynamic>)['onDeleted']),
),
);
default:
return _errorRoute(settings.name ?? '');
}
}
static Route<dynamic> _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,
),
),
);
},
);
}
}