main.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_localizations/flutter_localizations.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  6. import 'package:get/get.dart';
  7. import 'package:get/get_navigation/src/root/get_material_app.dart';
  8. import 'package:location/resource/colors.gen.dart';
  9. import 'package:location/resource/string.gen.dart';
  10. import 'package:location/resource/string_source.dart';
  11. import 'package:location/router/app_pages.dart';
  12. import 'package:location/sdk/gravity/gravity_helper.dart';
  13. import 'package:location/sdk/map/map_helper.dart';
  14. import 'package:location/sdk/qiyu/qi_yu_helper.dart';
  15. import 'package:location/sdk/umeng/umeng_helper.dart';
  16. import 'package:location/sdk/wechat/wechat_helper.dart';
  17. import 'package:location/utils/app_info_util.dart';
  18. import 'package:location/utils/mmkv_util.dart';
  19. import 'package:location/utils/privacy_compliance.dart';
  20. import 'package:location/utils/toast_util.dart';
  21. import 'package:pull_to_refresh/pull_to_refresh.dart';
  22. import 'data/consts/channel_util.dart';
  23. import 'di/get_it.dart';
  24. import 'data/consts/build_config.dart';
  25. import 'data/consts/constants.dart';
  26. import 'device/device_info_util.dart';
  27. void main() async {
  28. WidgetsFlutterBinding.ensureInitialized();
  29. //必要初始化
  30. await initRequired();
  31. //非隐私相关
  32. initCommon();
  33. runApp(const MyApp());
  34. //隐私相关:系统参数&第三方sdk初始化
  35. await PrivacyCompliance.ensurePolicyGranted(AppInitTask());
  36. //檢查地址
  37. checkEnv();
  38. }
  39. Future<void> initRequired() async {
  40. //存储
  41. await KVUtil.init();
  42. //getit
  43. configureDependencies();
  44. }
  45. void initCommon() {
  46. //全局配置smartDialog
  47. smartConfig();
  48. //渠道(仅Android)
  49. ChannelUtil.initChannel();
  50. //微信注册
  51. WechatHelper.registerApp();
  52. }
  53. /// 隐私相关初始化
  54. class AppInitTask implements EnsurePolicyGrant {
  55. @override
  56. Future<void> onPolicyGrant() async {
  57. //初始化基础信息
  58. await appInfoUtil.init();
  59. await deviceInfoUtil.init();
  60. //初始化其他sdk
  61. await MapHelper.init();
  62. //引力引擎
  63. GravityHelper.init();
  64. //七鱼客服
  65. QiYuHelper.init();
  66. //友盟
  67. UmengHelper.initCommon();
  68. }
  69. }
  70. void smartConfig() {
  71. SmartDialog.config.custom =
  72. SmartConfigCustom(animationType: SmartAnimationType.fade);
  73. }
  74. void checkEnv() {
  75. if (!Constants.isProdEnv() && !BuildConfig.isDebug) {
  76. ToastUtil.show('不是正式环境!!!', addPostFrame: true);
  77. }
  78. }
  79. class MyApp extends StatelessWidget {
  80. const MyApp({super.key});
  81. @override
  82. Widget build(BuildContext context) {
  83. return ScreenUtilInit(
  84. designSize: const Size(360, 640),
  85. builder: (_, child) {
  86. return buildApp();
  87. },
  88. );
  89. }
  90. Widget buildApp() {
  91. return RefreshConfiguration(
  92. headerBuilder: () => Platform.isAndroid
  93. ? const MaterialClassicHeader(color: ColorName.colorPrimary)
  94. : const ClassicHeader(),
  95. footerBuilder: () => ClassicFooter(
  96. canLoadingText: StringName.loadingMore,
  97. idleText: StringName.loadPullUp,
  98. loadingText: StringName.loadingTxt,
  99. noDataText: StringName.loadNoData,
  100. failedText: StringName.loadFailed,
  101. ),
  102. child: Platform.isAndroid ? buildMaterialApp() : buildIosApp(),
  103. );
  104. }
  105. Widget buildIosApp() {
  106. return GetCupertinoApp(
  107. onGenerateTitle: AppCommonConfig.appName,
  108. getPages: AppCommonConfig.getPages,
  109. initialRoute: AppCommonConfig.initialRoute,
  110. initialBinding: AppCommonConfig.initialBinding,
  111. navigatorObservers: AppCommonConfig.navigatorObservers,
  112. builder: AppCommonConfig.builder,
  113. translations: AppCommonConfig.translations,
  114. localizationsDelegates: AppCommonConfig.localizations.delegates,
  115. supportedLocales: AppCommonConfig.localizations.supportedLocales,
  116. locale: AppCommonConfig.localizations.locale,
  117. fallbackLocale: AppCommonConfig.localizations.fallbackLocale,
  118. );
  119. }
  120. Widget buildMaterialApp() {
  121. return GetMaterialApp(
  122. onGenerateTitle: AppCommonConfig.appName,
  123. getPages: AppCommonConfig.getPages,
  124. initialRoute: AppCommonConfig.initialRoute,
  125. initialBinding: AppCommonConfig.initialBinding,
  126. theme: ThemeData(
  127. useMaterial3: true,
  128. textSelectionTheme: const TextSelectionThemeData(
  129. cursorColor: ColorName.colorPrimary, // 设置默认光标颜色
  130. selectionHandleColor: ColorName.colorPrimary, // 设置光标下面水滴的颜色
  131. ),
  132. ),
  133. navigatorObservers: AppCommonConfig.navigatorObservers,
  134. builder: AppCommonConfig.builder,
  135. translations: AppCommonConfig.translations,
  136. localizationsDelegates: AppCommonConfig.localizations.delegates,
  137. supportedLocales: AppCommonConfig.localizations.supportedLocales,
  138. locale: AppCommonConfig.localizations.locale,
  139. fallbackLocale: AppCommonConfig.localizations.fallbackLocale,
  140. );
  141. }
  142. }
  143. class AppCommonConfig {
  144. static GenerateAppTitle? appName = (_) => StringName.appName;
  145. // 路由配置
  146. static List<GetPage>? getPages = AppPage.pages;
  147. static const initialRoute = RoutePath.splash;
  148. // 初始化绑定
  149. static Bindings initialBinding = AppBinding();
  150. // 导航观察者
  151. static List<NavigatorObserver> navigatorObservers = [
  152. FlutterSmartDialog.observer
  153. ];
  154. // 弹窗初始化
  155. static final builder = FlutterSmartDialog.init();
  156. // 本地化配置
  157. static const localizations = (
  158. delegates: [
  159. GlobalMaterialLocalizations.delegate,
  160. GlobalWidgetsLocalizations.delegate,
  161. GlobalCupertinoLocalizations.delegate,
  162. ],
  163. supportedLocales: [Locale('zh', 'CN')],
  164. locale: Locale('zh', 'CN'),
  165. fallbackLocale: Locale('zh', 'CN'),
  166. );
  167. // 多语言配置
  168. static Translations translations = StringResource();
  169. }