| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- import 'package:flutter/material.dart';
- import 'package:flutter/cupertino.dart';
- import './tabs/home.dart' as _firstTab;
- import './tabs/dashboard.dart' as _secondTab;
- import './tabs/settings.dart' as _thirdTab;
- import './screens/about.dart' as _aboutPage;
- import './screens/support.dart' as _supportPage;
- void main() => runApp(new MaterialApp(
- title: 'Flutter Starter',
- theme: new ThemeData(
- primarySwatch: Colors.blueGrey,
- scaffoldBackgroundColor: Colors.white,
- primaryColor: Colors.blueGrey, backgroundColor: Colors.white
- ),
- home: new Tabs(),
- onGenerateRoute: (RouteSettings settings) {
- switch (settings.name) {
- case '/about': return new FromRightToLeft(
- builder: (_) => new _aboutPage.About(),
- settings: settings,
- );
- case '/support': return new FromRightToLeft(
- builder: (_) => new _supportPage.Support(),
- settings: settings,
- );
- }
- },
- // routes: <String, WidgetBuilder> {
- // '/about': (BuildContext context) => new _aboutPage.About(),
- // }
- ));
- class FromRightToLeft<T> extends MaterialPageRoute<T> {
- FromRightToLeft({ WidgetBuilder builder, RouteSettings settings })
- : super(builder: builder, settings: settings);
- @override
- Widget buildTransitions(
- BuildContext context,
- Animation<double> animation,
- Animation<double> secondaryAnimation,
- Widget child) {
- if (settings.isInitialRoute)
- return child;
- return new SlideTransition(
- child: new Container(
- decoration: new BoxDecoration(
- boxShadow: [
- new BoxShadow(
- color: Colors.black26,
- blurRadius: 25.0,
- )
- ]
- ),
- child: child,
- ),
- position: new FractionalOffsetTween(
- begin: const FractionalOffset(1.0, 0.0),
- end: FractionalOffset.topLeft,
- )
- .animate(
- new CurvedAnimation(
- parent: animation,
- curve: Curves.fastOutSlowIn,
- )
- ),
- );
- }
- @override Duration get transitionDuration => const Duration(milliseconds: 400);
- }
- class Tabs extends StatefulWidget {
- @override
- TabsState createState() => new TabsState();
- }
- class TabsState extends State<Tabs> {
-
- PageController _tabController;
- var _title_app = null;
- int _tab = 0;
- @override
- void initState() {
- super.initState();
- _tabController = new PageController();
- this._title_app = TabItems[0].title;
- }
- @override
- void dispose(){
- super.dispose();
- _tabController.dispose();
- }
- @override
- Widget build (BuildContext context) => new Scaffold(
- //App Bar
- appBar: new AppBar(
- title: new Text(
- _title_app,
- style: new TextStyle(
- fontSize: Theme.of(context).platform == TargetPlatform.iOS ? 17.0 : 20.0,
- ),
- ),
- elevation: Theme.of(context).platform == TargetPlatform.iOS ? 0.0 : 4.0,
- ),
- //Content of tabs
- body: new PageView(
- controller: _tabController,
- onPageChanged: onTabChanged,
- children: <Widget>[
- new _firstTab.Home(),
- new _secondTab.Dashboard(),
- new _thirdTab.Settings()
- ],
- ),
- //Tabs
- bottomNavigationBar: Theme.of(context).platform == TargetPlatform.iOS ?
- new CupertinoTabBar(
- activeColor: Colors.blueGrey,
- currentIndex: _tab,
- onTap: onTap,
- items: TabItems.map((TabItem) {
- return new BottomNavigationBarItem(
- title: new Text(TabItem.title),
- icon: new Icon(TabItem.icon),
- );
- }).toList(),
- ):
- new BottomNavigationBar(
- currentIndex: _tab,
- onTap: onTap,
- items: TabItems.map((TabItem) {
- return new BottomNavigationBarItem(
- title: new Text(TabItem.title),
- icon: new Icon(TabItem.icon),
- );
- }).toList(),
- ),
- //Drawer
- drawer: new Drawer(
- child: new ListView(
- children: <Widget>[
- new Container(
- height: 120.0,
- child: new DrawerHeader(
- padding: new EdgeInsets.all(0.0),
- decoration: new BoxDecoration(
- color: new Color(0xFFECEFF1),
- ),
- child: new Center(
- child: new FlutterLogo(
- colors: Colors.blueGrey,
- size: 54.0,
- ),
- ),
- ),
- ),
- new ListTile(
- leading: new Icon(Icons.chat),
- title: new Text('Support'),
- onTap: () {
- Navigator.pop(context);
- Navigator.of(context).pushNamed('/support');
- }
- ),
- new ListTile(
- leading: new Icon(Icons.info),
- title: new Text('About'),
- onTap: () {
- Navigator.pop(context);
- Navigator.of(context).pushNamed('/about');
- }
- ),
- new Divider(),
- new ListTile(
- leading: new Icon(Icons.exit_to_app),
- title: new Text('Sign Out'),
- onTap: () {
- Navigator.pop(context);
- }
- ),
- ],
- )
- )
- );
- void onTap(int tab){
- _tabController.jumpToPage(tab);
- }
- void onTabChanged(int tab) {
- setState((){
- this._tab = tab;
- });
- switch (tab) {
- case 0:
- this._title_app = TabItems[0].title;
- break;
- case 1:
- this._title_app = TabItems[1].title;
- break;
- case 2:
- this._title_app = TabItems[2].title;
- break;
- }
- }
- }
- class TabItem {
- const TabItem({ this.title, this.icon });
- final String title;
- final IconData icon;
- }
- const List<TabItem> TabItems = const <TabItem>[
- const TabItem(title: 'Home', icon: Icons.home),
- const TabItem(title: 'Dashboard', icon: Icons.dashboard),
- const TabItem(title: 'Settings', icon: Icons.settings)
- ];
|