app_initializer.dart 3.6 KB

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