app.dart 2.2 KB

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