Files
ttstd_family_care/lib/main.dart
TongTongStudio bfb106f1fb feat(connection): 增加远程视频录制、分辨率/帧率切换及高刷适配
- 新增 VideoRecorder 基于 flutter_webrtc MediaRecorder 录制远程视频为 MP4
- 新增 ControlMessageDecoder 解析被控端上报的 REPORT_* protobuf 消息
- 连接控制器支持分辨率/帧率切换、录制状态管理与远程上报处理
- 远程控制页新增更多菜单(静音/分辨率/帧率/录制),并统一退出时断开连接
- WebRTC 编排器在 DataChannel 打开及媒体就绪后主动请求默认分辨率,解决黑屏问题
- 新增 DisplayModeUtil 在 Android 上启用最高刷新率
- 登出时失效设备相关 Provider,避免切换账号后读到旧缓存
2026-08-27 11:39:42 +08:00

47 lines
2.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:material_ui/material_ui.dart' show WidgetsFlutterBinding;
import 'package:flutter/widgets.dart' show runApp;
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'
show BMFMapSDK, BMF_COORD_TYPE;
import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart'
show BMFAndroidVersion;
import 'app/app.dart';
import 'app/constants/app_constants.dart';
import 'app/router/app_router.dart';
import 'core/storage/token_storage.dart';
import 'core/utils/device_info_util.dart';
import 'core/utils/display_mode_util.dart';
import 'core/utils/system_ui_util.dart';
/// 应用入口。
///
/// 职责:初始化存储、配置系统 UI、打印设备信息、构建路由与根组件。不包含任何业务或 UI 逻辑。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Android 高刷适配将屏幕切换到设备支持的最高刷新率120Hz / 144Hz
// 提升动画与滚动流畅度。iOS ProMotion 由系统自动匹配,无需处理。
await DisplayModeUtil.enableBestDisplayMode();
// 初始化百度地图 SDK需申请 AK坐标类型使用 BD09LL设备 GPS 坐标在展示前转换)。
BMFMapSDK.setAgreePrivacy(true);
BMFMapSDK.setApiKeyAndCoordType(
AppConstants.kBaiduMapAk, BMF_COORD_TYPE.BD09LL);
// 初始化 Android 版本适配Android 10+ 使用 surfaceMapView比默认 textureMapView 更稳定),
// 避免百度 SDK 在模拟器 / 部分机型上因 textureView + EGL 渲染冲突触发原生崩溃SIGSEGV / EGL_BAD_MATCH
await BMFAndroidVersion.initAndroidVersion();
// 沉浸式状态栏 / edge-to-edge / 刘海屏适配(不影响启动主流程)。
await SystemUiUtil.configure();
// 初始化本地存储(含超时保护,避免阻塞启动导致卡在首屏)。
await TokenStorage.initialize()
.timeout(const Duration(seconds: 5), onTimeout: () {});
// 设备信息打印不阻塞启动主流程。
DeviceInfoUtil.printDeviceInfo();
final router = buildAppRouter();
runApp(buildApp(router));
}