app_initializer.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. import 'package:plugin_basic/provider/global_provider_container.dart';
  5. import 'package:plugin_platform/engine/directory/directory_util.dart';
  6. import 'package:plugin_platform/engine/sp/sp_util.dart';
  7. import 'package:shared/utils/log_utils.dart';
  8. import 'package:plugin_basic/provider/app_config/app_config_service.dart';
  9. /*
  10. * Main函数入口的初始化
  11. */
  12. class AppInitializer {
  13. // 私有的构造函数,防止实例化
  14. AppInitializer._();
  15. /*
  16. * 1.入口初始化方法 - Platform 插件中的Engine其他功能初始化
  17. * main.dart 中宿主的配置
  18. */
  19. static void initialize() async {
  20. //FT框架初始化
  21. WidgetsFlutterBinding.ensureInitialized();
  22. //初始化SP
  23. await SPUtil.getInstance();
  24. //Log框架初始化
  25. Log.init(isDebug: !kReleaseMode);
  26. //指定页面的展示方向为哪一种,常用的三种屏幕方向,支持横屏
  27. SystemChrome.setPreferredOrientations([
  28. DeviceOrientation.portraitUp,
  29. // DeviceOrientation.landscapeLeft,
  30. // DeviceOrientation.landscapeRight,
  31. ]);
  32. //处理显示区域
  33. SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
  34. }
  35. /*
  36. * 2.延迟初始化,一般是在用户同意隐私权限之后再调用
  37. * 同意权限之后的其他插件初始化,用于宿主的配置
  38. */
  39. static Future<void> delayInitialize({
  40. List<Future<void> Function()>? futureTasks,
  41. List<void Function()>? normalTasks,
  42. }) async {
  43. // 路径管理工具类 (SD卡,沙盒等路径获取)
  44. setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false);
  45. // 收集所有需要等待的Future
  46. final List<Future> futures = [
  47. Future.delayed(const Duration(milliseconds: 1000)), // 默认1秒延时
  48. DirectoryUtil.getInstance(), // SD卡管控
  49. //AppConfig服务
  50. globalContainer.read(appConfigServiceProvider.notifier).initAsync(),
  51. ];
  52. // 如果提供了 futureTasks,调用并添加到 futures 列表
  53. if (futureTasks != null) {
  54. for (var task in futureTasks) {
  55. futures.add(task());
  56. }
  57. }
  58. // 如果提供了 normalTasks,将它们包装成 Future 并添加到 futures 列表
  59. if (normalTasks != null) {
  60. for (var task in normalTasks) {
  61. futures.add(Future(() {
  62. task();
  63. }));
  64. }
  65. }
  66. // 等待所有 Future 完成
  67. await Future.wait(futures);
  68. }
  69. /*
  70. * 3.入口初始化方法 - Platform 插件中的Engine其他功能初始化
  71. * 独立运行模块中的 main.dart 配置,用于测试
  72. */
  73. static Future initializeRunalone() async {
  74. //FT框架初始化
  75. WidgetsFlutterBinding.ensureInitialized();
  76. //初始化SP
  77. await SPUtil.getInstance();
  78. //Log框架初始化
  79. Log.init(isDebug: !kReleaseMode);
  80. //延迟初始化的插件在独立运行的时候一起初始化了
  81. setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false);
  82. DirectoryUtil.getInstance(); //SD卡管控
  83. //AppConfig服务
  84. await globalContainer.read(appConfigServiceProvider.notifier).initAsync();
  85. //指定页面的展示方向为哪一种,常用的三种屏幕方向
  86. SystemChrome.setPreferredOrientations([
  87. DeviceOrientation.portraitUp,
  88. // DeviceOrientation.landscapeLeft,
  89. // DeviceOrientation.landscapeRight,
  90. ]);
  91. //处理显示区域
  92. SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
  93. }
  94. }