import 'package:flustars/flustars.dart'; import 'package:flutter/material.dart'; import 'package:liftmanager/internal/news/page/news_home_page.dart'; import 'package:liftmanager/internal/home/provider/home_provider.dart'; import 'package:liftmanager/internal/hospital/page/hospital_page.dart'; import 'package:liftmanager/internal/wode/model/version_item.dart'; import 'package:liftmanager/net/api_service.dart'; import 'package:liftmanager/res/resources.dart'; import 'package:liftmanager/utils/theme_utils.dart'; import 'package:liftmanager/utils/toast.dart'; import 'package:liftmanager/widgets/load_image.dart'; import 'package:liftmanager/internal/wode/page/wode_page.dart'; import 'package:liftmanager/internal/work/page/work_page.dart'; import 'package:liftmanager/widgets/update_dialog.dart'; import 'package:package_info/package_info.dart'; import 'package:provider/provider.dart' as p; class HomePage extends StatefulWidget { @override _HomeState createState() => _HomeState(); } class _HomeState extends State { var _pageList = [ NewsPage(), WorkPage(), // HospitalPage(), WodePage(), ]; var _appBarTitles = ['首页', '工作台', '我的']; final _pageController = PageController(); HomeProvider provider = HomeProvider(); List _list; List _listDark; VersionItem versionItem = VersionItem(); PackageInfo packageInfo; @override void initState() { super.initState(); initData(); WidgetsBinding.instance.addPostFrameCallback((_) async { getNewVersion(); }); } getNewVersion() async{ packageInfo = await PackageInfo.fromPlatform(); ApiService(context: context).version(onSuccess: (res){ if(res !=null){ versionItem = res; int versionCode = SpUtil.getInt("version_code")??0; if(versionItem.code>versionCode &&versionItem.code >int.parse(packageInfo.buildNumber)){ _showUpdateDialog(); } setState(() { }); } },onError: (code,msg){ }); } void _showUpdateDialog() { showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return UpdateDialog(content: versionItem.content,url:versionItem.url,code:versionItem.code,version: versionItem.version,forceUpdate: versionItem.forceUpdate==1?true:false,); } ); } void initData(){ _pageList = [ NewsPage(), WorkPage(), // HospitalPage(), WodePage(), ]; } List _buildBottomNavigationBarItem(){ if (_list == null){ var _tabImages = [ [ const LoadAssetImage("home/tabar_quanzi_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_quanzi_selected", width: 25.0, color: Colours.app_main,), ], [ const LoadAssetImage("home/tabar_gongjutai_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_gongjutai_selected", width: 25.0, color: Colours.app_main,), ], // [ // const LoadAssetImage("home/tabar_tiyiyuan_normal", width: 25.0, color: Colours.unselected_item_color,), // const LoadAssetImage("home/tabar_tiyiyuan_selected", width: 25.0, color: Colours.app_main,), // ], [ const LoadAssetImage("home/tabar_wode_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_wode_selected", width: 25.0, color: Colours.app_main,), ] ]; _list = List.generate(_appBarTitles.length, (i){ return BottomNavigationBarItem( icon: _tabImages[i][0], activeIcon: _tabImages[i][1], title: Padding( padding: const EdgeInsets.only(top: 1.5), child: Text(_appBarTitles[i],style: TextStyle(fontSize: 15), key: Key(_appBarTitles[i]),), ) ); }); } return _list; } List _buildDarkBottomNavigationBarItem(){ if (_listDark == null){ var _tabImagesDark = [ [ const LoadAssetImage("home/tabar_quanzi_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_quanzi_selected", width: 25.0, color: Colours.app_main,), ], [ const LoadAssetImage("home/tabar_gongjutai_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_gongjutai_selected", width: 25.0, color: Colours.app_main,), ], // [ // const LoadAssetImage("home/tabar_tiyiyuan_normal", width: 25.0, color: Colours.unselected_item_color,), // const LoadAssetImage("home/tabar_tiyiyuan_selected", width: 25.0, color: Colours.app_main,), // ], [ const LoadAssetImage("home/tabar_wode_normal", width: 25.0, color: Colours.unselected_item_color,), const LoadAssetImage("home/tabar_wode_selected", width: 25.0, color: Colours.app_main,), ] ]; _listDark = List.generate(_appBarTitles.length, (i){ return BottomNavigationBarItem( icon: _tabImagesDark[i][0], activeIcon: _tabImagesDark[i][1], title: Padding( padding: const EdgeInsets.only(top: 1.5), child: Text(_appBarTitles[i],style: TextStyle(fontSize: 15), key: Key(_appBarTitles[i]),), ) ); }); } return _listDark; } DateTime _lastTime; Future _isExit(){ if (_lastTime == null || DateTime.now().difference(_lastTime) > Duration(milliseconds: 2500)) { _lastTime = DateTime.now(); toasts("再次点击退出应用"); return Future.value(false); } // Toast.cancelToast(); return Future.value(true); } @override Widget build(BuildContext context) { bool isDark = ThemeUtils.isDark(context); return p.ChangeNotifierProvider( create: (_) => provider, child: WillPopScope( onWillPop: _isExit, child: Scaffold( bottomNavigationBar: p.Consumer( builder: (_, provider, __){ return BottomNavigationBar( backgroundColor: ThemeUtils.getTabsBg(context), items: isDark ? _buildDarkBottomNavigationBarItem() : _buildBottomNavigationBarItem(), type: BottomNavigationBarType.fixed, currentIndex: provider.value, elevation: 5.0, iconSize: 21.0, selectedFontSize: Dimens.font_sp10, unselectedFontSize: Dimens.font_sp10, selectedItemColor: Theme.of(context).primaryColor, unselectedItemColor: isDark ? Colours.dark_unselected_item_color : Colours.unselected_item_color, onTap: (index) => _pageController.jumpToPage(index), ); }, ), // 使用PageView的原因参看 https://zhuanlan.zhihu.com/p/58582876 body: PageView( controller: _pageController, onPageChanged: _onPageChanged, children: _pageList, physics: NeverScrollableScrollPhysics(), // 禁止滑动 ) ), ), ); } void _onPageChanged(int index) { provider.value = index; } }