import 'dart:io'; import 'package:fcs/fcs/common/helpers/theme.dart'; import 'package:fcs/fcs/common/localization/app_translations_delegate.dart'; import 'package:fcs/fcs/common/localization/transalation.dart'; import 'package:fcs/fcs/common/pages/model/language_model.dart'; import 'package:fcs/fcs/common/services/services.dart'; import 'package:fcs/model/buyer_model.dart'; import 'package:fcs/model/delivery_model.dart'; import 'package:fcs/model/discount_model.dart'; import 'package:fcs/model/manual_model.dart'; import 'package:fcs/model/notification_model.dart'; import 'package:fcs/model/pd_model.dart'; import 'package:fcs/model/reg_model.dart'; import 'package:fcs/model/report_model.dart'; import 'package:fcs/model/shipment_model.dart'; import 'package:fcs/model/storage_model.dart'; import 'package:fcs/model/test_model.dart'; import 'package:fcs/model_fcs/message_model.dart'; import 'package:fcs/model_fcs/package_model.dart'; import 'package:fcs/pages/email_page.dart'; import 'package:fcs/pages/login_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; import 'package:fcs/fcs/common/pages/model/main_model.dart' as fcs; import 'model/announcement_model.dart'; import 'model/chart_model.dart'; import 'model/customer_model.dart'; import 'model/device_model.dart'; import 'model/do_model.dart'; import 'model/employee_model.dart'; import 'model/invoice_model.dart'; import 'model/log_model.dart'; import 'model/main_model.dart'; import 'model/pickup_model.dart'; import 'model/po_model.dart'; import 'model/product_model.dart'; import 'model/report_user_model.dart'; import 'model/shipment_rate_model.dart'; import 'model/user_model.dart'; import 'model_fcs/box_model.dart'; import 'fcs/common/pages/home_page.dart'; import 'fcs/common/pages/welcome_page.dart'; import 'fcs/common/pages/splash_page.dart'; import 'pages/term.dart'; class App extends StatefulWidget { @override _AppState createState() => _AppState(); } class _AppState extends State { final fcs.MainModel mainModel2 = new fcs.MainModel(); final MainModel mainModel = new MainModel(); final UserModel userModel = new UserModel(); final ProductModel productModel = new ProductModel(); final EmployeeModel employeeModel = new EmployeeModel(); final POSubmissionModel poSubmissionModel = new POSubmissionModel(); final DOModel doModel = new DOModel(); final LanguageModel lanuguageModel = new LanguageModel(); final StorageModel storageModel = new StorageModel(); final PDModel pdModel = new PDModel(); final RegModel regModel = new RegModel(); final BuyerModel buyerModel = new BuyerModel(); final NotificationModel notificationModel = new NotificationModel(); final ChartModel chartModel = new ChartModel(); final DeliveryModel deliveryModel = new DeliveryModel(); final ManualModel manualModel = new ManualModel(); final TestModel testModel = new TestModel(); final LogModel logModel = new LogModel(); final PhoneDeviceModel phoneDeviceModel = new PhoneDeviceModel(); final ReportModel reportModel = new ReportModel(); final AnnouncementModel announcementModel = new AnnouncementModel(); final ReportUserModel reportUserModel = new ReportUserModel(); final PickUpModel pickUpModel = new PickUpModel(); final ShipmentRateModel shipmentRateModel = new ShipmentRateModel(); final ShipmentModel shipmentModel = new ShipmentModel(); final PackageModel packageModel = new PackageModel(); final BoxModel boxModel = new BoxModel(); final MessageModel messageModel = new MessageModel(); final InvoiceModel invoiceModel = new InvoiceModel(); final CustomerModel customerModel = new CustomerModel(); final DiscountModel discountModel = new DiscountModel(); AppTranslationsDelegate _newLocaleDelegate; static FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); @override void initState() { super.initState(); mainModel2.init(); _newLocaleDelegate = AppTranslationsDelegate(newLocale: null); Translation().onLocaleChanged = onLocaleChange; mainModel ..addModel(userModel) ..addModel(employeeModel) ..addModel(storageModel) ..addModel(regModel) ..addModel(poSubmissionModel) ..addModel(doModel) ..addModel(productModel) ..addModel(pdModel) ..addModel(buyerModel) ..addModel(notificationModel) ..addModel(chartModel) ..addModel(deliveryModel) ..addModel(logModel) ..addModel(manualModel) ..addModel(phoneDeviceModel) ..addModel(regModel) ..addModel(announcementModel) ..addModel(reportModel) ..addModel(testModel) ..addModel(reportUserModel) ..addModel(pickUpModel) ..addModel(shipmentRateModel) ..addModel(shipmentModel) ..addModel(packageModel) ..addModel(boxModel) ..addModel(messageModel) ..addModel(shipmentRateModel) ..addModel(invoiceModel) ..addModel(customerModel) ..addModel(discountModel); this.mainModel.init(); _initLocalNotifications(); Services.instance.messagingService.init((message) { print("Message from FCM:$message"); _showNotification(message); }); } _initLocalNotifications() { var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher'); var initializationSettingsIOS = new IOSInitializationSettings(); var initializationSettings = new InitializationSettings( initializationSettingsAndroid, initializationSettingsIOS); _flutterLocalNotificationsPlugin.initialize(initializationSettings); } static Future _showNotification(Map message) async { var pushTitle; var pushText; var action; if (Platform.isAndroid) { var nodeData = message['notification']; pushTitle = nodeData['title']; pushText = nodeData['body']; action = nodeData['action']; } else { pushTitle = message['title']; pushText = message['body']; action = message['action']; } print("AppPushs params pushTitle : $pushTitle"); print("AppPushs params pushText : $pushText"); print("AppPushs params pushAction : $action"); // @formatter:off var platformChannelSpecificsAndroid = new AndroidNotificationDetails( 'your channel id', 'your channel name', 'your channel description', playSound: true, enableVibration: true, importance: Importance.Max, priority: Priority.High); // @formatter:on var platformChannelSpecificsIos = new IOSNotificationDetails(presentSound: true); var platformChannelSpecifics = new NotificationDetails( platformChannelSpecificsAndroid, platformChannelSpecificsIos); new Future.delayed(Duration.zero, () { _flutterLocalNotificationsPlugin.show( 0, pushTitle, pushText, platformChannelSpecifics, payload: 'No_Sound', ); }); } void onLocaleChange(Locale locale) { setState(() { _newLocaleDelegate = AppTranslationsDelegate(newLocale: locale); }); } Map route(BuildContext context) { final routes = { '/': (_) => SplashScreen(), '/welcome': (_) => WelcomePage(), '/home': (_) => HomePage(), '/term': (context) => Term( agreePage: true, ), '/login': (context) => LoginPage(), '/email': (context) => EmailPage() }; return routes; } @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider.value(value: mainModel), ChangeNotifierProvider.value(value: userModel), ChangeNotifierProvider.value(value: productModel), ChangeNotifierProvider.value(value: employeeModel), ChangeNotifierProvider.value(value: poSubmissionModel), ChangeNotifierProvider.value(value: doModel), ChangeNotifierProvider.value(value: storageModel), ChangeNotifierProvider.value(value: pdModel), ChangeNotifierProvider.value(value: lanuguageModel), ChangeNotifierProvider.value(value: regModel), ChangeNotifierProvider.value(value: buyerModel), ChangeNotifierProvider.value(value: notificationModel), ChangeNotifierProvider.value(value: chartModel), ChangeNotifierProvider.value(value: deliveryModel), ChangeNotifierProvider.value(value: logModel), ChangeNotifierProvider.value(value: phoneDeviceModel), ChangeNotifierProvider.value(value: reportModel), ChangeNotifierProvider.value(value: announcementModel), ChangeNotifierProvider.value(value: reportUserModel), ChangeNotifierProvider.value(value: pickUpModel), ChangeNotifierProvider.value(value: shipmentRateModel), ChangeNotifierProvider.value(value: shipmentModel), ChangeNotifierProvider.value(value: packageModel), ChangeNotifierProvider.value(value: boxModel), ChangeNotifierProvider.value(value: messageModel), ChangeNotifierProvider.value(value: invoiceModel), ChangeNotifierProvider.value(value: customerModel), ChangeNotifierProvider.value(value: discountModel), ChangeNotifierProvider.value(value: testModel), ChangeNotifierProvider.value(value: mainModel2), ], child: Consumer( builder: (context, value, child) { return CupertinoApp( debugShowCheckedModeBanner: false, title: 'FCS', theme: CupertinoThemeData( textTheme: CupertinoTextThemeData( navActionTextStyle: TextStyle(color: Colors.white), navTitleTextStyle: TextStyle( color: Colors.white, fontSize: value.isEng ? 20 : 18, fontWeight: FontWeight.bold), navLargeTitleTextStyle: TextStyle( color: Colors.white, fontSize: value.isEng ? 40 : 24, fontWeight: FontWeight.bold), primaryColor: primaryColor, textStyle: TextStyle(color: Colors.white), actionTextStyle: TextStyle(color: Colors.white), )), routes: route(context), localizationsDelegates: [ _newLocaleDelegate, //provides localised strings GlobalMaterialLocalizations.delegate, //provides RTL support GlobalWidgetsLocalizations.delegate, ], supportedLocales: Translation().supportedLocales()); }, )); } }