import 'package:android_intent_plus/android_intent.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/providers/media.dart'; import 'package:didvan/providers/theme.dart'; import 'package:didvan/providers/user.dart'; import 'package:didvan/routes/route_generator.dart'; import 'package:didvan/routes/routes.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/notification/awsome/awsome_notification_handler.dart'; import 'package:didvan/services/notification/fcm/firebase_notification_handler.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/podcasts/podcasts_state.dart'; import 'package:didvan/views/podcasts/studio_details/studio_details_state.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_localizations/flutter_localizations.dart'; import 'package:home_widget/home_widget.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'models/requests/infography.dart'; import 'models/requests/news.dart'; import 'models/requests/radar.dart'; import 'models/widget_response.dart'; final GlobalKey navigatorKey = GlobalKey(); @pragma('vm:entry-point') Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: kIsWeb ? const FirebaseOptions( apiKey: "AIzaSyA0HZjKpRuPOi1SC3f_EZTvlS3mcj9UVo0", authDomain: "didvan-9b7da.firebaseapp.com", projectId: "didvan-9b7da", storageBucket: "didvan-9b7da.appspot.com", messagingSenderId: "935017686266", appId: "1:935017686266:web:a93f7a19bed23c51d2d543", measurementId: "G-80B4H9E8Y0") : const FirebaseOptions( apiKey: 'AIzaSyBp-UHjWeM0H0UHtX5yguFKG-riMzvvCzw', appId: '1:935017686266:android:f9cbc9aba8e3d65ed2d543', messagingSenderId: '935017686266', projectId: 'didvan-9b7da', ), ); // AwsomeNotificationHandler().alarm(); AwsomeNotificationHandler().show(message); } void main() async { try { WidgetsFlutterBinding.ensureInitialized(); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); FirebaseMessaging.onMessage.listen( (RemoteMessage message) => AwsomeNotificationHandler().show(message)); //ignore: deprecated_member_use HomeWidget.registerBackgroundCallback(backgroundCallback); HomeWidget.registerInteractivityCallback(backgroundCallback); AwsomeNotificationHandler().alarm(); FirebaseNotificationHandler().initial(); } catch (e) { debugPrintStack(); } runApp(const Didvan()); } Future backgroundCallback(Uri? uri) async { AndroidIntent intent = const AndroidIntent( action: 'android.intent.action.RUN', package: 'com.didvan.didvanapp', componentName: 'com.didvan.didvanapp.MainActivity', ); await intent.launch(); HomeWidget.saveWidgetData("uri", uri!.host); } class Didvan extends StatefulWidget { const Didvan({Key? key}) : super(key: key); @override State createState() => _DidvanState(); } class _DidvanState extends State with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } bool b = true; @override void didChangeAppLifecycleState(AppLifecycleState state) async { HomeWidget.widgetClicked.listen((event) { print("${event!.host}--------------------------------------------------------------"); }); if (state == AppLifecycleState.paused) { b = false; } if (state == AppLifecycleState.resumed) { await HomeWidget.getWidgetData('uri', defaultValue: "") .then((value) async { if (value!.isNotEmpty) { int row = 0; String route = ""; dynamic args; switch (value) { case 'setting': route = Routes.favouritesStep; args = {"toTimer": false}; break; case 'rowfirst': row = 1; break; case 'rowmiddle': row = 2; break; case 'rowlast': row = 3; break; } if (row != 0) { String? id = await HomeWidget.getWidgetData("id$row", defaultValue: ""); WidgetResponse data = WidgetResponse( id: int.parse(id!), title: await HomeWidget.getWidgetData("title$row", defaultValue: ""), createdAt: await HomeWidget.getWidgetData("createdAt$row", defaultValue: ""), type: await HomeWidget.getWidgetData("type$row", defaultValue: ""), link: await HomeWidget.getWidgetData("link$row", defaultValue: ""), category: await HomeWidget.getWidgetData("category$row", defaultValue: ""), image: await HomeWidget.getWidgetData("image$row", defaultValue: ""), ); if (data.link!.isEmpty) { switch (data.type!) { case "infography": route = Routes.infography; args = { // 'onMarkChanged': (id, value) => // markChangeHandler(data.type, id, value), 'id': data.id, 'args': const InfographyRequestArgs(page: 0), 'hasUnmarkConfirmation': false, }; break; case "news": route = Routes.newsDetails; args = { // 'onMarkChanged': (id, value) => // markChangeHandler(data.type, id, value), 'id': data.id, 'args': const NewsRequestArgs(page: 0), 'hasUnmarkConfirmation': false, }; break; case "radar": route = Routes.radarDetails; args = { // 'onMarkChanged': (id, value) => // markChangeHandler(data.type, id, value), 'id': data.id, 'args': const RadarRequestArgs(page: 0), 'hasUnmarkConfirmation': false, }; break; case "video": route = Routes.studioDetails; args = { 'type': 'podcast', 'id': data.id, }; break; case "podcast": route = Routes.podcasts; args = { 'type': 'podcast', 'id': data.id, }; break; } } else { if (data.link!.startsWith('http')) { launchUrlString( '${data.link}', mode: LaunchMode.inAppWebView, ); } } } if (route.isNotEmpty) { !b ? ActionSheetUtils.showLogoLoadingIndicator() : null; await Future.delayed(Duration(seconds: b ? 10 : 2), () { !b ? ActionSheetUtils.pop() : null; navigatorKey.currentState!.pushNamed(route, arguments: args); }); } } }); HomeWidget.saveWidgetData("uri", ""); } } @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => PodcastsState(), ), ChangeNotifierProvider( create: (context) => MediaProvider(), ), ChangeNotifierProvider( create: (context) => UserProvider(), ), ChangeNotifierProvider( create: (context) => ThemeProvider(), ), ChangeNotifierProvider( create: (context) => StudioDetailsState(), ), ], child: Consumer( builder: (context, themeProvider, child) => Container( color: Theme.of(context).colorScheme.surface, child: SafeArea( child: MaterialApp( navigatorKey: navigatorKey, debugShowCheckedModeBanner: false, title: 'Didvan', theme: LightThemeConfig.themeData.copyWith( textTheme: LightThemeConfig.themeData.textTheme.apply( fontFamily: themeProvider.fontFamily, )), darkTheme: DarkThemeConfig.themeData.copyWith( textTheme: DarkThemeConfig.themeData.textTheme.apply( fontFamily: themeProvider.fontFamily, )), color: LightThemeConfig.themeData.primaryColor, themeMode: themeProvider.themeMode, onGenerateRoute: (settings) => RouteGenerator.generateRoute(settings), builder: BotToastInit(), //1. call BotToastInit navigatorObservers: [BotToastNavigatorObserver()], initialRoute: "/", localizationsDelegates: const [ GlobalCupertinoLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: const [ Locale("fa", "IR"), ], locale: const Locale("fa", "IR"), )), ), ), ); } }