main.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import 'package:firebase_messaging/firebase_messaging.dart';
  2. import 'package:firebase_core/firebase_core.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_local_notifications/flutter_local_notifications.dart';
  5. import 'package:plataforma_educativa/src/bloc/provider.dart';
  6. import 'package:plataforma_educativa/src/pages/error_page.dart';
  7. import 'package:plataforma_educativa/src/pages/home_page.dart';
  8. import 'package:plataforma_educativa/src/pages/load_page.dart';
  9. import 'package:plataforma_educativa/src/pages/login_page.dart';
  10. import 'package:plataforma_educativa/src/pages/menu_page.dart';
  11. import 'package:plataforma_educativa/src/providers/db_provider.dart';
  12. import 'package:workmanager/workmanager.dart';
  13. import 'package:flutter_localizations/flutter_localizations.dart';
  14. void callbackDispatcher(){
  15. Workmanager().executeTask((taskName, inputData) async{
  16. FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  17. const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('app_icon');
  18. const InitializationSettings initializationSettings = InitializationSettings(
  19. android: initializationSettingsAndroid
  20. );
  21. await flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: onSelectNotification);
  22. const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails("plataformaEdu", "PlatEdu",
  23. channelDescription: "Prueba",
  24. importance: Importance.max,
  25. priority: Priority.high,
  26. ticker: 'ticker'
  27. );
  28. const NotificationDetails notificationDetails = NotificationDetails(
  29. android: androidNotificationDetails
  30. );
  31. await flutterLocalNotificationsPlugin.show(0, "Prueba", "Texto ejemplo", notificationDetails);
  32. return Future.value(true);
  33. });
  34. }
  35. void onSelectNotification(String? payload) async{
  36. // ignore: avoid_print
  37. print("PRUEBA");
  38. }
  39. void main() {
  40. WidgetsFlutterBinding.ensureInitialized();
  41. Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
  42. Workmanager().registerPeriodicTask("2", "periodic", frequency: const Duration(minutes: 15));
  43. runApp(const MyApp());
  44. }
  45. class MyApp extends StatefulWidget {
  46. const MyApp({Key? key}) : super(key: key);
  47. @override
  48. _MyAppState createState() => _MyAppState();
  49. }
  50. class _MyAppState extends State<MyApp> {
  51. final GlobalKey<NavigatorState> _navKey = GlobalKey<NavigatorState>();
  52. late FirebaseMessaging _messaging;
  53. late String _tokenFCM;
  54. bool _error = false;
  55. String _strError = "";
  56. Future<void> initializeFlutterFire() async{
  57. try{
  58. await Firebase.initializeApp();
  59. setState(() => _strError = "");
  60. }catch(e){
  61. _error = true;
  62. _strError = e.toString();
  63. }
  64. }
  65. Future<void> requestPermission() async{
  66. NotificationSettings settings = await _messaging.requestPermission(
  67. alert: true,
  68. announcement: false,
  69. badge: true,
  70. carPlay: false,
  71. criticalAlert: false,
  72. provisional: false,
  73. sound: true,
  74. );
  75. }
  76. Future<String> getFCMToken() async{
  77. String? token = await _messaging.getToken();
  78. return token!;
  79. }
  80. @override
  81. void initState() {
  82. super.initState();
  83. initializeFlutterFire().then((value){
  84. if(_error){
  85. _navKey.currentState!.pushReplacement(MaterialPageRoute(
  86. builder: (context) =>ErrorPage(strError: _strError)
  87. ));
  88. }else{
  89. _messaging = FirebaseMessaging.instance;
  90. requestPermission();
  91. getFCMToken().then((token){
  92. setState(() {
  93. _tokenFCM = token;
  94. FirebaseMessaging.onMessage.listen((message) {
  95. // ignore: avoid_print
  96. print('Got a message whilst in the foreground!');
  97. // ignore: avoid_print
  98. print('Message data: ${message.data}');
  99. });
  100. DBProvider.db.getAllUsers().then((users){
  101. if(users.isNotEmpty){
  102. const mes = 30 * 24 * 60;
  103. const dia = 24 * 60;
  104. final dif = DateTime.now().difference(users.first.until).inMinutes;
  105. if(users.first.active && dif <= mes){
  106. print("SESION MENSUAL");
  107. }else{
  108. if(dif <= dia && users.first.tipoUsuario != "PF"){
  109. _navKey.currentState!.pushReplacement(MaterialPageRoute(
  110. builder: (context) => MenuPage(
  111. esPadre: false,
  112. revisaHijo: false,
  113. fcmToken: _tokenFCM,
  114. ),
  115. ));
  116. }else if(dif <= dia && users.first.tipoUsuario == "PF"){
  117. _navKey.currentState!.pushReplacement(MaterialPageRoute(
  118. builder: (context) => HomePage(fcmToken: _tokenFCM),
  119. ));
  120. }else{
  121. _navKey.currentState!.pushReplacement(MaterialPageRoute(
  122. builder: (context) => LoginPage(
  123. fcmToken: _tokenFCM,
  124. rememberSession: false,
  125. ),
  126. ));
  127. }
  128. }
  129. }else{
  130. _navKey.currentState!.pushReplacement(MaterialPageRoute(
  131. builder: (context) => LoginPage(
  132. fcmToken: _tokenFCM,
  133. rememberSession: false,
  134. )
  135. ));
  136. }
  137. });
  138. });
  139. });
  140. }
  141. });
  142. }
  143. @override
  144. Widget build(BuildContext context) {
  145. return Provider(
  146. child: MaterialApp(
  147. navigatorKey: _navKey,
  148. debugShowCheckedModeBanner: false,
  149. title: "Plataforma Educativa",
  150. home: const LoadPage(),
  151. localizationsDelegates: const [
  152. GlobalMaterialLocalizations.delegate,
  153. GlobalWidgetsLocalizations.delegate,
  154. ],
  155. supportedLocales: const [
  156. Locale('en'),
  157. Locale('es'),
  158. ],
  159. locale: const Locale('es'),
  160. ),
  161. );
  162. }
  163. }