import 'dart:developer'; import 'dart:io'; import 'package:cheminova/constants/constant.dart'; import 'package:cheminova/provider/add_sales_product_provider.dart'; import 'package:cheminova/provider/home_provider.dart'; import 'package:cheminova/provider/products_provider.dart'; import 'package:cheminova/screens/splash_screen.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:provider/provider.dart'; import 'firebase_options.dart'; @pragma('vm:entry-point') Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); log("Handling a background message: ${message.data["data"]}"); } AndroidNotificationChannel channel = const AndroidNotificationChannel( 'High Importance Channel', 'High Importance Notifications', importance: Importance.high); late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); FlutterError.onError = (errorDetails) { FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails); }; PlatformDispatcher.instance.onError = (error, stack) { FirebaseCrashlytics.instance.recordError(error, stack, fatal: true); return true; }; if (!kIsWeb) { flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); await FirebaseMessaging.instance.getInitialMessage().then((message) {}); FirebaseMessaging.onMessage.listen((RemoteMessage message) { RemoteNotification? notification = message.notification; AndroidNotification? android = message.notification?.android; if (notification != null && android != null) { flutterLocalNotificationsPlugin.show( notification.hashCode, notification.title, notification.body, NotificationDetails( android: AndroidNotificationDetails(channel.id, channel.name, icon: '@mipmap/ic_launcher', importance: Importance.max), iOS: const DarwinNotificationDetails())); const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher'); const DarwinInitializationSettings darwinInitializationSettings = DarwinInitializationSettings(); var initSettings = const InitializationSettings( android: initializationSettingsAndroid, iOS: darwinInitializationSettings); flutterLocalNotificationsPlugin.initialize(initSettings); } }); if (Platform.isAndroid) { await flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() ?.requestNotificationsPermission(); await flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); } if (Platform.isIOS) { await flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< IOSFlutterLocalNotificationsPlugin>() ?.requestPermissions(alert: true, badge: true, sound: true); } await FirebaseMessaging.instance .setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true); } runApp(MultiProvider(providers: [ ChangeNotifierProvider(create: (context) => HomeProvider()), ChangeNotifierProvider(create: (context) => ProductProvider()), ChangeNotifierProvider(create: (context) => AddSalesProvider()), ], child: const MyApp())); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); } class _MyAppState extends State { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, navigatorKey: navigatorKey, title: 'Cheminova', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true), home: const SplashScreen()); } }