diff --git a/lib/main.dart b/lib/main.dart
index 26c981eef358d135d1e378d9d219b793aff419d1..385c75275ba37d720b448c0d84f723c941d41cff 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 9a351e466364c6bbde926a2dbf17e726b571f1cd..90f5bbbc964804222929c2284dcbc320569896b3 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 afae757b13324bc6d9834e793ca3f625538c9f81..0b7b84c2c722c0009d1734985a706fc0eed6712c 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 4febc87db791e85d3d4ceede41abe0fc625e7996..7e4622a2601fab5d277f072eddc2c1e163aa1a44 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 1e72292fb9d6d76d0b14eca2b25a953219f98718..dee5b4716c221227b11b8fbe98831bcc161dc301 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 efd34274541ebaf2fa98b976dbb7c8e5087c1a24..c5ace73e17d1043822595e7f9ccafd816f011690 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 4e60e693c5a7ad617a0dee365e2efc398bbf19a8..0ee858f9f8e3a5b95efb237749a1fc48606cb7f9 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 a647a594145ff6ed0debc095bc24e825e005c261..9e3d1b778d012f9d094cd3e018ef753b558982f1 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 45d4d6892914bf61392a3aa38a6789c344f38b41..a331e12b75f7378be082b137565c540579c31c00 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 c1921ceca60797305f7f625ac8d3e5ccc350f784..b57be1927139195b4d9807ef81779f5ab12dc701 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 93356c6b6403825aaae40ca5211111ec080e6257..6b9c03441e1ec26acb17ca9cc508d2f1ab9c6b07 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