didvan-app/lib/routes/route_generator.dart

176 lines
6.1 KiB
Dart

import 'package:didvan/pages/authentication/authentication.dart';
import 'package:didvan/pages/authentication/authentication_state.dart';
import 'package:didvan/pages/home/comments/comments.dart';
import 'package:didvan/pages/home/comments/comments_state.dart';
import 'package:didvan/pages/home/direct/direct.dart';
import 'package:didvan/pages/home/direct/direct_state.dart';
import 'package:didvan/pages/home/home.dart';
import 'package:didvan/pages/home/home_state.dart';
import 'package:didvan/pages/home/news/news_details/news_details.dart';
import 'package:didvan/pages/home/news/news_details/news_details_state.dart';
import 'package:didvan/pages/home/news/news_state.dart';
import 'package:didvan/pages/home/radar/radar_details/radar_details.dart';
import 'package:didvan/pages/home/radar/radar_details/radar_details_state.dart';
import 'package:didvan/pages/home/radar/radar_state.dart';
import 'package:didvan/pages/home/settings/about_us/about_us.dart';
import 'package:didvan/pages/home/settings/bookmarks/bookmarks.dart';
import 'package:didvan/pages/home/settings/bookmarks/bookmark_state.dart';
import 'package:didvan/pages/home/settings/bookmarks/filtered_bookmark/filtered_bookmark.dart';
import 'package:didvan/pages/home/settings/direct_list/direct_list.dart';
import 'package:didvan/pages/home/settings/direct_list/direct_list_state.dart';
import 'package:didvan/pages/home/settings/general_settings/settings.dart';
import 'package:didvan/pages/home/settings/general_settings/settings_state.dart';
import 'package:didvan/pages/home/settings/profile/profile.dart';
import 'package:didvan/pages/splash/splash.dart';
import 'package:didvan/routes/routes.dart';
import 'package:didvan/widgets/image_cropper.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case Routes.splash:
return _createRoute(
const Splash(),
);
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<RadarState>(
create: (context) => RadarState(),
),
ChangeNotifierProvider<NewsState>(
create: (context) => NewsState(),
),
],
child: const Home(),
),
);
case Routes.profile:
return _createRoute(
const Profile(),
);
case Routes.aboutUs:
return _createRoute(
const AboutUs(),
);
case Routes.imageCropper:
return _createRoute(
ImageCropper(
data: settings.arguments as Map<String, dynamic>,
),
);
case Routes.generalSettings:
return _createRoute(
ChangeNotifierProvider<GeneralSettingsState>(
create: (context) => GeneralSettingsState(),
child: const GeneralSettings(),
),
);
case Routes.radarDetails:
return _createRoute(
MultiProvider(
providers: [
ChangeNotifierProvider<RadarDetailsState>(
create: (context) => RadarDetailsState(),
),
if ((settings.arguments as Map<String, dynamic>)['state'] != null)
ChangeNotifierProvider<RadarState>.value(
value: (settings.arguments as Map<String, dynamic>)['state'],
)
],
child: RadarDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
case Routes.newsDetails:
return _createRoute(
MultiProvider(
providers: [
ChangeNotifierProvider<NewsDetailsState>(
create: (context) => NewsDetailsState(),
),
ChangeNotifierProvider<NewsState>.value(
value: (settings.arguments as Map<String, dynamic>)['state'],
)
],
child: NewsDetails(
pageData: settings.arguments as Map<String, dynamic>,
),
),
);
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(id: settings.arguments as int),
),
);
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.filteredBookmarks:
return _createRoute(
ChangeNotifierProvider<BookmarksState>.value(
value: settings.arguments as BookmarksState,
child: const FilteredBookmarks(),
),
);
default:
return _errorRoute();
}
}
static Route<dynamic> _errorRoute() {
return MaterialPageRoute(builder: (_) {
return Scaffold(
appBar: AppBar(
title: const Text('Error'),
),
body: const Center(
child: Text('ERROR'),
),
);
});
}
static Route _createRoute(page) {
return MaterialPageRoute(
builder: (context) => page,
);
}
}