import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:aman_kassa_flutter/app_routes.dart'; import 'package:aman_kassa_flutter/features/home/home_page.dart'; import 'package:aman_kassa_flutter/features/newgame/new_game.dart'; import 'package:aman_kassa_flutter/features/stub_screen.dart'; import 'package:aman_kassa_flutter/redux/app_state.dart'; import 'package:aman_kassa_flutter/redux/navigation_middleware.dart'; import 'package:aman_kassa_flutter/redux/reducers/app_reducer.dart'; import 'package:aman_kassa_flutter/route_aware_widget.dart'; void main() => runApp(MyApp()); final GlobalKey navigatorKey = new GlobalKey(); class MyApp extends StatelessWidget { final store = Store(appReducer, initialState: AppState.loading(), middleware: createNavigationMiddleware()); final theme = ThemeData( primaryColor: Colors.grey.shade900, //primaryColorLight: Colors.grey.shade800, //primaryColorDark: Colors.black, //scaffoldBackgroundColor: Colors.grey.shade800, // textTheme: TextTheme( // body1: TextStyle(color: Colors.white), // display1: TextStyle(color: Colors.white), // title: TextStyle(color: Colors.white), // ), //iconTheme: IconThemeData(color: Colors.white), //accentColor: Colors.yellow[500], ); MaterialPageRoute _getRoute(RouteSettings settings) { switch (settings.name) { case AppRoutes.home: return MainRoute(HomePage(), settings: settings); case AppRoutes.addGame: return FabRoute(NewGame(), settings: settings); default: return MainRoute(StubScreen(), settings: settings); } } @override Widget build(BuildContext context) { return StoreProvider( store: store, child: MaterialApp( navigatorKey: navigatorKey, navigatorObservers: [routeObserver], title: 'AppLocalizations.appTitle', localizationsDelegates: [ //AppLocalizationsDelegate(), ], theme: theme, onGenerateRoute: (RouteSettings settings) => _getRoute(settings), ), ); } } class MainRoute extends MaterialPageRoute { MainRoute(Widget widget, {RouteSettings settings}) : super( builder: (_) => RouteAwareWidget(child: widget), settings: settings); @override Widget buildTransitions(BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { if (settings.isInitialRoute) return child; // Fades between routes. (If you don't want any animation, // just return child.) return FadeTransition(opacity: animation, child: child); } } class FabRoute extends MaterialPageRoute { FabRoute(Widget widget, {RouteSettings settings}) : super( builder: (_) => RouteAwareWidget(child: widget), settings: settings); @override Widget buildTransitions(BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { if (settings.isInitialRoute) return child; return SlideTransition( position: new Tween( begin: const Offset(0.0, 1.0), end: Offset.zero, ).animate(animation), child: child); } }