Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

135 строки
4.3 KiB

  1. import 'package:firebase_core/firebase_core.dart';
  2. import 'package:firebase_messaging/firebase_messaging.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_localizations/flutter_localizations.dart';
  5. import 'package:hive_flutter/hive_flutter.dart';
  6. import 'package:provider/provider.dart';
  7. import 'package:qadirneyriz/config/config.dart';
  8. import 'package:qadirneyriz/global/global_state/global_state.dart';
  9. import 'package:qadirneyriz/router/router.dart';
  10. import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  11. import 'package:qadirneyriz/screens/auth/state/state.dart';
  12. import 'package:qadirneyriz/screens/home/state.dart';
  13. import 'package:qadirneyriz/screens/meeting/state.dart';
  14. import 'package:qadirneyriz/screens/private_meeting/state.dart';
  15. import 'package:qadirneyriz/screens/report/state.dart';
  16. import 'package:qadirneyriz/setting/setting.dart';
  17. final FirebaseMessaging messaging = FirebaseMessaging.instance;
  18. Future<void> initializeApp() async {
  19. await Firebase.initializeApp();
  20. await Hive.initFlutter();
  21. await setting.userLocalDb.openBox();
  22. await requestNotificationPermission();
  23. await getToken();
  24. setupMessageListener();
  25. }
  26. Future<void> requestNotificationPermission() async {
  27. NotificationSettings settings = await messaging.requestPermission(
  28. alert: true,
  29. announcement: false,
  30. badge: true,
  31. carPlay: false,
  32. criticalAlert: false,
  33. provisional: false,
  34. sound: true,
  35. );
  36. if (settings.authorizationStatus == AuthorizationStatus.authorized) {
  37. print('User granted permission');
  38. } else {
  39. print('User declined or has not granted permission');
  40. }
  41. }
  42. Future<void> getToken() async {
  43. String? token = await messaging.getToken();
  44. print("Device Token: $token");
  45. // You can send the token to your server here if needed
  46. }
  47. void setupMessageListener() {
  48. FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  49. print('Message received: ${message.notification?.title}');
  50. print('Message body: ${message.notification?.body}');
  51. // You can use a Dialog or Toast to display the message here
  52. });
  53. }
  54. void main() async {
  55. WidgetsFlutterBinding.ensureInitialized();
  56. await initializeApp(); // Initialize Firebase and other services
  57. runApp(
  58. MultiProvider(
  59. providers: [
  60. ChangeNotifierProvider(create: (_) => GlobalState()),
  61. ChangeNotifierProvider(create: (_) => AuthState()),
  62. ChangeNotifierProvider(create: (_) => HomeState()),
  63. ChangeNotifierProvider(create: (_) => MeetingsState()),
  64. ChangeNotifierProvider(create: (_) => PrivateMeetingsState()),
  65. ChangeNotifierProvider(create: (_) => ReportState()),
  66. ],
  67. child: const MyApp(),
  68. ),
  69. );
  70. }
  71. class MyApp extends StatefulWidget {
  72. const MyApp({super.key});
  73. @override
  74. State<MyApp> createState() => _MyAppState();
  75. }
  76. class _MyAppState extends State<MyApp> {
  77. late AuthState state;
  78. String language = setting.userLocalDb.getUser().language;
  79. @override
  80. void initState() {
  81. super.initState();
  82. Future.delayed(Duration.zero, () async {
  83. state = Provider.of<AuthState>(context, listen: false);
  84. setState(() {
  85. language = state.language;
  86. });
  87. });
  88. }
  89. @override
  90. Widget build(BuildContext context) {
  91. return Consumer<AuthState>(
  92. builder: (context, value, child) {
  93. return MaterialApp.router(
  94. theme: ThemeData(
  95. colorScheme: ColorScheme.light(primary: config.ui.mainGreen),
  96. buttonTheme: ButtonThemeData(
  97. colorScheme: ColorScheme.light(primary: Colors.green),
  98. ),
  99. useMaterial3: true,
  100. fontFamily: 'Font',
  101. scaffoldBackgroundColor: Colors.white,
  102. ),
  103. debugShowCheckedModeBanner: false,
  104. routerDelegate: router.routerDelegate,
  105. routeInformationParser: router.routeInformationParser,
  106. routeInformationProvider: router.routeInformationProvider,
  107. localizationsDelegates: const [
  108. AppLocalizations.delegate,
  109. GlobalMaterialLocalizations.delegate,
  110. GlobalWidgetsLocalizations.delegate,
  111. GlobalCupertinoLocalizations.delegate,
  112. ],
  113. locale: Locale(value.language),
  114. supportedLocales: const [
  115. Locale('en'),
  116. Locale('fa'),
  117. ],
  118. );
  119. },
  120. );
  121. }
  122. }