import 'package:flutter/material.dart'; import 'package:kiosk_mode/kiosk_mode.dart'; import 'package:mensaapp/providers/ambienteProvider.dart'; import 'package:mensaapp/providers/anmerkungProvider.dart'; import 'package:mensaapp/providers/essenProvider.dart'; import 'package:mensaapp/providers/languageProvider.dart'; import 'package:mensaapp/providers/pageProvider.dart'; import 'package:mensaapp/providers/serviceProvider.dart'; import 'package:mensaapp/providers/spaceProvider.dart'; import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'dart:async'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:dcdg/dcdg.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); var prefs = await SharedPreferences.getInstance(); print(prefs.getString('supabase-ip')); var backendIp = prefs.getString('supabase-ip'); var anonKey = prefs.getString("anon-key"); await startKioskMode(); if (backendIp != ''){ await Supabase.initialize( url: "$backendIp", anonKey: "$anonKey", ); } runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => PageProvider(), ), ChangeNotifierProvider( create: (context) => EssenProvider(), ), ChangeNotifierProvider( create: (context) => ServiceProvider(), ), ChangeNotifierProvider( create: (context) => AmbienteProvider(), ), ChangeNotifierProvider( create: (context) => AnmerkungProvider(), ), ChangeNotifierProvider( create: (context) => SpezielleErnaehrungProvider(), ), ChangeNotifierProvider( create: (context) => LanguageProvider(), ), ChangeNotifierProvider( create: (context) => SpaceProvider(), ) ], child: MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData( colorScheme: const ColorScheme( primary: Color.fromRGBO(236, 92, 61, 1), onPrimary: Color.fromRGBO(240, 240, 240, 1), secondary: Color.fromRGBO(203, 203, 203, 1), onSecondary: Color.fromRGBO(60, 60, 60, 1), error: Colors.red, onError: Colors.white, surface: Colors.white, onSurface: Color.fromRGBO(60, 60, 60, 1), brightness: Brightness.light, tertiary: Color.fromRGBO(251, 216, 17, 1), onTertiary: Color.fromRGBO(60, 60, 60, 1)), useMaterial3: true, ), home: const MyHome()), ); } } var lastTimeClick = DateTime.now(); var secondsTimeOut = 80; //80 var popupOpen = false; void _showTimeOverDialog(BuildContext context) { popupOpen = true; showDialog( context: context, builder: (context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), title: Text( Provider.of(context, listen: false) .languageData[Provider.of(context, listen: false).language]["general"]["timeOutTitle"], style: TextStyle(fontSize: 25), ), content: Text( Provider.of(context, listen: false) .languageData[Provider.of(context, listen: false).language]["general"]["timeOutContent"], style: TextStyle(fontSize: 20), ), actions: [ FilledButton( child: Text( Provider.of(context, listen: false) .languageData[Provider.of(context, listen: false).language]["general"]["timeOutButton"], style: TextStyle(fontSize: 17), ), onPressed: () { lastTimeClick = DateTime.now(); popupOpen = false; Navigator.of(context).pop(); }, ) ], ); }, ); } class MyHome extends StatelessWidget { const MyHome({super.key}); @override Widget build(BuildContext context) { Timer.periodic( const Duration(seconds: 5), (timer) { var clickDiff = DateTime.now().difference(lastTimeClick).inSeconds; if (clickDiff >= secondsTimeOut && Provider.of(context, listen: false).selectedSpace == 1) { Navigator.of(context).popUntil((route) => route.isFirst); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetSelectedEssen(); Provider.of(context, listen: false) .changePage(0); Provider.of(context, listen: false) .setSelectedSpace(0); Provider.of(context, listen: false) .setLanguage("de"); } else if (clickDiff >= secondsTimeOut - 30 && Provider.of(context, listen: false).selectedSpace == 1) { if (!popupOpen) { _showTimeOverDialog(context); _showTimeOverDialog(context); } } if (Provider.of(context, listen: false).selectedSpace == 0) { popupOpen = false; } }, ); return Consumer(builder: (context, spaceProvider, child) { return Listener( onPointerDown: (event) { lastTimeClick = DateTime.now(); }, child: spaceProvider.spaces[spaceProvider.selectedSpace], ); }); } }