Advertisement
alvinvin00

main.dart

Mar 18th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 5.88 KB | None | 0 0
  1. import 'package:bencana/missing_list.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:bencana/constants.dart';
  4. import 'package:bencana/home.dart';
  5. import 'package:bencana/disaster_page.dart';
  6. import 'package:bencana/missing_page.dart';
  7. import 'package:bencana/authentication.dart';
  8. import 'package:firebase_auth/firebase_auth.dart';
  9. import 'dart:async';
  10. import 'package:bencana/post_add.dart';
  11. import 'package:bencana/disaster_add.dart';
  12. import 'package:bencana/missing_add.dart';
  13. import 'package:bencana/profile_page.dart';
  14.  
  15. void main() => runApp(MyApp());
  16.  
  17. class MyApp extends StatelessWidget {
  18.   // This widget is the root of your application.
  19.   @override
  20.   Widget build(BuildContext context) {
  21.     return MaterialApp(
  22.       title: 'Flutter Demo',
  23.       debugShowCheckedModeBanner: false,
  24.       theme: ThemeData(
  25.         primarySwatch: Colors.teal,
  26.       ),
  27. //      home: MyHomePage(title: 'Flutter Demo Home Page'),
  28.       home: DashboardScreen(),
  29.     );
  30.   }
  31. }
  32.  
  33. class DashboardScreen extends StatefulWidget {
  34.   // 1. Deklarasikan parameter untuk DashboardScreen
  35.  
  36.   @override
  37.   _DashboardScreenState createState() => _DashboardScreenState();
  38. }
  39.  
  40. enum AuthStatus { signIn, notSignIn }
  41.  
  42. class _DashboardScreenState extends State<DashboardScreen> {
  43.   // 2. deklarasikan page controller dan initial page
  44.   PageController _pageController;
  45.   int _page = 0;
  46.  
  47.   AuthStatus _authStatus = AuthStatus.signIn;
  48.  
  49.   // 3. Inisialisasi page controller pada init state
  50.   @override
  51.   void initState() {
  52.     // TODO: implement initState
  53.     super.initState();
  54.     _pageController = PageController();
  55.  
  56.     getCurrentUser().then((userId) {
  57.       setState(() {
  58.         _authStatus = userId == null ? AuthStatus.notSignIn : AuthStatus.signIn;
  59.       });
  60.     });
  61.   }
  62.  
  63.   // 4. Buang page controller jika tidak dibutuhkan lagi
  64.   @override
  65.   void dispose() {
  66.     // TODO: implement dispose
  67.     super.dispose();
  68.     _pageController.dispose();
  69.   }
  70.  
  71.   // 5. Animasi perpindahan antar page
  72.   void navigationTapped(int page) {
  73.     _pageController.animateToPage(
  74.       page,
  75.       duration: const Duration(milliseconds: 300),
  76.       curve: Curves.ease,
  77.     );
  78.   }
  79.  
  80.   // 6. Tangani perpindahan page
  81.   void onPageChanged(int page) {
  82.     setState(() {
  83.       this._page = page;
  84.     });
  85.   }
  86.  
  87.   // 7. Deklarasikan list untuk menu item di file Constants.dart
  88.  
  89.   // 8. Siapkan aksi untuk pilihan menu item
  90.   void selectedAction(String choice) {
  91.     print('You choose: $choice');
  92.     if (choice == Constants.signout) {
  93.       signOut();
  94.     } else if (choice == Constants.profile){
  95.       Navigator.push(context,
  96.           MaterialPageRoute(builder: (context) => ProfilePage()));
  97.     }
  98.   }
  99.  
  100.   Future<String> getCurrentUser() async {
  101.     try {
  102.       FirebaseUser user = await FirebaseAuth.instance.currentUser();
  103.       return user.uid;
  104.     } catch (e) {
  105.       print('Error: $e');
  106.       return null;
  107.     }
  108.   }
  109.  
  110.   void signOut() async {
  111.     try {
  112.       FirebaseAuth.instance.signOut();
  113.       setState(() {
  114.         _authStatus = AuthStatus.notSignIn;
  115.       });
  116.     } catch (e) {
  117.       print('Error: $e');
  118.     }
  119.   }
  120.  
  121.   @override
  122.   Widget build(BuildContext context) {
  123.     switch (_authStatus) {
  124.       case AuthStatus.notSignIn:
  125.         return AuthenticationPage();
  126.       case AuthStatus.signIn:
  127.         return Scaffold(
  128.           appBar: AppBar(
  129.             title: Text(
  130.               'B-Alert',
  131.             ),
  132.             actions: <Widget>[
  133.               PopupMenuButton<String>(
  134.                 onSelected: selectedAction,
  135.                 itemBuilder: (BuildContext context) {
  136.                   return Constants.choices.map((String choice) {
  137.                     return PopupMenuItem<String>(
  138.                       value: choice,
  139.                       child: Text(choice),
  140.                     );
  141.                   }).toList();
  142.                 },
  143.               ),
  144.             ],
  145.           ),
  146.           body: PageView(
  147.             children: <Widget>[
  148.               HomePage(),
  149.               DisasterPage(),
  150.               MissingList(),
  151.             ],
  152.             onPageChanged: onPageChanged,
  153.             controller: _pageController,
  154.           ),
  155.           floatingActionButton: FloatingActionButton(
  156.             onPressed: () {
  157.               // Set FAB sesuai dengan page
  158.               switch (_page) {
  159.                 case 0:
  160.                   Navigator.push(
  161.                     context,
  162.                     MaterialPageRoute(builder: (context) => PostAdd()),
  163.                   );
  164.                   break;
  165.                 case 1:
  166.                   Navigator.push(
  167.                     context,
  168.                     MaterialPageRoute(builder: (context) => DisasterAdd()),
  169.                   );
  170.                   break;
  171.                 case 2:
  172. //                  Navigator.push(
  173. //                    context,
  174. //                    MaterialPageRoute(builder: (context) => MissingAdd()),
  175. //                  );
  176.                   break;
  177.               }
  178.             },
  179.             child: Icon(Icons.add),
  180.           ),
  181.           bottomNavigationBar: Theme(
  182.             data: Theme.of(context).copyWith(
  183.               canvasColor: Colors.teal[100],
  184.             ),
  185.             child: BottomNavigationBar(
  186.               items: [
  187.                 BottomNavigationBarItem(
  188.                   icon: Icon(Icons.announcement),
  189.                   title: Text('News'),
  190.                 ),
  191.                 BottomNavigationBarItem(
  192.                   icon: Icon(Icons.warning),
  193.                   title: Text('Disaster'),
  194.                 ),
  195.                 BottomNavigationBarItem(
  196.                   icon: Icon(Icons.people),
  197.                   title: Text('Missing'),
  198.                 ),
  199.               ],
  200.               onTap: navigationTapped,
  201.               currentIndex: _page,
  202.               fixedColor: Colors.teal,
  203.             ),
  204.           ),
  205.         );
  206.     }
  207.   }
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement