126 lines
4.6 KiB
Dart
126 lines
4.6 KiB
Dart
import 'package:firebase_core/firebase_core.dart';
|
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:grocery_app/src/core/network_services/service_locator.dart';
|
|
import 'package:grocery_app/src/core/routes/routes.dart';
|
|
import 'package:grocery_app/src/firebase_options.dart';
|
|
import 'package:grocery_app/src/logic/provider/addTocart_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/address_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/auth_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/bottom_navbar_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/home_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/order_provider.dart';
|
|
import 'package:grocery_app/src/logic/provider/profile_provider.dart';
|
|
import 'package:grocery_app/src/logic/services/notification_service.dart';
|
|
import 'package:grocery_app/src/ui/splash/splash_screen.dart';
|
|
import 'package:grocery_app/utils/constants/color_constant.dart';
|
|
import 'package:grocery_app/utils/constants/string_constant.dart';
|
|
import 'package:loader_overlay/loader_overlay.dart';
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
@pragma('vm:entry-point')
|
|
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async
|
|
{
|
|
await Firebase.initializeApp();
|
|
print("💬 Background Message Received: ${message.notification?.title}");
|
|
if (message.notification != null) {
|
|
NotificationService.flutterLocalNotificationsPlugin.show(
|
|
message.hashCode,
|
|
message.notification!.title,
|
|
message.notification!.body,
|
|
const NotificationDetails(
|
|
android: AndroidNotificationDetails(
|
|
'high_importance_channel',
|
|
'High Importance Notifications',
|
|
channelDescription: 'Used for important notifications.',
|
|
importance: Importance.max,
|
|
priority: Priority.high,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
Future<void> main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
await Firebase.initializeApp(
|
|
options: DefaultFirebaseOptions.currentPlatform,
|
|
);
|
|
|
|
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
|
await NotificationService.init();
|
|
|
|
ServiceLocator.setup();
|
|
await requestNotificationPermission();
|
|
runApp(const MyApplication());
|
|
}
|
|
|
|
Future<void> requestNotificationPermission() async {
|
|
PermissionStatus status = await Permission.notification.status;
|
|
|
|
if (status.isDenied || status.isPermanentlyDenied) {
|
|
status = await Permission.notification.request();
|
|
}
|
|
|
|
if (status.isGranted) {
|
|
print("✅ Notification permission granted");
|
|
} else if (status.isPermanentlyDenied) {
|
|
print("⚠️ Notification permission permanently denied. Open settings.");
|
|
openAppSettings();
|
|
} else {
|
|
print("❌ Notification permission denied.");
|
|
}
|
|
}
|
|
|
|
|
|
class MyApplication extends StatelessWidget {
|
|
const MyApplication({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ScreenUtilInit(
|
|
designSize: const Size(360, 690),
|
|
minTextAdapt: true,
|
|
splitScreenMode: true,
|
|
builder: (context, child) => GlobalLoaderOverlay(
|
|
overlayColor: APPCOLOR.whiteFBFEFB.withOpacity(0.5),
|
|
|
|
useDefaultLoading: false,
|
|
// overlayWidgetBuilder: (progress) => const GlobalLoader(),
|
|
child: MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider(create: (_) => AuthProvider()),
|
|
ChangeNotifierProvider(create: (_) => ProductProvider()),
|
|
ChangeNotifierProvider(create: (_) => AddtocartProvider()),
|
|
ChangeNotifierProvider(create: (_) => BottomNavProvider()),
|
|
ChangeNotifierProvider(create: (_) => AddressProvider()),
|
|
ChangeNotifierProvider(create: (_) => ProfileProvider()),
|
|
ChangeNotifierProvider(create: (_) => OrderProvider()),
|
|
|
|
],
|
|
child: MaterialApp.router(
|
|
routerConfig: MyRoutes.router,
|
|
debugShowCheckedModeBanner: false,
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightGreen),
|
|
scaffoldBackgroundColor: Colors.white,
|
|
canvasColor: const Color.fromRGBO(255, 255, 255, 1),
|
|
fontFamily: 'GoogleSans',
|
|
primarySwatch: Colors.blue,
|
|
),
|
|
themeMode: ThemeMode.light,
|
|
title: APPSTRING.appName,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
|
|
}
|
|
}
|