app.dart
1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import 'dart:io';
import 'package:appframe/l10n/gen/app_localizations.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'config/routes.dart';
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
final Widget app = Platform.isIOS
? CupertinoApp.router(
routerConfig: router,
title: '班小二',
theme: const CupertinoThemeData(primaryColor: CupertinoColors.systemBlue),
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
)
: MaterialApp.router(
routerConfig: router,
title: '班小二',
theme: ThemeData(primarySwatch: Colors.blue),
supportedLocales: AppLocalizations.supportedLocales,
localizationsDelegates: AppLocalizations.localizationsDelegates,
// Android edge-to-edge 模式下虚拟导航键叠在内容上方,
// 通过 builder 统一包裹 SafeArea,所有路由页面自动适配底部安全区域。
builder: (context, child) => ColoredBox(
color: Colors.white,
child: SafeArea(top: false, child: child!),
),
);
// 不再使用全局 AnnotatedRegion 包裹应用。
// 原因:全局 AnnotatedRegion 会在每帧 drawFrame 时检查并应用其样式,
// 导致各页面通过 SystemChrome.setSystemUIOverlayStyle 手动设置的值被覆盖。
// 默认状态栏样式改在 main.dart 中通过 SystemChrome 一次性设置,
// 各页面通过 AppBar.systemOverlayStyle 或手动 SystemChrome 调用管理状态栏。
return app;
}
}