main.dart 2.8 KB

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