Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

150 righe
4.8 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/firebase_options.dart';
  9. import 'package:qadirneyriz/global/global_state/global_state.dart';
  10. import 'package:qadirneyriz/router/router.dart';
  11. import 'package:flutter_gen/gen_l10n/app_localizations.dart';
  12. import 'package:qadirneyriz/screens/auth/state/state.dart';
  13. import 'package:qadirneyriz/screens/home/state.dart';
  14. import 'package:qadirneyriz/screens/meeting/state.dart';
  15. import 'package:qadirneyriz/screens/private_meeting/state.dart';
  16. import 'package:qadirneyriz/screens/report/state.dart';
  17. import 'package:qadirneyriz/setting/setting.dart';
  18. final FirebaseMessaging messaging = FirebaseMessaging.instance;
  19. Future<void> initializeApp() async {
  20. await Hive.initFlutter();
  21. await Firebase.initializeApp(
  22. options: DefaultFirebaseOptions.currentPlatform,
  23. );
  24. await setting.userLocalDb.openBox();
  25. // اجرای Firebase و تنظیمات نوتیفیکیشن فقط در اندروید
  26. await requestNotificationPermission();
  27. await getToken();
  28. setupMessageListener();
  29. }
  30. Future<void> requestNotificationPermission() async {
  31. NotificationSettings settings = await messaging.requestPermission(
  32. alert: true,
  33. announcement: false,
  34. badge: true,
  35. carPlay: false,
  36. criticalAlert: false,
  37. provisional: false,
  38. sound: true,
  39. );
  40. if (settings.authorizationStatus == AuthorizationStatus.authorized) {
  41. print('User granted permission');
  42. } else {
  43. print('User declined or has not granted permission');
  44. }
  45. }
  46. Future<void> getToken() async {
  47. await messaging.getToken();
  48. }
  49. void setupMessageListener() {
  50. FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  51. // print('Message received: ${message.notification?.title}');
  52. // print('Message body: ${message.notification?.body}');
  53. // You can use a Dialog or Toast to display the message here
  54. });
  55. }
  56. void main() async {
  57. WidgetsFlutterBinding.ensureInitialized();
  58. await initializeApp(); // Initialize Firebase and other services
  59. runApp(
  60. MultiProvider(
  61. providers: [
  62. ChangeNotifierProvider(create: (_) => GlobalState()),
  63. ChangeNotifierProvider(create: (_) => AuthState()),
  64. ChangeNotifierProvider(create: (_) => HomeState()),
  65. ChangeNotifierProvider(create: (_) => MeetingsState()),
  66. ChangeNotifierProvider(create: (_) => PrivateMeetingsState()),
  67. ChangeNotifierProvider(create: (_) => ReportState()),
  68. ],
  69. child: const MyApp(),
  70. ),
  71. );
  72. }
  73. class MyApp extends StatefulWidget {
  74. const MyApp({super.key});
  75. @override
  76. State<MyApp> createState() => _MyAppState();
  77. }
  78. class _MyAppState extends State<MyApp> {
  79. late AuthState state;
  80. String language = setting.userLocalDb.getUser().language;
  81. @override
  82. void initState() {
  83. super.initState();
  84. Future.delayed(Duration.zero, () async {
  85. state = Provider.of<AuthState>(context, listen: false);
  86. setState(() {
  87. language = state.language;
  88. });
  89. });
  90. }
  91. @override
  92. Widget build(BuildContext context) {
  93. return Consumer<AuthState>(
  94. builder: (context, value, child) {
  95. return GestureDetector(
  96. behavior: HitTestBehavior.opaque,
  97. onTap: () {
  98. FocusScopeNode currentFocus = FocusScope.of(context);
  99. if (!currentFocus.hasPrimaryFocus &&
  100. currentFocus.focusedChild != null) {
  101. FocusManager.instance.primaryFocus?.unfocus();
  102. }
  103. },
  104. child: MaterialApp.router(
  105. theme: ThemeData(
  106. colorScheme: ColorScheme.light(primary: config.ui.mainGreen),
  107. buttonTheme: ButtonThemeData(
  108. colorScheme: ColorScheme.light(primary: Colors.green),
  109. ),
  110. useMaterial3: true,
  111. fontFamily: 'Font',
  112. scaffoldBackgroundColor: Colors.white,
  113. ),
  114. debugShowCheckedModeBanner: false,
  115. routerDelegate: router.routerDelegate,
  116. routeInformationParser: router.routeInformationParser,
  117. routeInformationProvider: router.routeInformationProvider,
  118. localizationsDelegates: const [
  119. AppLocalizations.delegate,
  120. GlobalMaterialLocalizations.delegate,
  121. GlobalWidgetsLocalizations.delegate,
  122. GlobalCupertinoLocalizations.delegate,
  123. ],
  124. locale: Locale(value.language),
  125. supportedLocales: const [
  126. Locale('en'),
  127. Locale('fa'),
  128. ],
  129. ),
  130. );
  131. },
  132. );
  133. }
  134. }