app_initializer.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. import 'package:plugin_platform/engine/directory/directory_util.dart';
  5. import 'package:plugin_platform/engine/sp/sp_util.dart';
  6. import 'package:plugin_platform/engine/cache/local_cache_manager.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. localCache.init(), //Hive本地缓存初始化
  50. //AppConfig服务
  51. AppConfigService.getInstance().initAsync(),
  52. ];
  53. // 如果提供了 futureTasks,调用并添加到 futures 列表
  54. if (futureTasks != null) {
  55. for (var task in futureTasks) {
  56. futures.add(task());
  57. }
  58. }
  59. // 如果提供了 normalTasks,将它们包装成 Future 并添加到 futures 列表
  60. if (normalTasks != null) {
  61. for (var task in normalTasks) {
  62. futures.add(Future(() {
  63. task();
  64. }));
  65. }
  66. }
  67. // 等待所有 Future 完成
  68. await Future.wait(futures);
  69. }
  70. /*
  71. * 3.入口初始化方法 - Platform 插件中的Engine其他功能初始化
  72. * 独立运行模块中的 main.dart 配置,用于测试
  73. */
  74. static Future initializeRunalone() async {
  75. //FT框架初始化
  76. WidgetsFlutterBinding.ensureInitialized();
  77. //初始化SP
  78. await SPUtil.getInstance();
  79. //Log框架初始化
  80. Log.init(isDebug: !kReleaseMode);
  81. //延迟初始化的插件在独立运行的时候一起初始化了
  82. setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false);
  83. DirectoryUtil.getInstance(); //SD卡管控
  84. localCache.init(); //Hive本地缓存初始化
  85. //AppConfig服务
  86. await AppConfigService.getInstance().initAsync();
  87. //指定页面的展示方向为哪一种,常用的三种屏幕方向
  88. SystemChrome.setPreferredOrientations([
  89. DeviceOrientation.portraitUp,
  90. // DeviceOrientation.landscapeLeft,
  91. // DeviceOrientation.landscapeRight,
  92. ]);
  93. //处理显示区域
  94. SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
  95. }
  96. }