main.dart 3.0 KB

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