Commit 8ef84934 by tanghuan

解决因为使用AnnotatedRegion实现AppBar透明背景效果时,操作H5 video全屏播放会卡住的问题。

1 parent 9a1a3a9b
...@@ -3,6 +3,7 @@ import 'dart:io'; ...@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:appframe/l10n/gen/app_localizations.dart'; import 'package:appframe/l10n/gen/app_localizations.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'config/routes.dart'; import 'config/routes.dart';
...@@ -10,23 +11,14 @@ class App extends StatelessWidget { ...@@ -10,23 +11,14 @@ class App extends StatelessWidget {
const App({super.key}); const App({super.key});
@override @override
Widget build(BuildContext context) => Platform.isIOS Widget build(BuildContext context) {
final Widget app = Platform.isIOS
? CupertinoApp.router( ? CupertinoApp.router(
routerConfig: router, routerConfig: router,
title: '班小二', title: '班小二',
theme: const CupertinoThemeData(primaryColor: CupertinoColors.systemBlue), theme: const CupertinoThemeData(primaryColor: CupertinoColors.systemBlue),
localizationsDelegates: AppLocalizations.localizationsDelegates, localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales, supportedLocales: AppLocalizations.supportedLocales,
// // === 为 iOS 添加本地化配置 ===
// localizationsDelegates: const [
// GlobalMaterialLocalizations.delegate, // 为Material组件提供本地化
// GlobalCupertinoLocalizations.delegate, // 为Cupertino组件提供本地化
// GlobalWidgetsLocalizations.delegate, // 定义文本方向等
// ],
// supportedLocales: const [
// Locale('zh', 'CN'), // 中文(中国)
// Locale('en', 'US'), // 英语(美国)
// ],
) )
: MaterialApp.router( : MaterialApp.router(
routerConfig: router, routerConfig: router,
...@@ -35,4 +27,19 @@ class App extends StatelessWidget { ...@@ -35,4 +27,19 @@ class App extends StatelessWidget {
supportedLocales: AppLocalizations.supportedLocales, supportedLocales: AppLocalizations.supportedLocales,
localizationsDelegates: AppLocalizations.localizationsDelegates, localizationsDelegates: AppLocalizations.localizationsDelegates,
); );
// 全局默认状态栏样式兑底:透明背景 + 深色图标。
// 作为最外层 AnnotatedRegion 只挂载一次,不会随页面状态变化反复
// 下发命令,避免污染 Android decorView 上 H5 <video> 全屏依赖的
// systemUiVisibility flag。带 AppBar 的页面由 AppBar.systemOverlayStyle
// 在其 region 区域局部覆盖,隐藏 AppBar 后自动回到本全局值。
return AnnotatedRegion<SystemUiOverlayStyle>(
value: const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
statusBarBrightness: Brightness.light,
),
child: app,
);
}
} }
...@@ -5,7 +5,6 @@ import 'package:appframe/config/env_config.dart'; ...@@ -5,7 +5,6 @@ import 'package:appframe/config/env_config.dart';
import 'package:appframe/config/locator.dart'; import 'package:appframe/config/locator.dart';
import 'package:appframe/config/routes.dart'; import 'package:appframe/config/routes.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
...@@ -119,16 +118,11 @@ class WebPage extends StatelessWidget { ...@@ -119,16 +118,11 @@ class WebPage extends StatelessWidget {
: null, : null,
); );
final child = state.showAppBar // 不论 showAppBar 是否为 true,都直接使用 scaffold。
? scaffold // 原因:Android 平台上 setSystemUIOverlayStyle 会修改 decorView 的
: AnnotatedRegion<SystemUiOverlayStyle>( // systemUiVisibility flag,污染 H5 <video> 全屏插件赖赖的 flag,
value: const SystemUiOverlayStyle( // 导致全屏画面卡死。状态栏样式应在 main.dart 启动时一次性设置。
statusBarColor: Colors.transparent, // 设置状态栏背景透明 final child = scaffold;
statusBarIconBrightness: Brightness.dark,
statusBarBrightness: Brightness.light,
),
child: scaffold,
);
// ios 不使用 PopScope // ios 不使用 PopScope
if (Platform.isIOS) { if (Platform.isIOS) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!