import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'core/router/app_router.dart'; import 'theme/app_theme.dart'; void main() { runApp(const ProviderScope(child: AirhubApp())); } class AirhubApp extends ConsumerWidget { const AirhubApp({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final router = ref.watch(goRouterProvider); return MaterialApp.router( routerConfig: router, title: 'Airhub', debugShowCheckedModeBanner: false, theme: AppTheme.lightTheme, locale: const Locale('zh', 'CN'), supportedLocales: const [ Locale('zh', 'CN'), Locale('en', 'US'), ], localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], // Web 调试时模拟 iPhone 安全区域(刘海 + 底部 Home 条) // 真机上此代码不生效,kIsWeb 在真机编译时为 false builder: kIsWeb ? (context, child) { // 模拟 iPhone 12 Pro 安全区: top=47px, bottom=34px const simTop = 47.0; const simBottom = 34.0; final mq = MediaQuery.of(context); return MediaQuery( data: mq.copyWith( padding: mq.padding.copyWith( top: mq.padding.top < simTop ? simTop : mq.padding.top, bottom: mq.padding.bottom < simBottom ? simBottom : mq.padding.bottom, ), ), child: child ?? const SizedBox.shrink(), ); } : null, ); } }