main.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import 'package:flutter/gestures.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:localstore/localstore.dart';
  4. import 'package:memorias_calculo_web/src/pages/index_page.dart';
  5. import 'package:memorias_calculo_web/src/pages/loading.dart';
  6. import 'package:memorias_calculo_web/src/pages/login.dart';
  7. import 'package:memorias_calculo_web/src/pages/not_found.dart';
  8. import 'package:memorias_calculo_web/src/pages/ventilacion_ambiental_page.dart';
  9. import 'package:memorias_calculo_web/src/pages/ventilacion_estacionamientos.dart';
  10. import 'package:memorias_calculo_web/src/pages/ventilacion_localizada_page.dart';
  11. import 'package:memorias_calculo_web/src/pages/verification.dart';
  12. import 'package:memorias_calculo_web/src/providers/validar_token_provider.dart';
  13. void main() {
  14. WidgetsFlutterBinding.ensureInitialized();
  15. runApp(const MyApp());
  16. }
  17. class MyApp extends StatefulWidget {
  18. const MyApp({Key? key}) : super(key: key);
  19. @override
  20. State<MyApp> createState() => _MyAppState();
  21. }
  22. class _MyAppState extends State<MyApp> {
  23. final db = Localstore.instance;
  24. final GlobalKey<NavigatorState> _navKey = GlobalKey<NavigatorState>();
  25. final ValidarTokenProvider _validarTokenProvider = ValidarTokenProvider();
  26. @override
  27. void initState() {
  28. super.initState();
  29. getItems();
  30. }
  31. @override
  32. Widget build(BuildContext context) {
  33. return MaterialApp(
  34. navigatorKey: _navKey,
  35. title: 'Portal de Memorias de Cálculo',
  36. debugShowCheckedModeBanner: false,
  37. scrollBehavior: ScrollRules(),
  38. theme: ThemeData(
  39. brightness: Brightness.light,
  40. primaryColor: const Color(0xFFFF0000),
  41. splashColor: const Color.fromRGBO(180, 4, 4, 1),
  42. colorScheme: const ColorScheme.light(
  43. primary: Color.fromRGBO(180, 4, 4, 1),
  44. secondary: Color.fromRGBO(180, 4, 4, 1),
  45. ),
  46. ),
  47. initialRoute: "cargando",
  48. routes: {
  49. "cargando" : (ctx) => const LoadingPage(),
  50. "404" : (ctx) => const NotFoundPage(),
  51. "login" : (ctx) => const LoginPage(),
  52. "index" : (ctx) => const IndexPage(),
  53. "ventilacionLocalizada": (ctx) => const VentilacionLocalizadaPage(),
  54. "ventilacionEstacionamientos": (ctx) => const VentilacionEstacionamientosPage(),
  55. "ventilacionAmbiental": (ctx) => const VentilacionAmbientalPage()
  56. },
  57. onGenerateRoute: (RouteSettings settings) {
  58. _navKey.currentState?.pushReplacementNamed("404");
  59. return MaterialPageRoute(builder: (ctx) => const NotFoundPage());
  60. },
  61. );
  62. }
  63. getItems() async{
  64. final items = await db.collection("login").get();
  65. if(items == null){
  66. _navKey.currentState?.pushReplacementNamed("login");
  67. }else{
  68. final lastID = items.keys.last;
  69. final info = items[lastID];
  70. final bool valido = await _validarTokenProvider.validar(info["token"]);
  71. if(valido){
  72. final verificacion = info['verificacion'];
  73. if(verificacion == "1" || verificacion == "2" || verificacion == "3"){
  74. _navKey.currentState?.pushReplacement(MaterialPageRoute(
  75. builder: (context) => VerificacionPage(
  76. correo: info['correo'],
  77. numTel: info['movil'],
  78. pais: info['pais'],
  79. verificacion: verificacion,
  80. idUsuario: info['idUsuario'],
  81. ),
  82. ));
  83. }else{
  84. final action = await _navKey.currentState?.pushReplacementNamed("index");
  85. if(action == "logout"){
  86. final items = await db.collection('login').get();
  87. items!.forEach((key, value) {
  88. db.collection('login').doc(key).delete();
  89. });
  90. _navKey.currentState?.pushNamed("login");
  91. }
  92. }
  93. }else{
  94. db.collection('login').doc(lastID).delete();
  95. _navKey.currentState?.pushReplacementNamed("login");
  96. }
  97. }
  98. }
  99. }
  100. class ScrollRules extends MaterialScrollBehavior{
  101. @override
  102. Set<PointerDeviceKind> get dragDevices => {
  103. PointerDeviceKind.touch,
  104. PointerDeviceKind.mouse
  105. };
  106. }