基础组件库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

178 lines
6.5 KiB

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