import 'dart:convert'; import 'package:connection_notifier/connection_notifier.dart'; import 'package:fast_cached_network_image/fast_cached_network_image.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:muaawana/services/push_notification_service.dart'; import 'package:muaawana/wrapper.dart'; import 'config/style.dart'; import 'providers/ThemeProvider.dart'; import 'providers/language_provider.dart'; import 'config/en.dart'; import 'firebase_options.dart'; import 'providers/navbar_provider/bottom_navigation_provider.dart'; import 'providers/navbar_provider/client_bottom_nav_provider.dart'; import 'providers/request_status_provider.dart'; import 'utils/utils_singleton.dart'; import 'services/dependency_injector.dart'; import 'services/navigation_service.dart'; import 'views/client_view/main_screen.dart'; import 'views/splash/splash_screen.dart'; import 'config/provider.dart'; import 'config/size.dart'; import 'views/technicien_view/home_tech_screen.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); await FastCachedImageConfig.init(clearCacheAfter: const Duration(days: 15)); util.setPrefs(); RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); if (initialMessage != null) { // App received a notification when it was killed } initializeDateFormatting("ar_EG"); runApp( MultiProvider( providers: DependencyInjector.instance.providers, child: GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); }, child: const MyApp(),) ), ); } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override State createState() => _MyAppState(); } class _MyAppState extends State { @override void initState() { super.initState(); SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom]); Future.microtask(() async => await PushNotificationService().setupInteractedMessage(context)); Future.microtask(() async => await handleNotificationOpenedApplication()); util.setPrefs(); context.read().getLanguage(); } handleNotificationOpenedApplication() async { final NotificationAppLaunchDetails? notificationAppLaunchDetails = await FlutterLocalNotificationsPlugin() .getNotificationAppLaunchDetails(); final didNotificationLaunchApp = notificationAppLaunchDetails?.didNotificationLaunchApp ?? false; if (didNotificationLaunchApp) { // The app was launched from a notification final payload = jsonDecode( notificationAppLaunchDetails!.notificationResponse!.payload!); print( "**************** notification opened application. Notification payload : $payload ********************"); if (util.user != null) { if (util.user!.role!.role == "ROLE_TECHNICIAN") { if (payload['action'] == "NEW_MESSAGE") { context.read().setCurrentIndex(1); Get.to(() => const HomeTechView()); } else { context.read().setCurrentIndex(0); Get.to(() => const HomeTechView()); } } else { if (payload['action'] == "NEW_MESSAGE") { context.read().setCurrentIndex(3); Get.to(() => const HomeClientView()); } else { print(payload['actionId'] is String); print(payload['actionId'] is int); print(payload['actionId']); final id = int.tryParse(payload['actionId']); print(id is int); context.read().setCurrentIndex(1); context .read() .addActiveNotificationRequest(id!); context.read().refreshListOrder(id); Get.to(() => const HomeClientView()); } } } // context.read().setCurrentIndex(2); } } @override Widget build(BuildContext context) { final langProvider = Provider.of(context); final themeProvider = Provider.of(context); return LayoutBuilder(builder: (context, constraints) { return OrientationBuilder(builder: (context, orientation) { SizeConfig().init(constraints, orientation); return ConnectionNotifier( child: GetMaterialApp( navigatorKey: NavigatorService.navigatorKey, theme: AppNewThemes.lightTheme, darkTheme: AppNewThemes.darkTheme, themeMode: themeProvider.themeMode, title: 'Muaawana', debugShowCheckedModeBanner: false, initialRoute: '/wrapper', routes: { '/splash': (context) => const Splash(), '/wrapper': (context) => const Wrapper(), '/clientHome': (context) => const HomeClientView(), '/technicianHome': (context) => const HomeTechView(), }, builder: (context, child) { final MediaQueryData data = MediaQuery.of(context); return Directionality( textDirection: langProvider.currentLanguage == en ? TextDirection.ltr : TextDirection.rtl, child: MediaQuery( data: data.copyWith( textScaler: const TextScaler.linear(1.1), ), child: child!, ), ); }, ), ); }); }); } }