timeout nach 240 sekunden

30 sekunden vorher kommt ein popup, wenn nciht bestätigt, löschen, popup kommt nur wenn keine interaktion mit dem tablet erfolgt
This commit is contained in:
Jonas Braus
2024-11-26 16:50:58 +01:00
parent df56c82c69
commit 8552858a41
2 changed files with 125 additions and 52 deletions
+85 -9
View File
@@ -1,7 +1,4 @@
import 'dart:ffi';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_nav_bar/google_nav_bar.dart';
import 'package:mensaapp/providers/ambienteProvider.dart'; import 'package:mensaapp/providers/ambienteProvider.dart';
import 'package:mensaapp/providers/anmerkungProvider.dart'; import 'package:mensaapp/providers/anmerkungProvider.dart';
import 'package:mensaapp/providers/essenProvider.dart'; import 'package:mensaapp/providers/essenProvider.dart';
@@ -11,8 +8,7 @@ import 'package:mensaapp/providers/serviceProvider.dart';
import 'package:mensaapp/providers/spaceProvider.dart'; import 'package:mensaapp/providers/spaceProvider.dart';
import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart'; import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'dart:convert'; import 'dart:async';
import 'package:flutter/services.dart' show rootBundle;
void main() { void main() {
runApp(const MyApp()); runApp(const MyApp());
@@ -73,15 +69,95 @@ class MyApp extends StatelessWidget {
} }
} }
var lastTimeClick = DateTime.now();
var secondsTimeOut = 240;
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<LanguageProvider>(context, listen: false)
.languageData[Provider.of<LanguageProvider>(context, listen: false).language]["general"]["timeOutTitle"],
style: TextStyle(fontSize: 25),
),
content: Text(
Provider.of<LanguageProvider>(context, listen: false)
.languageData[Provider.of<LanguageProvider>(context, listen: false).language]["general"]["timeOutContent"],
style: TextStyle(fontSize: 20),
),
actions: [
FilledButton(
child: Text(
Provider.of<LanguageProvider>(context, listen: false)
.languageData[Provider.of<LanguageProvider>(context, listen: false).language]["general"]["timeOutButton"],
style: TextStyle(fontSize: 17),
),
onPressed: () {
lastTimeClick = DateTime.now();
popupOpen = false;
Navigator.of(context).pop();
},
)
],
);
},
);
}
class MyHome extends StatelessWidget { class MyHome extends StatelessWidget {
const MyHome({super.key}); const MyHome({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<SpaceProvider>( Timer.periodic(
builder: (context, spaceProvider, child) { const Duration(seconds: 5),
return spaceProvider.spaces[spaceProvider.selectedSpace]; (timer) {
} var clickDiff = DateTime.now().difference(lastTimeClick).inSeconds;
if (clickDiff >= secondsTimeOut && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) {
Navigator.of(context).pop();
Provider.of<AnmerkungProvider>(context, listen: false)
.resetAllFields();
Provider.of<EssenProvider>(context, listen: false)
.resetAllFields();
Provider.of<AmbienteProvider>(context, listen: false)
.resetAllFields();
Provider.of<ServiceProvider>(context, listen: false)
.resetAllFields();
Provider.of<SpezielleErnaehrungProvider>(context, listen: false)
.resetAllFields();
Provider.of<PageProvider>(context, listen: false)
.resetSelectedEssen();
Provider.of<SpaceProvider>(context, listen: false)
.setSelectedSpace(0);
Provider.of<LanguageProvider>(context, listen: false)
.setLanguage("de");
} else if (clickDiff >= secondsTimeOut - 30 && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) {
if (!popupOpen) {
_showTimeOverDialog(context);
}
}
if (Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 0) {
popupOpen = false;
}
},
); );
return Consumer<SpaceProvider>(builder: (context, spaceProvider, child) {
return Listener(
onPointerDown: (event) {
lastTimeClick = DateTime.now();
},
child: spaceProvider.spaces[spaceProvider.selectedSpace],
);
});
} }
} }
+40 -43
View File
@@ -4,52 +4,44 @@ import 'package:flutter/services.dart';
class LanguageProvider extends ChangeNotifier { class LanguageProvider extends ChangeNotifier {
Map<String, dynamic> languageData = { Map<String, dynamic> languageData = {
"de": "de": {
{ "general": {
"textfield": "Dein Feedback", "timeOutTitle": "Bist du noch da?",
"pageAmbiente": "timeOutContent": "In 30 Sekunden wird deine Bewertung verworfen",
{ "timeOutButton": "Ich bin da!"
},
"textfield": "Dein Feedback",
"pageAmbiente": {
"question1": "Frage1", "question1": "Frage1",
"question2": "Frage2", "question2": "Frage2",
}, },
"pageAnmerkungen": "pageAnmerkungen": {
{
"question1": "Frage1", "question1": "Frage1",
"question2": "Frage2", "question2": "Frage2",
}, },
"pageEssen": "pageEssen": {
{
"question1": "Geschmack", "question1": "Geschmack",
"question2": "Qualität", "question2": "Qualität",
}, },
"pageHome": "pageHome": {
{
"noTimePopupTitle": "Du kannst gerade nicht bewerten!", "noTimePopupTitle": "Du kannst gerade nicht bewerten!",
"noTimePopupContent": "Du kannst nur zu den Essenszeiten zwischen 11:30 und 14:30 bewerten!", "noTimePopupContent":
"Du kannst nur zu den Essenszeiten zwischen 11:30 und 14:30 bewerten!",
"noTimePopupButton": "OK" "noTimePopupButton": "OK"
}, },
"pageService": "pageService": {
{
"question1": "Frage1", "question1": "Frage1",
"question2": "Frage2", "question2": "Frage2",
}, },
"pageSpecial": "pageSpecial": {
{
"question1": "Frage1", "question1": "Frage1",
"question2": "Frage2", "question2": "Frage2",
}, },
"navBar": "navBar": {"0": "Essen", "1": "Service", "2": "Essenswünsche"},
{ "floating": {
"0": "Essen",
"1": "Service",
"2": "Essenswünsche"
},
"floating":
{
"info": "* Pflichtfeld", "info": "* Pflichtfeld",
"return": "Absenden", "return": "Absenden",
"delete": "delete": {
{
"title": "Bewertungen löschen", "title": "Bewertungen löschen",
"info": "Möchtest du alle Eingaben entfernen?", "info": "Möchtest du alle Eingaben entfernen?",
"keep": "Behalten", "keep": "Behalten",
@@ -57,10 +49,14 @@ class LanguageProvider extends ChangeNotifier {
} }
} }
}, },
"en": "en": {
{ "general": {
"textfield": "Your Feedback", "timeOutTitle": "Are you still there?",
"pageAmbiente": { "timeOutContent": "Your assessment will be discarded in 30 seconds",
"timeOutButton": "I'm here!"
},
"textfield": "Your Feedback",
"pageAmbiente": {
"question1": "Question1", "question1": "Question1",
"question2": "Question2", "question2": "Question2",
}, },
@@ -74,7 +70,8 @@ class LanguageProvider extends ChangeNotifier {
}, },
"pageHome": { "pageHome": {
"noTimePopupTitle": "You cannot rate right now!", "noTimePopupTitle": "You cannot rate right now!",
"noTimePopupContent": "You can only rate during meal times between 11:30 AM and 2:30 PM!", "noTimePopupContent":
"You can only rate during meal times between 11:30 AM and 2:30 PM!",
"noTimePopupButton": "OK" "noTimePopupButton": "OK"
}, },
"pageService": { "pageService": {
@@ -85,16 +82,11 @@ class LanguageProvider extends ChangeNotifier {
"question1": "Question1", "question1": "Question1",
"question2": "Question2", "question2": "Question2",
}, },
"navBar": { "navBar": {"0": "Food", "1": "Service", "2": "Food Requests"},
"0": "Food",
"1": "Service",
"2": "Food Requests"
},
"floating": { "floating": {
"info": "* Required field", "info": "* Required field",
"return": "Submit", "return": "Submit",
"delete": "delete": {
{
"title": "Delete Reviews", "title": "Delete Reviews",
"info": "Do you want to remove all entries?", "info": "Do you want to remove all entries?",
"keep": "Keep", "keep": "Keep",
@@ -102,10 +94,14 @@ class LanguageProvider extends ChangeNotifier {
} }
} }
}, },
"fr": "fr": {
{ "general": {
"textfield": "Votre avis", "timeOutTitle": "Êtes-vous toujours là ?",
"pageAmbiente": { "timeOutContent": "Votre évaluation sera supprimée dans 30 secondes",
"timeOutButton": "Je suis là !"
},
"textfield": "Votre avis",
"pageAmbiente": {
"question1": "Question1", "question1": "Question1",
"question2": "Question2", "question2": "Question2",
}, },
@@ -119,7 +115,8 @@ class LanguageProvider extends ChangeNotifier {
}, },
"pageHome": { "pageHome": {
"noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !", "noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !",
"noTimePopupContent": "Vous ne pouvez évaluer que pendant les heures de repas entre 11h30 et 14h30 !", "noTimePopupContent":
"Vous ne pouvez évaluer que pendant les heures de repas entre 11h30 et 14h30 !",
"noTimePopupButton": "D'ACCORD" "noTimePopupButton": "D'ACCORD"
}, },
"pageService": { "pageService": {