main.dart 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import 'package:e2ee_chat/objectbox.g.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:provider/provider.dart';
  4. import 'package:provider/single_child_widget.dart';
  5. import 'package:flutter_localizations/flutter_localizations.dart';
  6. import 'common/global.dart';
  7. import 'l10n/localization_intl.dart';
  8. import 'presenter/locale.dart';
  9. import 'presenter/theme_model.dart';
  10. import 'presenter/login.dart';
  11. import 'view/language.dart';
  12. import 'view/login.dart';
  13. import 'view/theme.dart';
  14. import 'view/home.dart';
  15. void main() {
  16. WidgetsFlutterBinding.ensureInitialized();
  17. Global.init().then((e) => runApp(MyApp()));
  18. }
  19. class MyApp extends StatelessWidget {
  20. // This widget is the root of your application.
  21. @override
  22. Widget build(BuildContext context) {
  23. return MultiProvider(
  24. providers: <SingleChildWidget>[
  25. ChangeNotifierProvider.value(value: ThemeModel()),
  26. ChangeNotifierProvider.value(value: LocaleModel()),
  27. ChangeNotifierProvider.value(value: LoginModel()),
  28. ],
  29. child: Consumer2<ThemeModel, LocaleModel>(
  30. builder: (BuildContext context, themeModel, localeModel, Widget? child) {
  31. return MaterialApp(
  32. navigatorKey: Global.navigatorKey,
  33. theme: ThemeData(
  34. primarySwatch: themeModel.theme,
  35. ),
  36. home: HomeRoute(), //应用主页
  37. locale: localeModel.locale,
  38. //我们只支持美国英语和中文简体
  39. supportedLocales: Global.locales,
  40. localizationsDelegates: [
  41. // 本地化的代理类
  42. GlobalMaterialLocalizations.delegate,
  43. GlobalWidgetsLocalizations.delegate,
  44. GmLocalizationsDelegate()
  45. ],
  46. localeResolutionCallback:
  47. (Locale? _locale, Iterable<Locale> supportedLocales) {
  48. if (localeModel.locale != null) {
  49. //如果已经选定语言,则不跟随系统
  50. return localeModel.locale;
  51. } else {
  52. Locale? locale;
  53. //APP语言跟随系统语言,如果系统语言不是中文简体或美国英语,
  54. //则默认使用美国英语
  55. if (supportedLocales.contains(_locale)) {
  56. locale = _locale;
  57. } else {
  58. locale = Locale('en');
  59. }
  60. return locale;
  61. }
  62. },
  63. // 注册命名路由表
  64. routes: <String, WidgetBuilder>{
  65. "login": (context) => LoginRoute(),
  66. "themes": (context) => ThemeRoute(),
  67. "language": (context) => LanguageRoute(),
  68. },
  69. );
  70. },
  71. ),
  72. );
  73. }
  74. }