30 sekunden vorher kommt ein popup, wenn nciht bestätigt, löschen, popup kommt nur wenn keine interaktion mit dem tablet erfolgt
164 lines
5.5 KiB
Dart
164 lines
5.5 KiB
Dart
import 'package:flutter/material.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 'dart:async';
|
|
|
|
void main() {
|
|
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 = 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) {
|
|
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],
|
|
);
|
|
});
|
|
}
|
|
}
|