基础组件库
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

launch_page.dart 5.5 KiB

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