home_page.dart 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. import 'package:flustars/flustars.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/internal/news/page/news_home_page.dart';
  4. import 'package:liftmanager/internal/home/provider/home_provider.dart';
  5. import 'package:liftmanager/internal/hospital/page/hospital_page.dart';
  6. import 'package:liftmanager/internal/wode/model/version_item.dart';
  7. import 'package:liftmanager/net/api_service.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/utils/theme_utils.dart';
  10. import 'package:liftmanager/utils/toast.dart';
  11. import 'package:liftmanager/widgets/load_image.dart';
  12. import 'package:liftmanager/internal/wode/page/wode_page.dart';
  13. import 'package:liftmanager/internal/work/page/work_page.dart';
  14. import 'package:liftmanager/widgets/update_dialog.dart';
  15. import 'package:package_info/package_info.dart';
  16. import 'package:provider/provider.dart' as p;
  17. class HomePage extends StatefulWidget {
  18. @override
  19. _HomeState createState() => _HomeState();
  20. }
  21. class _HomeState extends State<HomePage> {
  22. var _pageList = [
  23. NewsPage(),
  24. WorkPage(),
  25. // HospitalPage(),
  26. WodePage(),
  27. ];
  28. var _appBarTitles = ['首页', '工作台', '我的'];
  29. final _pageController = PageController();
  30. HomeProvider provider = HomeProvider();
  31. List<BottomNavigationBarItem> _list;
  32. List<BottomNavigationBarItem> _listDark;
  33. VersionItem versionItem = VersionItem();
  34. PackageInfo packageInfo;
  35. @override
  36. void initState() {
  37. super.initState();
  38. initData();
  39. WidgetsBinding.instance.addPostFrameCallback((_) async {
  40. getNewVersion();
  41. });
  42. }
  43. getNewVersion() async{
  44. packageInfo = await PackageInfo.fromPlatform();
  45. ApiService(context: context).version(onSuccess: (res){
  46. if(res !=null){
  47. versionItem = res;
  48. int versionCode = SpUtil.getInt("version_code")??0;
  49. if(versionItem.code>versionCode &&versionItem.code >int.parse(packageInfo.buildNumber)){
  50. _showUpdateDialog();
  51. }
  52. setState(() {
  53. });
  54. }
  55. },onError: (code,msg){
  56. });
  57. }
  58. void _showUpdateDialog() {
  59. showDialog(
  60. context: context,
  61. barrierDismissible: false,
  62. builder: (BuildContext context) {
  63. return UpdateDialog(content: versionItem.content,url:versionItem.url,code:versionItem.code,version: versionItem.version,forceUpdate: versionItem.forceUpdate==1?true:false,);
  64. }
  65. );
  66. }
  67. void initData(){
  68. _pageList = [
  69. NewsPage(),
  70. WorkPage(),
  71. // HospitalPage(),
  72. WodePage(),
  73. ];
  74. }
  75. List<BottomNavigationBarItem> _buildBottomNavigationBarItem(){
  76. if (_list == null){
  77. var _tabImages = [
  78. [
  79. const LoadAssetImage("home/tabar_quanzi_normal", width: 25.0, color: Colours.unselected_item_color,),
  80. const LoadAssetImage("home/tabar_quanzi_selected", width: 25.0, color: Colours.app_main,),
  81. ],
  82. [
  83. const LoadAssetImage("home/tabar_gongjutai_normal", width: 25.0, color: Colours.unselected_item_color,),
  84. const LoadAssetImage("home/tabar_gongjutai_selected", width: 25.0, color: Colours.app_main,),
  85. ],
  86. // [
  87. // const LoadAssetImage("home/tabar_tiyiyuan_normal", width: 25.0, color: Colours.unselected_item_color,),
  88. // const LoadAssetImage("home/tabar_tiyiyuan_selected", width: 25.0, color: Colours.app_main,),
  89. // ],
  90. [
  91. const LoadAssetImage("home/tabar_wode_normal", width: 25.0, color: Colours.unselected_item_color,),
  92. const LoadAssetImage("home/tabar_wode_selected", width: 25.0, color: Colours.app_main,),
  93. ]
  94. ];
  95. _list = List.generate(_appBarTitles.length, (i){
  96. return BottomNavigationBarItem(
  97. icon: _tabImages[i][0],
  98. activeIcon: _tabImages[i][1],
  99. title: Padding(
  100. padding: const EdgeInsets.only(top: 1.5),
  101. child: Text(_appBarTitles[i],style: TextStyle(fontSize: 15), key: Key(_appBarTitles[i]),),
  102. )
  103. );
  104. });
  105. }
  106. return _list;
  107. }
  108. List<BottomNavigationBarItem> _buildDarkBottomNavigationBarItem(){
  109. if (_listDark == null){
  110. var _tabImagesDark = [
  111. [
  112. const LoadAssetImage("home/tabar_quanzi_normal", width: 25.0, color: Colours.unselected_item_color,),
  113. const LoadAssetImage("home/tabar_quanzi_selected", width: 25.0, color: Colours.app_main,),
  114. ],
  115. [
  116. const LoadAssetImage("home/tabar_gongjutai_normal", width: 25.0, color: Colours.unselected_item_color,),
  117. const LoadAssetImage("home/tabar_gongjutai_selected", width: 25.0, color: Colours.app_main,),
  118. ],
  119. // [
  120. // const LoadAssetImage("home/tabar_tiyiyuan_normal", width: 25.0, color: Colours.unselected_item_color,),
  121. // const LoadAssetImage("home/tabar_tiyiyuan_selected", width: 25.0, color: Colours.app_main,),
  122. // ],
  123. [
  124. const LoadAssetImage("home/tabar_wode_normal", width: 25.0, color: Colours.unselected_item_color,),
  125. const LoadAssetImage("home/tabar_wode_selected", width: 25.0, color: Colours.app_main,),
  126. ]
  127. ];
  128. _listDark = List.generate(_appBarTitles.length, (i){
  129. return BottomNavigationBarItem(
  130. icon: _tabImagesDark[i][0],
  131. activeIcon: _tabImagesDark[i][1],
  132. title: Padding(
  133. padding: const EdgeInsets.only(top: 1.5),
  134. child: Text(_appBarTitles[i],style: TextStyle(fontSize: 15), key: Key(_appBarTitles[i]),),
  135. )
  136. );
  137. });
  138. }
  139. return _listDark;
  140. }
  141. DateTime _lastTime;
  142. Future<bool> _isExit(){
  143. if (_lastTime == null || DateTime.now().difference(_lastTime) > Duration(milliseconds: 2500)) {
  144. _lastTime = DateTime.now();
  145. toasts("再次点击退出应用");
  146. return Future.value(false);
  147. }
  148. // Toast.cancelToast();
  149. return Future.value(true);
  150. }
  151. @override
  152. Widget build(BuildContext context) {
  153. bool isDark = ThemeUtils.isDark(context);
  154. return p.ChangeNotifierProvider<HomeProvider>(
  155. create: (_) => provider,
  156. child: WillPopScope(
  157. onWillPop: _isExit,
  158. child: Scaffold(
  159. bottomNavigationBar: p.Consumer<HomeProvider>(
  160. builder: (_, provider, __){
  161. return BottomNavigationBar(
  162. backgroundColor: ThemeUtils.getTabsBg(context),
  163. items: isDark ? _buildDarkBottomNavigationBarItem() : _buildBottomNavigationBarItem(),
  164. type: BottomNavigationBarType.fixed,
  165. currentIndex: provider.value,
  166. elevation: 5.0,
  167. iconSize: 21.0,
  168. selectedFontSize: Dimens.font_sp10,
  169. unselectedFontSize: Dimens.font_sp10,
  170. selectedItemColor: Theme.of(context).primaryColor,
  171. unselectedItemColor: isDark ? Colours.dark_unselected_item_color : Colours.unselected_item_color,
  172. onTap: (index) => _pageController.jumpToPage(index),
  173. );
  174. },
  175. ),
  176. // 使用PageView的原因参看 https://zhuanlan.zhihu.com/p/58582876
  177. body: PageView(
  178. controller: _pageController,
  179. onPageChanged: _onPageChanged,
  180. children: _pageList,
  181. physics: NeverScrollableScrollPhysics(), // 禁止滑动
  182. )
  183. ),
  184. ),
  185. );
  186. }
  187. void _onPageChanged(int index) {
  188. provider.value = index;
  189. }
  190. }