Advertisement
rachmadi

main.dart

Mar 11th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 5.73 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:bencana/constants.dart';
  3. import 'package:bencana/home.dart';
  4. import 'package:bencana/disaster.dart';
  5. import 'package:bencana/missing.dart';
  6. import 'package:bencana/authentication.dart';
  7. import 'package:firebase_auth/firebase_auth.dart';
  8. import 'dart:async';
  9. import 'package:bencana/post_add.dart';
  10. import 'package:bencana/disaster_add.dart';
  11. import 'package:bencana/missing_add.dart';
  12.  
  13. void main() => runApp(MyApp());
  14.  
  15. class MyApp extends StatelessWidget {
  16.   // This widget is the root of your application.
  17.   @override
  18.   Widget build(BuildContext context) {
  19.     return MaterialApp(
  20.       title: 'Flutter Demo',
  21.       debugShowCheckedModeBanner: false,
  22.       theme: ThemeData(
  23.         primarySwatch: Colors.teal,
  24.       ),
  25. //      home: MyHomePage(title: 'Flutter Demo Home Page'),
  26.       home: DashboardScreen(title: 'B-Alert'),
  27.     );
  28.   }
  29. }
  30.  
  31. class DashboardScreen extends StatefulWidget {
  32.   // 1. Deklarasikan parameter untuk DashboardScreen
  33.   DashboardScreen({Key key, this.title}) : super(key: key);
  34.   final String title;
  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.     }
  95.   }
  96.  
  97.   Future<String> getCurrentUser() async {
  98.     try {
  99.       FirebaseUser user = await FirebaseAuth.instance.currentUser();
  100.       return user.uid;
  101.     } catch (e) {
  102.       print('Error: $e');
  103.       return null;
  104.     }
  105.   }
  106.  
  107.   void signOut() async {
  108.     try {
  109.       FirebaseAuth.instance.signOut();
  110.       setState(() {
  111.         _authStatus = AuthStatus.notSignIn;
  112.       });
  113.     } catch (e) {
  114.       print('Error: $e');
  115.     }
  116.   }
  117.  
  118.   @override
  119.   Widget build(BuildContext context) {
  120.     switch (_authStatus) {
  121.       case AuthStatus.notSignIn:
  122.         return AuthenticationPage();
  123.       case AuthStatus.signIn:
  124.         return Scaffold(
  125.           appBar: AppBar(
  126.             title: Text(
  127.               widget.title,
  128.             ),
  129.             actions: <Widget>[
  130.               PopupMenuButton<String>(
  131.                 onSelected: selectedAction,
  132.                 itemBuilder: (BuildContext context) {
  133.                   return Constants.choices.map((String choice) {
  134.                     return PopupMenuItem<String>(
  135.                       value: choice,
  136.                       child: Text(choice),
  137.                     );
  138.                   }).toList();
  139.                 },
  140.               ),
  141.             ],
  142.           ),
  143.           body: PageView(
  144.             children: <Widget>[
  145.               HomePage(),
  146.               DisasterPage(),
  147.               MissingPage(),
  148.             ],
  149.             onPageChanged: onPageChanged,
  150.             controller: _pageController,
  151.           ),
  152.           floatingActionButton: FloatingActionButton(
  153.             onPressed: () {
  154.               // Set FAB sesuai dengan page
  155.               switch (_page) {
  156.                 case 0:
  157.                   Navigator.push(
  158.                     context,
  159.                     MaterialPageRoute(builder: (context) => PostAdd()),
  160.                   );
  161.                   break;
  162.                 case 1:
  163.                   Navigator.push(
  164.                     context,
  165.                     MaterialPageRoute(builder: (context) => DisasterAdd()),
  166.                   );
  167.                   break;
  168.                 case 2:
  169.                   Navigator.push(
  170.                     context,
  171.                     MaterialPageRoute(builder: (context) => MissingAdd()),
  172.                   );
  173.                   break;
  174.               }
  175.             },
  176.             child: Icon(Icons.add),
  177.           ),
  178.           bottomNavigationBar: Theme(
  179.             data: Theme.of(context).copyWith(
  180.               canvasColor: Colors.teal[100],
  181.             ),
  182.             child: BottomNavigationBar(
  183.               items: [
  184.                 BottomNavigationBarItem(
  185.                   icon: Icon(Icons.announcement),
  186.                   title: Text('News'),
  187.                 ),
  188.                 BottomNavigationBarItem(
  189.                   icon: Icon(Icons.warning),
  190.                   title: Text('Disaster'),
  191.                 ),
  192.                 BottomNavigationBarItem(
  193.                   icon: Icon(Icons.people),
  194.                   title: Text('Missing'),
  195.                 ),
  196.               ],
  197.               onTap: navigationTapped,
  198.               currentIndex: _page,
  199.               fixedColor: Colors.teal,
  200.             ),
  201.           ),
  202.         );
  203.     }
  204.   }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement