// 暖记 App 根组件 — MaterialApp + BLoC Provider 注入 // // 依赖注入结构: // RepositoryProvider — 认证仓库(全局唯一) // └─ BlocProvider — 认证 BLoC(全局唯一) // └─ MaterialApp.router — 路由(使用 auth 状态守卫) import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'core/theme/app_theme.dart'; import 'core/routing/app_router.dart'; import 'data/remote/api_client.dart'; import 'data/repositories/auth_repository.dart'; import 'features/auth/bloc/auth_bloc.dart'; /// 暖记 App — 根组件 class NuanjiApp extends StatelessWidget { const NuanjiApp({super.key}); @override Widget build(BuildContext context) { // 创建全局依赖(App 生命周期内单例) final apiClient = ApiClient(); final authRepository = AuthRepository(apiClient: apiClient); final authBloc = AuthBloc(authRepository: authRepository); // 启动时检查认证状态 authBloc.add(const AppStarted()); return MultiRepositoryProvider( providers: [ RepositoryProvider.value(value: apiClient), RepositoryProvider.value(value: authRepository), ], child: BlocProvider.value( value: authBloc, child: _AppView(router: createAppRouter(authBloc)), ), ); } } /// App 视图 — MaterialApp.router 包装 class _AppView extends StatelessWidget { final GoRouter router; const _AppView({required this.router}); @override Widget build(BuildContext context) { return MaterialApp.router( title: '暖记', debugShowCheckedModeBanner: false, theme: AppTheme.light(), darkTheme: AppTheme.dark(), themeMode: ThemeMode.system, routerConfig: router, ); } }