import 'dart:async'; import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:flutter_subscreen_plugin/flutter_subscreen_plugin.dart'; import 'package:get/get.dart'; import 'package:pj_supermarket_cloud/app.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; import 'package:pj_supermarket_cloud/sub_screen/page/index.dart'; /// 启动 Flutter 主屏或双屏插件创建的独立副屏入口。 void main() { checkSubScreen(); } /// 根据 Engine 默认路由初始化对应屏幕,避免副屏持有主屏的 GetX 与硬件状态。 Future checkSubScreen() async { final defaultRouteName = PlatformDispatcher.instance.defaultRouteName; logger.d("当前的屏幕$defaultRouteName"); switch (defaultRouteName) { case "/": WidgetsFlutterBinding.ensureInitialized(); DartPluginRegistrant.ensureInitialized(); await AppRuntimeTool.initializePlatform(); final appTheme = Get.put(AppThemeControl()); final productHourType = Get.put( ProductHourTypeControl(), permanent: true, ); Get.put(TerminalAdminSessionControl(), permanent: true); // 睡眠状态需要跨终端工作区路由常驻,但不会进入副屏 Engine。 Get.put(TerminalSleepControl(), permanent: true); final terminalDeviceStatus = Get.put( TerminalDeviceStatusControl(), permanent: true, ); final terminalMenu = Get.put(TerminalMenuControl()); final app = Get.put(AppControl()); Get.put(FaceRecognitionSessionService(), permanent: true); runApp(MainApp()); await Future.microtask(() => app.initAsync()); if (app.startupFinished.value) { await appTheme.initAsync(); await productHourType.initAsync(); await terminalDeviceStatus.initAsync(); await terminalMenu.initAsync(); } break; case "subMain": WidgetsFlutterBinding.ensureInitialized(); DartPluginRegistrant.ensureInitialized(); bool isMultipleScreen = await SubScreenPlugin.isMultipleScreen; bool isOverlay = await SubScreenPlugin.checkOverlayPermission; if (isMultipleScreen && isOverlay) { runApp(SubAppPage()); } break; } }