app_initializer.dart 3.5 KB

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