app.dart 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:flutter_localizations/flutter_localizations.dart';
  4. import 'package:go_router/go_router.dart';
  5. import 'package:tdesign_flutter/tdesign_flutter.dart';
  6. import 'package:flutter_riverpod/flutter_riverpod.dart';
  7. import 'core/theme/app_colors.dart';
  8. import 'core/theme/app_theme.dart';
  9. import 'core/theme/theme_mode_provider.dart';
  10. import 'core/theme/tdesign_resource_delegate.dart';
  11. import 'core/router/app_router.dart';
  12. import 'core/network/api_client.dart';
  13. import 'core/auth/auth_service.dart';
  14. import 'core/i18n/app_localizations.dart';
  15. import 'core/i18n/locale_provider.dart';
  16. import 'core/navigation/navigation_channel.dart';
  17. import 'core/navigation/host_app_channel.dart';
  18. final apiClientProvider = Provider<ApiClient>((ref) {
  19. const useMock = false;
  20. final client = ApiClient(
  21. baseUrl: HostAppChannel.baseUrl,
  22. useMock: useMock,
  23. navigatorKey: rootNavigatorKey,
  24. );
  25. final authService = ref.read(authServiceProvider);
  26. client.setToken(authService.token);
  27. return client;
  28. });
  29. final authServiceProvider = Provider<AuthService>((ref) => AuthService());
  30. final _routerProvider = Provider<GoRouter>((ref) => createAppRouter());
  31. class App extends ConsumerWidget {
  32. const App({super.key});
  33. @override
  34. Widget build(BuildContext context, WidgetRef ref) {
  35. final router = ref.watch(_routerProvider);
  36. final locale = ref.watch(localeProvider);
  37. final themeMode = ref.watch(themeModeProvider);
  38. // 监听平台(iOS)下发的导航指令
  39. NavigationChannel.startListening(router);
  40. TDTheme.needMultiTheme();
  41. TDTheme.setResourceBuilder(
  42. (context) => TDResourceI18nDelegate(context),
  43. needAlwaysBuild: true,
  44. );
  45. return AnnotatedRegion<SystemUiOverlayStyle>(
  46. value: const SystemUiOverlayStyle(
  47. statusBarColor: AppColors.bgCard,
  48. statusBarIconBrightness: Brightness.dark,
  49. ),
  50. child: MaterialApp.router(
  51. key: ValueKey(locale),
  52. title: 'TBOSS OA',
  53. theme: AppTheme.light,
  54. darkTheme: AppTheme.dark,
  55. themeMode: themeMode,
  56. routerConfig: router,
  57. locale: locale,
  58. supportedLocales: const [
  59. Locale('zh', 'CN'),
  60. Locale('en'),
  61. Locale('zh', 'TW'),
  62. ],
  63. localizationsDelegates: const [
  64. AppLocalizations.delegate,
  65. GlobalMaterialLocalizations.delegate,
  66. GlobalWidgetsLocalizations.delegate,
  67. GlobalCupertinoLocalizations.delegate,
  68. ],
  69. debugShowCheckedModeBanner: false,
  70. ),
  71. );
  72. }
  73. }