Files
mensaapp/lib/spaces/spaceRate.dart
T
Ali 60eb2785ee Giga Push (it is 1:30 am and I am tired)
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?
2024-11-29 01:36:46 +01:00

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"],
),
],
),
),
),
);
});
}
}