基础组件库
 
 
 
 
 

145 行
5.1 KiB

  1. import 'dart:async';
  2. import 'dart:typed_data';
  3. import 'package:connectivity/connectivity.dart';
  4. import 'package:flutter/cupertino.dart';
  5. import 'package:flutter/foundation.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter/services.dart';
  8. import 'package:zhiying_base_widget/dialog/tip_dialog/tip_dialog.dart';
  9. import 'package:mobpush_plugin/mobpush_custom_message.dart';
  10. import 'package:mobpush_plugin/mobpush_notify_message.dart';
  11. import 'package:mobpush_plugin/mobpush_plugin.dart';
  12. import 'package:zhiying_base_widget/models/app_config_model.dart';
  13. import 'package:zhiying_base_widget/pages/guide_page/guide_page.dart';
  14. import 'package:zhiying_base_widget/pages/home_page/home_page.dart';
  15. import 'package:zhiying_comm/util/application.dart';
  16. import 'package:zhiying_comm/zhiying_comm.dart';
  17. import 'package:dio/dio.dart';
  18. import 'package:zhiying_base_widget/utils/contants.dart';
  19. import 'package:zhiying_comm/util/shared_prefe_util.dart';
  20. import 'package:package_info/package_info.dart';
  21. import 'package:fluttertoast/fluttertoast.dart';
  22. // 启动页,页面初始化等操作~跟原生启动页保持一致,防止白屏问题
  23. class LaunchPage extends StatefulWidget {
  24. final WidgetBuilder builder;
  25. const LaunchPage({Key key, this.builder}) : super(key: key);
  26. @override
  27. _LaunchPageState createState() => _LaunchPageState();
  28. }
  29. class _LaunchPageState extends State<LaunchPage> with TickerProviderStateMixin {
  30. final GlobalKey navigatorKey = new GlobalKey();
  31. ///闪屏动画
  32. AnimationController animationController;
  33. int showTime=0;
  34. @override
  35. void initState() {
  36. animationController = AnimationController(vsync: this);
  37. validateInit();
  38. super.initState();
  39. }
  40. validateInit() async {
  41. // Connectivity().checkConnectivity().then((connectivityResult) async {
  42. // if (connectivityResult == ConnectivityResult.mobile || connectivityResult == ConnectivityResult.wifi) {
  43. // I am connected to a wifi network.
  44. Logger.debug('ConnectivityResult.wifi');
  45. print('ConnectivityResult.wifi');
  46. Application.init().then((_) async {
  47. NativeUtil.notifyInitSuccess();
  48. PackageInfo packageInfo = await PackageInfo.fromPlatform();
  49. String versionNumber = await SharedPreferencesUtil.getStringValue(Constants.versionNumber);
  50. String currentVersionCode = packageInfo.buildNumber?.toString() ?? '';
  51. if (versionNumber == null || versionNumber == '' || versionNumber != currentVersionCode) {
  52. await _showGuideImage();
  53. SharedPreferencesUtil.setStringValue(Constants.versionNumber, currentVersionCode);
  54. }
  55. if (widget.builder != null) {
  56. Navigator.of(context).pushReplacement(CupertinoPageRoute(builder: widget.builder));
  57. } else {
  58. // Navigator.of(context).pushReplacement(
  59. // CupertinoPageRoute(builder: (context) => HomePage()));
  60. Navigator.of(context).pushReplacementNamed('/homePage');
  61. }
  62. }).catchError((err) async {
  63. // if (err.toString().contains("BaseSettingModel")) {
  64. // await showDialog(
  65. // context: context,
  66. // child: TipDialog(
  67. // content: "基本配置加载失败!请检查网络是否可用后再启动应用!",
  68. // ));
  69. // SystemNavigator.pop();
  70. // }
  71. if(showTime<3){
  72. showTime++;
  73. Fluttertoast.showToast(msg: "配置基础数据失败!请检查网络是否可用");
  74. }
  75. Timer(Duration(seconds: 5), () {
  76. validateInit();
  77. });
  78. Logger.error(err);
  79. });
  80. // } else {
  81. // ///在无网络情况下提示用户打开网络
  82. // if(showTime<3){
  83. // showTime++;
  84. // Fluttertoast.showToast(msg: "无法连接网络!请打开移动网络/连接WIFI后再尝试");
  85. // }
  86. //
  87. // Timer(Duration(seconds: 5), () {
  88. // validateInit();
  89. // });
  90. // Logger.error('未知网络,APP初始化失败');
  91. // print('unknow');
  92. // }
  93. // });
  94. }
  95. Future _showGuideImage() async {
  96. try {
  97. // 引导页
  98. AppConfigGuideModel guide = AppConfigModel.getConfig()?.guideImage;
  99. if (guide != null && guide.images.length > 0) {
  100. Dio dio = Dio();
  101. print("加载图片");
  102. List<Uint8List> guideImages = List();
  103. for (int i = 0; i < guide.images.length; i++) {
  104. Response response = await dio.get(guide.images[i], options: Options(responseType: ResponseType.bytes));
  105. if (response.statusCode == 200) {
  106. Uint8List data = Uint8List.fromList(response.data);
  107. guideImages.add(data);
  108. }
  109. }
  110. await Navigator.of(context).push(CupertinoPageRoute(builder: (context) => GuidePage(guide, guideImages)));
  111. }
  112. } catch (e) {
  113. throw "引导图加载失败";
  114. }
  115. }
  116. @override
  117. Widget build(BuildContext context) {
  118. return Container(
  119. color: Colors.white,
  120. child: Image.asset(
  121. 'assets/images/launch_image/launch_image.png',
  122. package: 'zhiying_base_widget',
  123. fit: BoxFit.fill,
  124. ),
  125. );
  126. }
  127. }