123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- import 'dart:convert';
- import 'dart:io';
- import 'dart:ui';
- import 'package:auto_route/auto_route.dart';
- import 'package:easy_localization/easy_localization.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/services.dart';
- import 'package:flutter_local_notifications/flutter_local_notifications.dart';
- import 'package:flutter_native_splash/flutter_native_splash.dart';
- import 'package:fluttertoast/fluttertoast.dart';
- import 'package:page_transition/page_transition.dart';
- import 'package:provider/provider.dart';
- import 'package:quick_notify_2/quick_notify.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import 'package:telnow_mobile_new/src/api/api_auth_provider.dart';
- import 'package:telnow_mobile_new/src/injector/injector.dart';
- import 'package:telnow_mobile_new/src/layouts/mobile/history_forum.dart';
- import 'package:telnow_mobile_new/src/layouts/mobile/message_list.dart';
- import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
- import 'package:telnow_mobile_new/src/utils/U.dart';
- import 'package:telnow_mobile_new/src/utils/provider.dart';
- import 'package:upgrader/upgrader.dart';
- import 'package:http/http.dart' as http;
- import 'app_router.dart';
- final SharedPreferencesManager _sharedPreferencesManager = locator<SharedPreferencesManager>();
- var isDebug = true;
- class MyHttpOverrides extends HttpOverrides {
- @override
- HttpClient createHttpClient(SecurityContext? context) {
- return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
- }
- }
- void main() async{
- WidgetsFlutterBinding.ensureInitialized();
- await EasyLocalization.ensureInitialized();
- try{
- if (kIsWeb){
- await Firebase.initializeApp(
- options: FirebaseOptions(
- apiKey: "AIzaSyDlJQaEV9aPnPFeFA7QeiVijoGZXqemCRw",
- authDomain: "telmessenger-d3935.firebaseapp.com",
- databaseURL: "https://telmessenger-d3935.firebaseio.com",
- projectId: "telmessenger-d3935",
- storageBucket: "telmessenger-d3935.appspot.com",
- messagingSenderId: "647562261340",
- appId: "1:647562261340:web:01b97a27460e4bfd5b0799",
- measurementId: "G-BFCBWCK70H"
- )
- );
- }
- else{
- await Firebase.initializeApp();
- await U.flutterLocalNotificationsPlugin.cancelAll();
- await U.flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(U.channel);
- }
- await setupLocator();
- SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
- HttpOverrides.global = new MyHttpOverrides();
- WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
- FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
- runApp(
- EasyLocalization(
- path: 'assets/lang',
- supportedLocales: [
- Locale('en'),
- Locale('id'),
- Locale('ja'),
- Locale('zh'),
- Locale('ko')
- ],
- startLocale: Locale('id'),
- saveLocale: true,
- child: MyApp()
- )
- );
- } catch (error, stacktrace) {
- print('$error & $stacktrace');
- }
- }
- class MyCustomScrollBehavior extends MaterialScrollBehavior {
- // Override behavior methods and getters like dragDevices
- @override
- Set<PointerDeviceKind> get dragDevices {
- return {
- PointerDeviceKind.touch,
- PointerDeviceKind.mouse,
- };
- }
- }
- class MyApp extends StatelessWidget {
- MyApp({super.key});
- final _appRouter = AppRouter();
- // This widget is the root of your application.
- @override
- Widget build(BuildContext context) {
- return MultiProvider(
- providers: [
- ChangeNotifierProvider(create: (_) => UserModule()),
- ChangeNotifierProvider(create: (_) => ServiceModule()),
- ChangeNotifierProvider(create: (_) => HistoryModule()),
- ChangeNotifierProvider(create: (_) => RequestModule()),
- ChangeNotifierProvider(create: (_) => CreateSerModule()),
- ChangeNotifierProvider(create: (_) => MessageModule()),
- ],
- child: MaterialApp.router(
- scrollBehavior: MyCustomScrollBehavior(),
- debugShowCheckedModeBanner: false,
- localizationsDelegates: context.localizationDelegates,
- supportedLocales: context.supportedLocales,
- locale: context.locale,
- key: NavigationService.navigatorKey,
- theme: ThemeData(useMaterial3: false, fontFamily: 'SF Compact Display', appBarTheme: AppBarTheme(
- systemOverlayStyle: SystemUiOverlayStyle(
- statusBarColor: Colors.transparent,
- statusBarIconBrightness: Brightness.dark,
- statusBarBrightness: Brightness.dark
- ),
- )),
- routerConfig: _appRouter.config(),
- ),
- );
- }
- }
- class NavigationService {
- static GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
- }
- @RoutePage()
- class HomeGuardPage extends StatefulWidget {
- const HomeGuardPage({Key? key}) : super(key: key);
- @override
- State<HomeGuardPage> createState() => _HomeGuardPageState();
- }
- class _HomeGuardPageState extends State<HomeGuardPage> {
- late DateTime currentBackPressTime;
- @override
- Widget build(BuildContext context) {
- // TODO: implement build
- return Scaffold(
- body: !kIsWeb ? UpgradeAlert(child: AutoRouter()):AutoRouter(),
- );
- }
- Future<bool> onWillPop() {
- DateTime now = DateTime.now();
- if (now.difference(currentBackPressTime) > Duration(seconds: 2)) {
- currentBackPressTime = now;
- Fluttertoast.showToast(msg: 'pressAgain'.tr());
- return Future.value(false);
- }
- return Future.value(true);
- }
- }
- class NotificationClass {
- final ApiAuthProvider _apiAuthProvider = ApiAuthProvider();
- initFirebaseMessaging(BuildContext context) {
- FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
- var mid = message.data['mid'];
- var token = await U.getFcmToken();
- // print('tokennya');
- // print(token);
- if (token != null) {
- var res = _apiAuthProvider.postDataNoAuth('/api/notifications/received/$token/$mid').then((value) =>
- print('sukses kirim confirm')
- );
- }
- if(kIsWeb){
- QuickNotify.notify(
- title: message.data['subject'],
- content: context.locale.toString() == 'id' ? message.data['description'] : message.data['descriptionEn'],
- );
- }
- else{
- const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('notification_icon');
- final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid);
- // U.flutterLocalNotificationsPlugin.initialize(initializationSettings,);
- U.flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: (NotificationResponse notificationResponse) async {
- if (notificationResponse.payload != null) {
- var list = jsonDecode(notificationResponse.payload!);
- goNotification(list, context);
- }
- });
- var androidPlatformChannelSpecifics = AndroidNotificationDetails(
- 'notification_channel2', // id
- 'Normal Notification', // title
- channelDescription: 'This channel is used for normal notifications.', // description
- importance: Importance.max,
- priority: Priority.high,
- color: Color(0xff0D497F),
- styleInformation: BigTextStyleInformation(''),
- playSound: true,
- enableVibration: true,
- // sound: RawResourceAndroidNotificationSound('notification_alarm'),
- largeIcon: DrawableResourceAndroidBitmap('banner_icon_blue'),
- setAsGroupSummary: true,
- groupKey: message.data['subject']
- );
- var platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics);
- U.flutterLocalNotificationsPlugin.show(0, message.data['subject'],
- context.locale.toString() == 'id' ? message.data['description'] : message.data['descriptionEn'], platformChannelSpecifics,
- payload: jsonEncode(message.data));
- }
- });
- FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
- FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
- if (message != null && !U.hidePayload) {
- print(message.data);
- goNotification(message.data, context);
- }
- });
- FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
- U.setHidePayload(false);
- goNotification(message.data, context);
- });
- }
- getActiveNotif() async {
- List<ActiveNotification>? activeNotif = await U.flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.getActiveNotifications();
- return activeNotif;
- }
- startNotification(BuildContext context) async {
- var token = await U.getFcmToken();
- if (token != null) {
- Map data = {'token': token, 'language': context.locale.toString().toUpperCase()};
- var res = _apiAuthProvider.postData('/api/fcmTokens/register', null, data, context);
- return res;
- }
- }
- stopNotification(BuildContext context) async {
- var token = await U.getFcmToken();
- if (token != null) {
- var res = _apiAuthProvider.postData('/api/fcmTokens/remove/$token', null, null, context);
- return res;
- }
- }
- goNotification(list, BuildContext context) {
- if (list['type'] == 'MESSAGE') {
- Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: MobMessageListPage(null)));
- }
- else if (list['type'] == 'FORUM') {
- // print(list['requestHistory']);
- Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: MobHistoryForumPage(data: jsonDecode(list['requestHistory']))));
- }
- else{
- var pid = U.getPidFromUrl(context.router.currentUrl);
- context.router.removeLast();
- context.navigateNamedTo("/app/$pid/menu/history");
- }
- // if (list['type'] == 'FORUM') {
- // Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: Forum(list['info'], list['currentStatus'] == 'DIMULAI' || list['currentStatus'] == 'DISELESAIKAN' ? true : false)));
- // } else {
- // Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: DetailMisi(list['info'])));
- // }
- }
- }
- Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
- await Firebase.initializeApp();
- SharedPreferences prefs = await SharedPreferences.getInstance();
- await prefs.reload();
- // print('background : ${message.data}');
- String accCode = prefs.getString(SharedPreferencesManager.keyAccessCode)!;
- var decAccCode = U.decodeBase64Url(accCode);
- var mid = message.data['mid'];
- FirebaseMessaging.instance.getToken().then((token) async {
- if (token != null) {
- http.post(Uri.https(U.decodeBase64Url(prefs.getString(SharedPreferencesManager.keyBaseUrl)!).split('//')[1], '$decAccCode/api/notifications/received/$token/$mid')).then((value) {
- print("kirim confirm");
- prefs.setString(SharedPreferencesManager.lastMid, mid);
- });
- }
- });
- }
|