From fc899d1e9477084b1315133c5dc886e04310d2e0 Mon Sep 17 00:00:00 2001 From: Fakhira <fakhira.devina@ui.ac.id> Date: Wed, 25 Mar 2020 22:15:31 +0700 Subject: [PATCH] Change all routing method with pushNamed --- lib/main.dart | 2 + lib/src/app.dart | 4 +- lib/src/routes.dart | 90 +++++++++++-------- lib/src/screens/home/institusi/institusi.dart | 12 +-- .../screens/home/inventories/inventories.dart | 2 +- .../institusi-screen/institusi_screen.dart | 19 ++-- .../institusi-screen/kebutuhan/kebutuhan.dart | 18 ++-- lib/src/screens/login/login_screen.dart | 2 +- lib/src/widgets/auth_guard_widget.dart | 2 +- pubspec.lock | 9 +- pubspec.yaml | 1 + 11 files changed, 93 insertions(+), 68 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 26c981e..385c752 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:mobile_apps/src/app.dart'; +import 'package:mobile_apps/src/routes.dart'; void main() { + AppRoute.setupRouter(); runApp(App()); } diff --git a/lib/src/app.dart b/lib/src/app.dart index 9a351e4..90f5bbb 100644 --- a/lib/src/app.dart +++ b/lib/src/app.dart @@ -18,8 +18,8 @@ class App extends StatelessWidget { theme: AppTheme.light(), themeMode: ThemeMode.light, darkTheme: AppTheme.dark(), - initialRoute: AppRoutes.home.route, - routes: AppRoutes.routes, + onGenerateRoute: AppRoute.router.generator, + initialRoute: AppRoute.home, ), ); } diff --git a/lib/src/routes.dart b/lib/src/routes.dart index afae757..0b7b84c 100644 --- a/lib/src/routes.dart +++ b/lib/src/routes.dart @@ -1,44 +1,62 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/screens/detail-item-needs/detail-item.dart'; import 'package:mobile_apps/src/screens/home/inventories/all_inventories.dart'; - +import 'package:mobile_apps/src/screens/institusi-screen/institusi_screen.dart'; +import 'package:fluro/fluro.dart'; import 'screens/home/home_screen.dart'; import 'screens/login/login_screen.dart'; class AppRoute { - final String route; - final WidgetBuilder widgetBuilder; - - AppRoute(this.route, this.widgetBuilder) - : assert(route.startsWith('/')), - assert(widgetBuilder != null); -} - -class AppRoutes { - // Add known registered routes in this variable - static final List<AppRoute> _registeredRoutes = [ - AppRoutes.home, - AppRoutes.login, - AppRoutes.recap - ]; - - static Map<String, WidgetBuilder> get routes => Map.fromEntries( - _registeredRoutes.map( - (route) => - MapEntry<String, WidgetBuilder>(route.route, route.widgetBuilder), - ), - ); - - // Route for Home Screen - static final AppRoute home = AppRoute('/home', (_) => HomeScreen()); - - // Route for Login Screen - static final AppRoute login = AppRoute('/login', (_) => LoginScreen()); - - // Route for rekap siaga wabah - static final AppRoute recap = - AppRoute('/recap', (_) => AllInventoriesWidget()); - /** - * Add new Route definition below here and add it to [AppRoutes._registeredRoutes] - */ + static String home = '/home'; + static String login = '/login'; + static String recap = '/recap'; + static String institusi( + {@required String idInstitusi, @required String namaInstitusi}) => + '/institusi/$idInstitusi/$namaInstitusi'; + static String itemNeeded( + {@required String idInstitusi, + @required String idItemNeeded, + @required String namaInstitusi}) => + '/itemNeeded/$idItemNeeded/$idInstitusi/$namaInstitusi'; + + static Router router = Router(); + + static final Handler _homeHandler = Handler( + handlerFunc: (BuildContext context, Map<String, dynamic> params) => + HomeScreen()); + static final Handler _loginHandler = Handler( + handlerFunc: (BuildContext context, Map<String, dynamic> params) => + LoginScreen()); + static final Handler _recapHandler = Handler( + handlerFunc: (BuildContext context, Map<String, dynamic> params) => + AllInventoriesWidget()); + static final Handler _institusiHandler = Handler( + handlerFunc: (BuildContext context, Map<String, dynamic> params) => + InstitusiScreen( + namaInstitusi: params['namaInstitusi'][0], + idInstitusi: params['idInstitusi'][0])); + static final Handler _itemNeededHandler = Handler( + handlerFunc: (BuildContext context, Map<String, dynamic> params) => + DetailItemNeeds( + idInstitusi: params['idInstitusi'][0], + idItemNeeded: params['idItemNeeded'][0], + institusiName: params['namaInstitusi'][0])); + + static void setupRouter() { + router.define( + '/home', + handler: _homeHandler, + ); + router.define( + '/login', + handler: _loginHandler, + ); + router.define('/recap', handler: _recapHandler); + router.define('/institusi/:idInstitusi/:namaInstitusi', + handler: _institusiHandler); + router.define( + '/itemNeeded/:idItemNeeded/:idInstitusi/:namaInstitusi', + handler: _itemNeededHandler); + } } diff --git a/lib/src/screens/home/institusi/institusi.dart b/lib/src/screens/home/institusi/institusi.dart index 4febc87..7e4622a 100644 --- a/lib/src/screens/home/institusi/institusi.dart +++ b/lib/src/screens/home/institusi/institusi.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:mobile_apps/src/components/progressbar/progressbar.dart'; import 'package:mobile_apps/src/models/institusi.dart'; -import 'package:mobile_apps/src/screens/institusi-screen/institusi_screen.dart'; +import 'package:mobile_apps/src/routes.dart'; class InstitusiWidget extends StatelessWidget { final Institusi institusi; @@ -36,13 +36,9 @@ class InstitusiWidget extends StatelessWidget { borderRadius: BorderRadius.circular(32)), splashColor: Colors.redAccent, onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => InstitusiScreen( - namaInstitusi: institusi.nama, - idInstitusi: institusi.id, - ))); + Navigator.of(context).pushNamed(AppRoute.institusi( + namaInstitusi: institusi.nama, + idInstitusi: institusi.id)); }, child: Text( 'Detail Kebutuhan', diff --git a/lib/src/screens/home/inventories/inventories.dart b/lib/src/screens/home/inventories/inventories.dart index 1e72292..dee5b47 100644 --- a/lib/src/screens/home/inventories/inventories.dart +++ b/lib/src/screens/home/inventories/inventories.dart @@ -51,7 +51,7 @@ class InventoriesWidget extends StatelessWidget { decoration: TextDecoration.underline), ), onPressed: () { - Navigator.of(context).pushNamed(AppRoutes.recap.route); + Navigator.of(context).pushNamed(AppRoute.recap); }, ), ), diff --git a/lib/src/screens/institusi-screen/institusi_screen.dart b/lib/src/screens/institusi-screen/institusi_screen.dart index efd3427..c5ace73 100644 --- a/lib/src/screens/institusi-screen/institusi_screen.dart +++ b/lib/src/screens/institusi-screen/institusi_screen.dart @@ -2,7 +2,8 @@ import 'package:flutter/material.dart'; import 'package:mobile_apps/src/common/constants.dart'; import 'package:mobile_apps/src/screens/home/kontak/kontak.dart'; import 'package:esys_flutter_share/esys_flutter_share.dart'; -import 'package:path/path.dart' as p; +import 'dart:io'; +import 'package:screenshot/screenshot.dart'; import 'kebutuhan/kebutuhan.dart'; class InstitusiScreen extends StatefulWidget { @@ -50,13 +51,15 @@ class _InstitusiScreenState extends State<InstitusiScreen> IconButton( icon: Icon(Icons.share), onPressed: () { - var frag = p.join('/', 'institusi'); - var url = Uri( - scheme: 'https', host: 'sigap.cs.ui.ac.id', fragment: frag); - Share.text( - 'Ayo bantu tenaga medis di Siaga Wabah', - 'Ayo bantu tenaga medis melawan COVID-19 di $url', - 'text/plain'); + ScreenshotController() + .capture(pixelRatio: 1.5) + .then((File image) { + Share.file( + 'Siaga Wabah', + 'Siaga_Wabah_${widget.namaInstitusi}.png', + image.readAsBytesSync(), + 'image/png'); + }); }, // margin: EdgeInsets.only(right: 8.0), ), diff --git a/lib/src/screens/institusi-screen/kebutuhan/kebutuhan.dart b/lib/src/screens/institusi-screen/kebutuhan/kebutuhan.dart index 4e60e69..0ee858f 100644 --- a/lib/src/screens/institusi-screen/kebutuhan/kebutuhan.dart +++ b/lib/src/screens/institusi-screen/kebutuhan/kebutuhan.dart @@ -3,7 +3,7 @@ import 'package:flutter/scheduler.dart'; import 'package:mobile_apps/src/common/constants.dart'; import 'package:mobile_apps/src/repositories/item_repositories.dart'; import 'package:mobile_apps/src/repositories/kebutuhan_repository.dart'; -import 'package:mobile_apps/src/screens/detail-item-needs/detail-item.dart'; +import 'package:mobile_apps/src/routes.dart'; class Kebutuhan extends StatelessWidget { final String idInstitusi; @@ -62,21 +62,19 @@ class Kebutuhan extends StatelessWidget { } Widget kebutuhanProgress( - {@required String idItemNeeded, @required String idItem, + {@required String idItemNeeded, + @required String idItem, @required int kebutuhan, @required int terpenuhi, @required BuildContext context}) { final itemRepository = ItemRepository(path: idItem); return InkWell( onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DetailItemNeeds( - idInstitusi: idInstitusi, - idItemNeeded: idItemNeeded, - institusiName: namaInstitusi, - ))); + Navigator.of(context).pushNamed(AppRoute.itemNeeded( + idInstitusi: idInstitusi, + idItemNeeded: idItemNeeded, + namaInstitusi: namaInstitusi, + )); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/src/screens/login/login_screen.dart b/lib/src/screens/login/login_screen.dart index a647a59..9e3d1b7 100644 --- a/lib/src/screens/login/login_screen.dart +++ b/lib/src/screens/login/login_screen.dart @@ -33,7 +33,7 @@ class _LoginScreenState extends State<LoginScreen> { setState(() => isLoading = false); } if (authService.isAuthenticated) { - await Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.home.route, (_) => false); + await Navigator.of(context).pushNamedAndRemoveUntil(AppRoute.home, (_) => false); } } diff --git a/lib/src/widgets/auth_guard_widget.dart b/lib/src/widgets/auth_guard_widget.dart index 45d4d68..a331e12 100644 --- a/lib/src/widgets/auth_guard_widget.dart +++ b/lib/src/widgets/auth_guard_widget.dart @@ -11,7 +11,7 @@ class AuthGuardWidget extends StatelessWidget { final authService = Provider.of<AuthService>(context); if (!authService.isAuthenticated) { SchedulerBinding.instance.addPostFrameCallback((_) { - Navigator.of(context).pushReplacementNamed(AppRoutes.login.route); + Navigator.of(context).pushReplacementNamed(AppRoute.login); }); return Container(); } diff --git a/pubspec.lock b/pubspec.lock index c1921ce..b57be19 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -281,6 +281,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.10.11" + fluro: + dependency: "direct main" + description: + name: fluro + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.1" flutter: dependency: "direct main" description: flutter @@ -751,4 +758,4 @@ packages: version: "2.2.0" sdks: dart: ">=2.7.0 <3.0.0" - flutter: ">=1.12.13+hotfix.4 <2.0.0" + flutter: ">=1.12.13+hotfix.4 <1.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 93356c6..6b9c034 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,6 +24,7 @@ dependencies: firebase_auth: ^0.15.5+3 cloud_firestore: ^0.13.3 google_sign_in: ^4.2.0 + fluro: ^1.6.1 # Other Flutter dependencies -- GitLab