Files
grocery_user_app-frontend/lib/main.dart
2025-04-24 18:48:12 +05:30

135 lines
5.0 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,
),
),
),
);
// MaterialApp.router(
// title: 'Customer App',
// routerConfig: MyRoutes.router,
// debugShowCheckedModeBanner: false,
// theme: ThemeData(
// colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
// useMaterial3: true,
// ),
// // home: const SplashScreen(),
// );
}
}