main.dart 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:connectivity/connectivity.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter_downloader/flutter_downloader.dart';
  6. import 'package:flutter_localizations/flutter_localizations.dart';
  7. import 'package:fluttertoast/fluttertoast.dart';
  8. import 'package:quiosco_soler/src/main_model.dart';
  9. import 'package:scoped_model/scoped_model.dart';
  10. void main() {
  11. runApp(MyApp());
  12. }
  13. class MyApp extends StatefulWidget {
  14. @override
  15. _MyAppState createState() => _MyAppState();
  16. }
  17. class _MyAppState extends State<MyApp> {
  18. Map _source = {ConnectivityResult.none: false};
  19. MyConnectivity _connectivity = MyConnectivity.instance;
  20. final GlobalKey<NavigatorState> _navigatorKey = GlobalKey<NavigatorState>();
  21. @override
  22. void initState() {
  23. super.initState();
  24. _initializeDownloader();
  25. _connectivity.initialize();
  26. _connectivity.myStream.listen((source) {
  27. _source = source;
  28. if(_source.keys.toList()[0] == ConnectivityResult.none){
  29. _navigatorKey.currentState!.pushReplacementNamed("nocon");
  30. }else{
  31. _navigatorKey.currentState!.pushReplacementNamed("tmp");
  32. }
  33. });
  34. }
  35. @override
  36. void dispose() {
  37. super.dispose();
  38. _connectivity.disposeStream();
  39. }
  40. Future<void> _initializeDownloader() async{
  41. WidgetsFlutterBinding.ensureInitialized();
  42. try{
  43. await FlutterDownloader.initialize(debug: true);
  44. }catch(_){
  45. Fluttertoast.showToast(msg: "Error al iniciar el servicio de descargas");
  46. }
  47. }
  48. @override
  49. Widget build(BuildContext context) {
  50. final MainModel _model = MainModel();
  51. return ScopedModel<MainModel>(
  52. model: _model,
  53. child: MaterialApp(
  54. navigatorKey: _navigatorKey,
  55. title: "Quiosco",
  56. debugShowCheckedModeBanner: false,
  57. initialRoute: "tmp",
  58. routes: {
  59. 'index' : (BuildContext context) => Index(),
  60. 'menini' : (BuildContext context) => MenuInicio(),
  61. 'apl' : (BuildContext context) => APL(),
  62. 'ener' : (BuildContext context) => RecuperacionEnergia(),
  63. 'home' : (BuildContext context) => HomePage(),
  64. 'secc' : (BuildContext context) => SectionsPage(),
  65. 'cate' : (BuildContext context) => CategoriesPage(),
  66. 'files' : (BuildContext context) => FilesPage(),
  67. 'search' : (BuildContext context) => SearchPage(),
  68. 'order' : (BuildContext context) => OrderPage(),
  69. 'about' : (BuildContext context) => AboutPage(),
  70. 'check' : (BuildContext context) => CheckPage(),
  71. 'sinsec' : (BuildContext context) => SingleSectionsPage(),
  72. 'sincat' : (BuildContext context) => SingleCategoriesPage(),
  73. 'memform': (BuildContext context) => FormularioPage(),
  74. 'memind' : (BuildContext context) => IndexMemoriasPage(),
  75. 'nocon' : (BuildContext context) => NoConnections(),
  76. 'tmp' : (BuildContext context) => CalculadoraAmbientalPage()
  77. },
  78. onGenerateRoute: (RouteSettings settings){
  79. return MaterialPageRoute(
  80. builder: (BuildContext context) => CheckPage(),
  81. );
  82. },
  83. theme: ThemeData(
  84. brightness: Brightness.light,
  85. primaryColor: const Color.fromRGBO(255, 0, 0, 1),
  86. splashColor: const Color.fromRGBO(180, 4, 4, 1),
  87. colorScheme: const ColorScheme.light(
  88. primary: Color.fromRGBO(180, 4, 4, 2),
  89. ).copyWith(
  90. secondary: const Color.fromRGBO(180, 4, 4, 1),
  91. ),
  92. ),
  93. localizationsDelegates: const [
  94. GlobalMaterialLocalizations.delegate
  95. ],
  96. supportedLocales: const [
  97. Locale("en"),
  98. Locale("es"),
  99. ],
  100. ),
  101. );
  102. }
  103. }
  104. class MyConnectivity{
  105. MyConnectivity._internal();
  106. static final MyConnectivity _instance = MyConnectivity._internal();
  107. static MyConnectivity get instance => _instance;
  108. Connectivity connectivity = Connectivity();
  109. StreamController controller = StreamController.broadcast();
  110. Stream get myStream => controller.stream;
  111. void initialize() async{
  112. ConnectivityResult result = await connectivity.checkConnectivity();
  113. _checkStatus(result);
  114. connectivity.onConnectivityChanged.listen((result) {
  115. _checkStatus(result);
  116. });
  117. }
  118. void _checkStatus(ConnectivityResult result) async{
  119. bool isOnline = false;
  120. try{
  121. final result = await InternetAddress.lookup("https://smart.solerpalau.mx/PR/");
  122. if(result.isNotEmpty && result[0].rawAddress.isNotEmpty){
  123. isOnline = true;
  124. }else{
  125. isOnline = false;
  126. }
  127. }on SocketException catch(_){
  128. isOnline = false;
  129. }
  130. controller.sink.add({result: isOnline});
  131. }
  132. void disposeStream() => controller.close();
  133. }