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:google_nav_bar/google_nav_bar.dart';
import 'package:mensaapp/providers/ambienteProvider.dart';
import 'package:mensaapp/providers/anmerkungProvider.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/spezielleErnaehrungProvider.dart';
import 'package:provider/provider.dart';
import 'dart:convert';
import 'package:flutter/services.dart' show rootBundle;
import 'dart:async';
void main() {
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 {
const MyHome({super.key});
@override
Widget build(BuildContext context) {
return Consumer<SpaceProvider>(
builder: (context, spaceProvider, child) {
return spaceProvider.spaces[spaceProvider.selectedSpace];
}
Timer.periodic(
const Duration(seconds: 5),
(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],
);
});
}
}