app.dart 1.79 KB
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;
  }
}