114 lines
4.1 KiB
Dart
114 lines
4.1 KiB
Dart
import 'dart:developer';
|
|
import 'dart:io';
|
|
import 'package:cheminova/provider/collect_kyc_provider.dart';
|
|
import 'package:cheminova/provider/user_provider.dart';
|
|
import 'package:cheminova/screens/splash_screen.dart';
|
|
import 'package:firebase_core/firebase_core.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<void> _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<void> main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
|
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
|
|
|
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) => CollectKycProvider()),
|
|
ChangeNotifierProvider(create: (_) => UserProvider()),
|
|
],
|
|
child: const MyApp(),
|
|
),
|
|
);
|
|
}
|
|
|
|
class MyApp extends StatefulWidget {
|
|
const MyApp({super.key});
|
|
|
|
@override
|
|
State<MyApp> createState() => _MyAppState();
|
|
}
|
|
|
|
class _MyAppState extends State<MyApp> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
debugShowCheckedModeBanner: false,
|
|
// scaffoldMessengerKey: SnackBarService().scaffoldMessengerKey,
|
|
title: 'cheminova',
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
|
useMaterial3: true),
|
|
home: const SplashScreen());
|
|
}
|
|
}
|