290 lines
9.9 KiB
Dart
290 lines
9.9 KiB
Dart
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<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
|
|
|
@pragma('vm:entry-point')
|
|
Future<void> _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<void> 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<Didvan> createState() => _DidvanState();
|
|
}
|
|
|
|
class _DidvanState extends State<Didvan> 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<String>('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<String>("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<PodcastsState>(
|
|
create: (context) => PodcastsState(),
|
|
),
|
|
ChangeNotifierProvider<MediaProvider>(
|
|
create: (context) => MediaProvider(),
|
|
),
|
|
ChangeNotifierProvider<UserProvider>(
|
|
create: (context) => UserProvider(),
|
|
),
|
|
ChangeNotifierProvider<ThemeProvider>(
|
|
create: (context) => ThemeProvider(),
|
|
),
|
|
ChangeNotifierProvider<StudioDetailsState>(
|
|
create: (context) => StudioDetailsState(),
|
|
),
|
|
],
|
|
child: Consumer<ThemeProvider>(
|
|
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"),
|
|
)),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|