Backend Structure implemented All Ratings will be pulled and validated Pop Up notfies user about all his ratings If confirmed, data will be send to the supabase server (if any data was found) No comments were made, who else needs to read this?
280 lines
10 KiB
Dart
280 lines
10 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:google_nav_bar/google_nav_bar.dart';
|
|
import 'package:mensaapp/modules/databaseService.dart';
|
|
import 'package:mensaapp/providers/spaceProvider.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../providers/ambienteProvider.dart';
|
|
import '../providers/anmerkungProvider.dart';
|
|
import '../providers/essenProvider.dart';
|
|
import '../providers/languageProvider.dart';
|
|
import '../providers/pageProvider.dart';
|
|
import '../providers/serviceProvider.dart';
|
|
import '../providers/spezielleErnaehrungProvider.dart';
|
|
|
|
class SpaceRate extends StatelessWidget {
|
|
const SpaceRate({super.key});
|
|
|
|
void _showDeleteDialog(BuildContext context) {
|
|
showDialog(
|
|
context: context,
|
|
builder: (BuildContext 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]["floating"]["delete"]["title"]),
|
|
content: Text(
|
|
Provider.of<LanguageProvider>(context, listen: false).languageData[
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.language]["floating"]["delete"]["info"],
|
|
style: const TextStyle(fontSize: 18),
|
|
),
|
|
actions: [
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Theme.of(context).colorScheme.secondary),
|
|
child: Text(Provider.of<LanguageProvider>(context, listen: false)
|
|
.languageData[
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.language]["floating"]["delete"]["keep"]),
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
/*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<PageProvider>(context, listen: false)
|
|
.changePage(0);
|
|
Provider.of<SpaceProvider>(context, listen: false)
|
|
.setSelectedSpace(0);
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.setLanguage("de");
|
|
|
|
// Hier Aktion für Löschen ausführen
|
|
Navigator.of(context).pop(); // Dialog schließen
|
|
},
|
|
child: Text(Provider.of<LanguageProvider>(context, listen: false)
|
|
.languageData[
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.language]["floating"]["delete"]["del"]),
|
|
)
|
|
],
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Consumer<LanguageProvider>(builder: (context, languageProvider, x) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
leading: IconButton(
|
|
icon: Icon(
|
|
Icons.home_rounded,
|
|
size: 36,
|
|
color: Theme.of(context).colorScheme.onPrimary,
|
|
),
|
|
onPressed: () {
|
|
_showDeleteDialog(context);
|
|
},
|
|
),
|
|
title: Consumer<PageProvider>(
|
|
// Consumer verwenden, um den dynamischen Titel anzuzeigen
|
|
builder: (context, pageProvider, child) {
|
|
return Container(
|
|
height: 40,
|
|
decoration: BoxDecoration(
|
|
color: Theme.of(context).colorScheme.primaryContainer,
|
|
borderRadius: BorderRadius.circular(15),
|
|
),
|
|
alignment: Alignment.centerLeft,
|
|
child: Text(
|
|
languageProvider.languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["navBar"][pageProvider.selectedPage.toString()],
|
|
// Hier wird der dynamische Titel angezeigt
|
|
style: TextStyle(
|
|
color: Theme.of(context).colorScheme.onPrimary,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
backgroundColor: Theme.of(context).colorScheme.primary,
|
|
actions: [
|
|
IconButton(
|
|
icon: Opacity(
|
|
opacity: Provider.of<LanguageProvider>(context).language == "de"
|
|
? 1.0 // Voll sichtbar
|
|
: 0.4, // Halb durchsichtig
|
|
child: Image.asset(
|
|
'assets/flags/de.png',
|
|
width: 34,
|
|
height: 24,
|
|
fit: BoxFit.cover,
|
|
),
|
|
),
|
|
onPressed: () {
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.setLanguage("de");
|
|
},
|
|
),
|
|
IconButton(
|
|
icon: Opacity(
|
|
opacity: Provider.of<LanguageProvider>(context).language == "en"
|
|
? 1.0 // Voll sichtbar
|
|
: 0.4, // Halb durchsichtig
|
|
child: Image.asset(
|
|
'assets/flags/en.png',
|
|
width: 34,
|
|
height: 24,
|
|
fit: BoxFit.cover,
|
|
),
|
|
),
|
|
onPressed: () {
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.setLanguage("en");
|
|
},
|
|
),
|
|
IconButton(
|
|
icon: Opacity(
|
|
opacity: Provider.of<LanguageProvider>(context).language == "fr"
|
|
? 1.0 // Voll sichtbar
|
|
: 0.4, // Halb durchsichtig
|
|
child: Image.asset(
|
|
'assets/flags/fr.png',
|
|
width: 34,
|
|
height: 24,
|
|
fit: BoxFit.cover,
|
|
),
|
|
),
|
|
onPressed: () {
|
|
Provider.of<LanguageProvider>(context, listen: false)
|
|
.setLanguage("fr");
|
|
},
|
|
),
|
|
],
|
|
),
|
|
body: Consumer<PageProvider>(
|
|
builder: (context, pageProvider, child) {
|
|
return Stack(
|
|
children: [
|
|
pageProvider.pages[pageProvider.selectedPage],
|
|
Positioned(
|
|
left: 10,
|
|
bottom: 10,
|
|
child: IconButton.filled(
|
|
padding: const EdgeInsets.all(15),
|
|
onPressed: () {
|
|
_showDeleteDialog(context); // Dialog anzeigen
|
|
},
|
|
icon: const Icon(
|
|
Icons.delete,
|
|
size: 30,
|
|
),
|
|
style: ButtonStyle(
|
|
shape: WidgetStateProperty.all(RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(17))),
|
|
backgroundColor: WidgetStateProperty.all(
|
|
Theme.of(context).colorScheme.primary,
|
|
),
|
|
),
|
|
),
|
|
)
|
|
],
|
|
);
|
|
},
|
|
),
|
|
floatingActionButton: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Text(
|
|
Provider.of<LanguageProvider>(context).languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["floating"]["info"],
|
|
style: TextStyle(fontSize: 15),
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
FloatingActionButton.extended(
|
|
onPressed: () {
|
|
DatabaseService().getAllRatings(
|
|
context
|
|
);
|
|
|
|
/*DatabaseService.getAllRatings(
|
|
Provider.of<ServiceProvider>(context), Provider.of<EssenProvider>(context), Provider.of<SpezielleErnaehrungProvider>(context)); // Passe den Kontext an, falls nötig
|
|
*/
|
|
},
|
|
label: Text(
|
|
Provider.of<LanguageProvider>(context).languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["floating"]["return"],
|
|
style: TextStyle(fontSize: 20),
|
|
),
|
|
icon: const Icon(Icons.send),
|
|
)
|
|
],
|
|
),
|
|
bottomNavigationBar: Container(
|
|
color: Theme.of(context).colorScheme.secondary,
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(5),
|
|
child: GNav(
|
|
onTabChange: (index) {
|
|
Provider.of<PageProvider>(context, listen: false)
|
|
.changePage(index);
|
|
},
|
|
gap: 8,
|
|
style: GnavStyle.google,
|
|
backgroundColor: Colors.transparent,
|
|
color: Theme.of(context).colorScheme.onSurface,
|
|
activeColor: Theme.of(context).colorScheme.onPrimary,
|
|
tabBackgroundColor: Theme.of(context).colorScheme.primary,
|
|
tabs: [
|
|
GButton(
|
|
icon: Icons.fastfood_outlined,
|
|
text: Provider.of<LanguageProvider>(context).languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["navBar"]["0"],
|
|
),
|
|
GButton(
|
|
icon: Icons.mood,
|
|
text: Provider.of<LanguageProvider>(context).languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["navBar"]["1"],
|
|
),
|
|
GButton(
|
|
icon: Icons.favorite,
|
|
text: Provider.of<LanguageProvider>(context).languageData[
|
|
Provider.of<LanguageProvider>(context).language]
|
|
["navBar"]["2"],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
});
|
|
}
|
|
}
|