import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:plugin_basic/service/config_services_injection.dart'; import 'package:plugin_platform/engine/directory/directory_util.dart'; import 'package:plugin_platform/engine/sp/sp_util.dart'; import 'package:shared/utils/log_utils.dart'; /** * Main函数入口的初始化 */ class AppInitializer { // 私有的构造函数,防止实例化 AppInitializer._(); /** * 1.入口初始化方法 - Platform 插件中的Engine其他功能初始化 * main.dart 中宿主的配置 */ static void initialize() async { //FT框架初始化 WidgetsFlutterBinding.ensureInitialized(); //初始化SP await SPUtil.getInstance(); //Log框架初始化 Log.init(isDebug: !kReleaseMode); //指定页面的展示方向为哪一种,常用的三种屏幕方向,支持横屏 SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, // DeviceOrientation.landscapeLeft, // DeviceOrientation.landscapeRight, ]); //处理显示区域 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]); } /** * 2.延迟初始化,一般是在用户同意隐私权限之后再调用 * 同意权限之后的其他插件初始化,用于宿主的配置 */ static Future delayInitialize({ List Function()>? futureTasks, List? normalTasks, }) async { // 路径管理工具类 (SD卡,沙盒等路径获取) setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false); // 收集所有需要等待的Future final List futures = [ Future.delayed(const Duration(milliseconds: 1000)), // 默认1秒延时 DirectoryUtil.getInstance(), // SD卡管控 ConfigServicesInjection.init(), // 假设这是一个 Future 方法 ]; // 如果提供了 futureTasks,调用并添加到 futures 列表 if (futureTasks != null) { for (var task in futureTasks) { futures.add(task()); } } // 如果提供了 normalTasks,将它们包装成 Future 并添加到 futures 列表 if (normalTasks != null) { for (var task in normalTasks) { futures.add(Future(() { task(); })); } } // 等待所有 Future 完成 await Future.wait(futures); } /** * 3.入口初始化方法 - Platform 插件中的Engine其他功能初始化 * 独立运行模块中的 main.dart 配置,用于测试 */ static Future initializeRunalone() async { //FT框架初始化 WidgetsFlutterBinding.ensureInitialized(); //初始化SP await SPUtil.getInstance(); //Log框架初始化 Log.init(isDebug: !kReleaseMode); //延迟初始化的插件在独立运行的时候一起初始化了 setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false); DirectoryUtil.getInstance(); //SD卡管控 //注入全局单例Service(内部包含 AppInfo,DeviceInfo 等初始化,并注入了 ConfigService 配置服务类) await ConfigServicesInjection.init(); //指定页面的展示方向为哪一种,常用的三种屏幕方向 SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, // DeviceOrientation.landscapeLeft, // DeviceOrientation.landscapeRight, ]); //处理显示区域 SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]); } }