Author SHA1 Message Date
Ali b6b596f4fb Puuush
Puuush it! PUUUUUSH IT
2024-11-21 16:10:22 +01:00
34 changed files with 217 additions and 2290 deletions
+3 -3
View File
@@ -11,12 +11,12 @@ android {
ndkVersion = flutter.ndkVersion ndkVersion = flutter.ndkVersion
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_1_8
} }
kotlinOptions { kotlinOptions {
jvmTarget = 17 jvmTarget = JavaVersion.VERSION_1_8
} }
defaultConfig { defaultConfig {
+1 -1
View File
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
+2 -2
View File
@@ -18,8 +18,8 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.3.2" apply false id "com.android.application" version "8.1.0" apply false
id "org.jetbrains.kotlin.android" version "2.0.20" apply false id "org.jetbrains.kotlin.android" version "1.8.22" apply false
} }
include ":app" include ":app"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

-3
View File
@@ -1,3 +0,0 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
+110 -127
View File
@@ -1,33 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mensaapp/providers/ambienteProvider.dart'; import 'package:google_nav_bar/google_nav_bar.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/pageProvider.dart';
import 'package:mensaapp/providers/serviceProvider.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:async';
import 'package:supabase_flutter/supabase_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: "http://192.168.2.229:8000",
anonKey: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE",
);
var supabase = Supabase.instance.client;
/*
var test = await supabase.from('flutter').insert(
{"rating": {"huhu" : "Fuuuuck uuuuuu if this works"}}
);
*/
void main() {
runApp(const MyApp()); runApp(const MyApp());
} }
@@ -41,31 +18,18 @@ class MyApp extends StatelessWidget {
providers: [ providers: [
ChangeNotifierProvider( ChangeNotifierProvider(
create: (context) => PageProvider(), create: (context) => PageProvider(),
<<<<<<< Updated upstream
=======
), ),
ChangeNotifierProvider( ChangeNotifierProvider(
create: (context) => EssenProvider(), create: (context) => EssenProvider(),
), ),
ChangeNotifierProvider(
create: (context) => ServiceProvider(),
),
ChangeNotifierProvider(
create: (context) => AmbienteProvider(),
),
ChangeNotifierProvider(
create: (context) => AnmerkungProvider(),
),
ChangeNotifierProvider( ChangeNotifierProvider(
create: (context) => SpezielleErnaehrungProvider(), create: (context) => SpezielleErnaehrungProvider(),
), >>>>>>> Stashed changes
ChangeNotifierProvider(
create: (context) => LanguageProvider(),
),
ChangeNotifierProvider(
create: (context) => SpaceProvider(),
) )
], ],
child: MaterialApp( child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData( theme: ThemeData(
colorScheme: const ColorScheme( colorScheme: const ColorScheme(
primary: Color.fromRGBO(236, 92, 61, 1), primary: Color.fromRGBO(236, 92, 61, 1),
@@ -86,98 +50,117 @@ class MyApp extends StatelessWidget {
} }
} }
var lastTimeClick = DateTime.now();
var secondsTimeOut = 80; //80
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) {
Timer.periodic( return Scaffold(
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).popUntil((route) => route.isFirst);
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");
} else if (clickDiff >= secondsTimeOut - 30 && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) {
if (!popupOpen) {
_showTimeOverDialog(context);
_showTimeOverDialog(context);
}
}
if (Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 0) { appBar: AppBar(
popupOpen = false; leading: IconButton(
} icon: Icon(
}, Icons.home,
); size: 36,
color: Theme.of(context).colorScheme.onPrimary,
return Consumer<SpaceProvider>(builder: (context, spaceProvider, child) { ),
return Listener( onPressed: () {
onPointerDown: (event) { // Aktion für diesen Button
lastTimeClick = DateTime.now(); },
),
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(
pageProvider.titleString[pageProvider.selectedPage], // 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: Image.asset(
'assets/flags/de.png',
width: 34,
height: 24,
fit: BoxFit.cover,
), // Erster Button rechts
onPressed: () {
// Aktion für diesen Button
},
),
IconButton(
icon: Image.asset(
'assets/flags/fr.png',
width: 34,
height: 24,
fit: BoxFit.cover,
), // Zweiter Button rechts
onPressed: () {
// Aktion für diesen Button
},
),
IconButton(
icon: Image.asset(
'assets/flags/en.png',
width: 34,
height: 24,
fit: BoxFit.cover,
), // Dritter Button rechts
onPressed: () {
// Aktion für diesen Button
},
),
],
),
body: Consumer<PageProvider>(
builder: (context, pageProvider, child) {
return pageProvider.pages[pageProvider.selectedPage];
}, },
child: spaceProvider.spaces[spaceProvider.selectedSpace], ),
); bottomNavigationBar: Padding(
}); padding: EdgeInsets.all(5),
child: GNav(
onTabChange: (index) {
Provider.of<PageProvider>(context, listen: false).changePage(index);
},
gap: 8,
style: GnavStyle.google,
backgroundColor: Theme.of(context).colorScheme.surface,
color: Theme.of(context).colorScheme.onSurface,
activeColor: Theme.of(context).colorScheme.onPrimary,
tabBackgroundColor: Theme.of(context).colorScheme.primary,
tabs: const [
GButton(
icon: Icons.fastfood_outlined,
text: "Essen",
),GButton(
icon: Icons.landscape,
text: "Ambiente",
),GButton(
icon: Icons.mood,
text: "Service",
),GButton(
icon: Icons.feedback,
text: "Anmerkungen",
), GButton(
icon: Icons.grass,
text: "Spezielle Ernährung",
),
],
),
),
);
} }
} }
-34
View File
@@ -1,34 +0,0 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
class SpeechDetect {
Future<String> prompt(String prompt) async {
http.Response resp = await http.post(
Uri.parse(
"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=AIzaSyC9f3vPVuWAajpZEos35F8F5LaxcpcdlO4"),
headers: {
"content-type": "application/json"
},
body: jsonEncode({
"contents": [
{
"parts": [
{
"text": "just answer with yes or no: is this text offensive: \"$prompt\""
}
]
}
]
})
);
var js = await jsonDecode(resp.body);
var answer = js["candidates"][0]["content"]["parts"][0]["text"];
print(answer);
return answer;
}
}
View File
-181
View File
@@ -1,181 +0,0 @@
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart';
import 'package:mensaapp/providers/serviceProvider.dart';
import 'package:mensaapp/providers/ambienteProvider.dart';
import 'package:mensaapp/providers/anmerkungProvider.dart';
import 'package:mensaapp/providers/essenProvider.dart';
import '../providers/pageProvider.dart';
import '../providers/languageProvider.dart';
import 'package:mensaapp/providers/spaceProvider.dart';
class DatabaseService {
final SupabaseClient supabase = Supabase.instance.client;
void getAllRatings(BuildContext context) {
var serviceProvider = Provider.of<ServiceProvider>(context, listen: false);
var essenProvider = Provider.of<EssenProvider>(context, listen: false);
var speziellerProvider = Provider.of<SpezielleErnaehrungProvider>(context, listen: false);
var pageProvider = Provider.of<PageProvider>(context, listen: false);
var essenData = {
"q1": essenProvider.ratingQuali,
"q2": essenProvider.ratingGeschmack,
"t1": essenProvider.freiText,
"food": pageProvider.selectedEssenName
};
var serviceData = {
"q1": serviceProvider.ratingFrage1,
"q2": serviceProvider.ratingFrage2,
"t1": serviceProvider.freiText
};
var speziellerData = {
"q1": speziellerProvider.frage1,
"q2": speziellerProvider.frage2,
"t1": speziellerProvider.freiText
};
var sendData = {
"page1": {
"q1": 0,
"q2": 0,
"t1": "",
"food": ""
},
"page2": {
"q1": 0,
"q2": 0,
"t1": ""
},
"page3": {
"q1": 0,
"q2": 0,
"t1": ""
}
};
var jsonArray = [serviceData, essenData, speziellerData];
for (var element in jsonArray) {
var exists = checkIfRatingExists(element);
if (exists) {
if (element == essenData) {
sendData["page1"] = element;
} else if (element == serviceData) {
sendData["page2"] = element;
} else if (element == speziellerData) {
sendData["page3"] = element;
}
}
}
print(sendData);
_showConfirmationDialog(context, sendData);
}
bool checkIfRatingExists(Map<String, dynamic> myJson) {
return !myJson.values.any((value) => value == 0);
}
Future<void> sendDataToSupabase(Map<String, dynamic> data) async {
try {
final response = await supabase.from('ratings_database').insert({"ratings": data});
print("Antwort von Supabase: $response");
if (response == null) {
throw Exception("Antwort von Supabase ist null");
}
if (response['error'] != null) {
throw Exception("Supabase-Fehler: ${response['error']}");
}
print("Daten erfolgreich gesendet: ${response['data']}");
} catch (error) { //vielleicht überarbeiten? Pop Up mit "Admin verständigen"
print("Fehler beim Senden der Daten: $error");
}
}
void _showConfirmationDialog(BuildContext context, data) {
String formatData(Map<String, dynamic> pageData, String title) {
if (pageData['q1'] != 0 && pageData['q2'] != 0) {
String foodLine = pageData.containsKey('food') ? "- ${pageData['food']}\n" : "";
return "$title:\n"
"$foodLine"
"- Frage 1: ${pageData['q1'].toInt()}/5 Sterne\n"
"- Frage 2: ${pageData['q2'].toInt()}/5 Sterne\n"
"- Freitext: ${pageData['t1']}\n\n";
}
return "$title: Nicht bewertet\n\n";
}
bool allUnrated = data.values.every((pageData) => pageData['q1'] == 0 && pageData['q2'] == 0 && (pageData['t1'] ?? "").isEmpty);
String dialogContent =
formatData(data["page1"], "Essen") +
formatData(data["page2"], "Service") +
formatData(data["page3"], "Spezielle Nahrung");
showDialog(
context: context,
builder: (BuildContext dialogContext) {
return AlertDialog(
title: Text("Bestätigung"),
content: SizedBox(
width: MediaQuery.of(context).size.width * 0.6,
height: MediaQuery.of(context).size.height * 0.3,
child: SingleChildScrollView(
child: Text(
dialogContent,
style: TextStyle(fontSize: 18),
),
),
),
actions: [
ElevatedButton(
onPressed: () {
Navigator.of(dialogContext).pop(); // Abbrechen
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary),
child: Text("Abbrechen"),
),
ElevatedButton(
onPressed: allUnrated
? null // Button deaktivieren
: () async {
Navigator.of(dialogContext).pop(); // Dialog schließen
await sendDataToSupabase(data);
Provider.of<EssenProvider>(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");
Provider.of<PageProvider>(context, listen: false).changePage(0);
},
style: ElevatedButton.styleFrom(
backgroundColor: allUnrated
? Colors.grey // Button farblich anzeigen, wenn deaktiviert
: Theme.of(context).primaryColor,
),
child: Text("Absenden",
style: TextStyle(
decoration: allUnrated ? TextDecoration.lineThrough : null,
color: allUnrated ? Colors.black54 : Theme.of(context).colorScheme.secondary)
),
),
],
);
},
);
}
}
-83
View File
@@ -1,83 +0,0 @@
import 'dart:convert';
import 'dart:io';
import 'package:xml/xml.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
class FetchMenu {
static var lastFetch = DateTime.now();
static var fetched = false;
static Future<List<String>> get() async {
List<String> menus = [];
if (!fetched || DateTime.now().difference(lastFetch).inHours >= 2) {
menus = await fromRequest();
fetched = true;
} else {
menus = await fromCache();
}
return menus;
}
static Future<List<String>> fromCache() async {
return await loadCache();
}
static Future<List<String>> fromRequest() async {
List<String> menus = [];
var now = DateTime.now();
var today = "${now.day.toString().padLeft(2, '0')}.${now.month.toString().padLeft(2, '0')}.${now.year}";
http.Response resp = await http.get(Uri.parse(
"https://www.swfr.de/apispeiseplan?&type=98&tx_speiseplan_pi1[apiKey]=c3841e89a2c8c301b890723ecdb786ad&tx_speiseplan_pi1[ort]=677")); //Api Key lays here, modify this shit when you have time
var xmlContent = XmlDocument.parse(utf8.decode(resp.bodyBytes));
for (var tagesplan in xmlContent.findAllElements("tagesplan")){
var datum = tagesplan.getAttribute('datum')?.trim();
if (datum == today){
for (var menu in tagesplan.findElements('menue')){
var name = menu.findElements('name').map((e) => e.text).join(", ");
menus.add(name);
}
}
}
await storeCache(menus);
lastFetch = DateTime.now();
return menus;
}
static Future<void> storeCache(List<String> menus) async {
var prefs = await SharedPreferences.getInstance();
for (var i = 0; i < 4; i++) {
prefs.setString("menuCache$i", "");
if (i < menus.length) {
prefs.setString("menuCache$i", menus[i]);
}
}
}
static Future<List<String>> loadCache() async {
var prefs = await SharedPreferences.getInstance();
List<String> menus = [];
for (var i = 0; i < 4; i++) {
var curr = prefs.getString("menuCache$i");
if (curr != "") {
menus.add(curr!);
}
}
return menus;
}
}
+4 -5
View File
@@ -2,17 +2,16 @@ import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
class RatingStars extends StatelessWidget { class RatingStars extends StatelessWidget {
const RatingStars({super.key, required this.onRate, required this.initRating}); const RatingStars({super.key, required this.onRate});
final Function onRate; final Function onRate;
final double initRating;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return RatingBar.builder( return RatingBar.builder(
initialRating: initRating, initialRating: 0,
minRating: 1, minRating: 1,
itemSize: 60, itemSize: 80,
direction: Axis.horizontal, direction: Axis.horizontal,
allowHalfRating: false, allowHalfRating: false,
itemCount: 5, itemCount: 5,
@@ -24,7 +23,7 @@ class RatingStars extends StatelessWidget {
); );
}, },
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
onRate(rating); onRate();
}, },
); );
} }
+1 -104
View File
@@ -1,113 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:provider/provider.dart';
import '../modules/ratingStars.dart';
import '../providers/ambienteProvider.dart';
class PageAmbiente extends StatelessWidget { class PageAmbiente extends StatelessWidget {
const PageAmbiente({super.key}); const PageAmbiente({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<LanguageProvider>(builder: (context, languageProvider, child){ return const Placeholder();
return Scaffold(
body: Stack(
children: [
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Ambiente.jpg"),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.2),
BlendMode.dstATop
),
)
),
),
Center(
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.8),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(80),
bottomRight: Radius.circular(80)
)
),
width: 600,
height: 400,
padding: EdgeInsets.symmetric(horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageAmbiente"]["question1"],
style: TextStyle(fontSize: 35),
),
Consumer<AmbienteProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingFrage1(value);
}, initRating: essenProvider.ratingFrage1,);
},
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageAmbiente"]["question2"],
style: TextStyle(fontSize: 35),
),
Consumer<AmbienteProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingFrage2(value);
}, initRating: essenProvider.ratingFrage2,);
},
)
],
),
const SizedBox(
height: 50,
),
Consumer<AmbienteProvider>(
builder: (context, essenProvider, child) {
return TextFormField(
initialValue: essenProvider.freiText,
onChanged: (value) {
essenProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 4,
decoration: InputDecoration(
labelText: Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["textfield"],
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15)
),
),
style: TextStyle(fontSize: 20),
);
},
)
],
),
),
),
)
],
),
);
}
);
} }
} }
+1 -106
View File
@@ -1,115 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mensaapp/providers/anmerkungProvider.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:provider/provider.dart';
import '../modules/ratingStars.dart';
class PageAnmerkungen extends StatelessWidget { class PageAnmerkungen extends StatelessWidget {
const PageAnmerkungen({super.key}); const PageAnmerkungen({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<LanguageProvider>(builder: (context, languageProvider, child) return const Placeholder();
{
return Scaffold(
body: Stack(
children: [
Container(
width: 1600,
height: 800,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Anmerkungen.jpg"),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.2), BlendMode.dstATop),
)),
),
Center(
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.8),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(80),
bottomRight: Radius.circular(80))),
padding: EdgeInsets.symmetric(horizontal: 20),
height: 400,
width: 600,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageAnmerkungen"]["question1"],
style: TextStyle(fontSize: 35),
),
Consumer<AnmerkungProvider>(
builder: (context, essenProvider, child) {
return RatingStars(
onRate: (value) {
essenProvider.setRatingFrage1(value);
},
initRating: essenProvider.ratingFrage1,
);
},
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageAnmerkungen"]["question2"],
style: TextStyle(fontSize: 35),
),
Consumer<AnmerkungProvider>(
builder: (context, essenProvider, child) {
return RatingStars(
onRate: (value) {
essenProvider.setRatingFrage2(value);
},
initRating: essenProvider.ratingFrage2,
);
},
)
],
),
const SizedBox(
height: 50,
),
Consumer<AnmerkungProvider>(
builder: (context, essenProvider, child) {
return TextFormField(
initialValue: essenProvider.freiText,
onChanged: (value) {
essenProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 4,
decoration: InputDecoration(
labelText: Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["textfield"],
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15)),
),
style: TextStyle(fontSize: 20),
);
},
)
],
),
),
),
)
],
),
);
});
} }
} }
+7 -141
View File
@@ -1,153 +1,19 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:mensaapp/modules/fetchMenu.dart';
import 'package:mensaapp/modules/ratingEmote.dart'; import 'package:mensaapp/modules/ratingEmote.dart';
import 'package:mensaapp/modules/ratingStars.dart'; import 'package:mensaapp/modules/ratingStars.dart';
import 'package:mensaapp/providers/essenProvider.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:mensaapp/providers/pageProvider.dart';
import 'package:provider/provider.dart';
class PageEssen extends StatelessWidget { class PageEssen extends StatelessWidget {
const PageEssen({super.key}); const PageEssen({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final FocusNode _focus = FocusNode(); return Center(
child: Column(
return Consumer<LanguageProvider>(builder: (context, languageProvider, child){ children: [
return GestureDetector( RatingStars(onRate: () {})
onTap: () { ],
_focus.unfocus(); ),
}, );
child: Scaffold(
body: Stack(
children: [
// Hintergrundbild
Center(
child: Container(
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Essen.jpg"),
fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.6),
BlendMode.dstATop,
),
),
),
),
),
// Vordergrundinhalte
Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer<PageProvider>(
builder: (context, pageProvider, child) {
return Text(
pageProvider.selectedEssenName,
style: TextStyle(fontSize: 40, fontWeight: FontWeight.bold),
);
},
),
const SizedBox(
height: 30,
),
Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.9),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(80),
bottomRight: Radius.circular(80))),
height: 400,
width: 600,
padding: EdgeInsets.symmetric(horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageEssen"]["question1"],
style: TextStyle(fontSize: 35),
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return RatingStars(
onRate: (value) {
essenProvider.setRatingGeschmack(value);
},
initRating: essenProvider.ratingGeschmack,
);
},
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageEssen"]["question2"],
style: TextStyle(fontSize: 35),
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return RatingStars(
onRate: (value) {
essenProvider.setRatingQuali(value);
},
initRating: essenProvider.ratingQuali,
);
},
)
],
),
const SizedBox(
height: 50,
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return TextFormField(
initialValue: essenProvider.freiText,
onChanged: (value) {
essenProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 4,
focusNode: _focus,
decoration: InputDecoration(
labelText: Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["textfield"],
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15),
),
),
onFieldSubmitted: (value) {
Navigator.pop(context);
},
style: TextStyle(fontSize: 20),
);
},
),
],
),
),
],
),
),
),
],
),
),
);
});
} }
} }
-67
View File
@@ -1,67 +0,0 @@
import 'package:flutter/material.dart';
import 'package:mensaapp/modules/fetchMenu.dart';
import 'package:mensaapp/providers/pageProvider.dart';
import 'package:provider/provider.dart';
class PageEssenSelect extends StatelessWidget {
const PageEssenSelect({super.key});
@override
Widget build(BuildContext context) {
List<String> menus = [];
Future<void> fetchMenu() async {
menus = await FetchMenu.get();
}
return FutureBuilder(
future: fetchMenu(),
builder: (context, snapshot) {
return Scaffold(
body: Stack(
children: [
Center(
child: Container(
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Essen.jpg"),
fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.6),
BlendMode.dstATop,
),
),
),
),
),
Center(
child: Container(
child: Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.center,
runSpacing: 50,
spacing: 50,
children: [
for (int i = 0; i < menus.length; i++)
FilledButton.icon(
style: ButtonStyle(padding: WidgetStatePropertyAll(EdgeInsets.all(40))),
icon: const Icon(Icons.fastfood_outlined),
label: Text("Essen ${i + 1}: ${menus[i]}", style: TextStyle(fontSize: 24),),
onPressed: () {
Provider.of<PageProvider>(context, listen: false).setSelectedEssen(i + 1, "Essen ${i + 1}: ${menus[i]}");
},
)
],
),
),
)
],
),
);
},
);
}
}
+1 -115
View File
@@ -1,124 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:mensaapp/providers/serviceProvider.dart';
import 'package:provider/provider.dart';
import '../modules/ratingStars.dart';
class PageService extends StatelessWidget { class PageService extends StatelessWidget {
const PageService({super.key}); const PageService({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final FocusNode _focus = FocusNode(); return const Placeholder();
return Consumer<LanguageProvider>(builder: (context, languageProvider, child){
return GestureDetector(
onTap: () {
_focus.unfocus();
},
child: Scaffold(
body: Stack(
children: [
Center(
child: Container(
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Service.jpg"),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.6),
BlendMode.dstATop
),
)
),
),
),
Center(
child: SingleChildScrollView(
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.9),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(80),
bottomRight: Radius.circular(80)
)
),
width: 600,
height: 400,
padding: EdgeInsets.symmetric(horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageService"]["question1"],
style: TextStyle(fontSize: 35),
),
Consumer<ServiceProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingFrage1(value);
}, initRating: essenProvider.ratingFrage1,);
},
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageService"]["question2"],
style: TextStyle(fontSize: 35),
),
Consumer<ServiceProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingFrage2(value);
}, initRating: essenProvider.ratingFrage2,);
},
)
],
),
const SizedBox(
height: 50,
),
Consumer<ServiceProvider>(
builder: (context, essenProvider, child) {
return TextFormField(
initialValue: essenProvider.freiText,
onChanged: (value) {
essenProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 4,
focusNode: _focus,
decoration: InputDecoration(
labelText: Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["textfield"],
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15)
),
),
style: TextStyle(fontSize: 20),
);
},
)
],
),
),
),
)
],
),
),
);
});
} }
} }
+67 -113
View File
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:mensaapp/modules/ratingEmote.dart'; import 'package:mensaapp/modules/ratingEmote.dart';
import 'package:mensaapp/modules/ratingStars.dart'; import 'package:mensaapp/modules/ratingStars.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart'; import 'package:mensaapp/providers/spezielleErnaehrungProvider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -12,121 +11,76 @@ class PageSpezielleErnaehrung extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final FocusNode _focus = FocusNode(); return Center(
child: Container(
return Consumer<LanguageProvider>(builder: (context, languageProvider, child) { width: 800,
return GestureDetector( child: Column(
onTap: () { crossAxisAlignment: CrossAxisAlignment.center,
_focus.unfocus(); mainAxisAlignment: MainAxisAlignment.center,
}, children: [
child: Scaffold( const SizedBox(
body: Stack( height: 50,
children: [ ),
Center( Row(
child: Container( mainAxisAlignment: MainAxisAlignment.spaceBetween,
width: MediaQuery.of(context).size.width * 0.8, children: [
height: MediaQuery.of(context).size.height, const Text(
decoration: BoxDecoration( "Sitzmöglichkeit*",
image: DecorationImage( style: TextStyle(fontSize: 35),
image: AssetImage("assets/backgrounds/Anmerkungen.jpg"),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.6), BlendMode.dstATop),
)),
), ),
), Consumer<SpezielleErnaehrungProvider>(
Center( builder: (context, spezielleErnaehrungProvider, child) {
child: SingleChildScrollView( return RatingStars(onRate: (value) {
child: Container( spezielleErnaehrungProvider.setRatingSitzmoeglichkeit(value);
decoration: BoxDecoration( }, initRating: spezielleErnaehrungProvider.ratingSitzmoeglichkeit,);
color: Colors.white.withOpacity(0.9), },
borderRadius: BorderRadius.only( )
topLeft: Radius.circular(80), ],
bottomRight: Radius.circular(80))), ),
width: 650, Row(
height: 450, mainAxisAlignment: MainAxisAlignment.spaceBetween,
padding: EdgeInsets.symmetric(horizontal: 20), children: [
child: Column( const Text(
crossAxisAlignment: CrossAxisAlignment.center, "Keine Ahnung*",
mainAxisAlignment: MainAxisAlignment.center, style: TextStyle(fontSize: 35),
children: [ ),
Row( Consumer<SpezielleErnaehrungProvider>(
mainAxisAlignment: MainAxisAlignment.spaceBetween, builder: (context, spezielleErnaehrungProvider, child) {
children: [ return RatingStars(onRate: (value) {
Text( spezielleErnaehrungProvider.setRatingKeineAhnung(value);
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageSpecial"]["question1"], }, initRating: spezielleErnaehrungProvider.ratingKeineAhnung,);
style: TextStyle(fontSize: 35), },
), ),
Consumer<SpezielleErnaehrungProvider>(
builder: ],
(context, spezielleErnaehrungProvider, child) { ),
return RatingStars( const SizedBox(
onRate: (value) { height: 50,
spezielleErnaehrungProvider ),
.setRatingFrage1(value); Consumer<SpezielleErnaehrungProvider>(
}, builder: (context, spezielleErnaehrungProvider, child) {
initRating: spezielleErnaehrungProvider return TextFormField(
.frage1, initialValue: spezielleErnaehrungProvider.freiText,
); onChanged: (value) {
}, spezielleErnaehrungProvider.setFreiText(value);
) },
], autofocus: false,
), maxLength: 500,
Row( maxLines: 5,
mainAxisAlignment: MainAxisAlignment.spaceBetween, decoration: InputDecoration(
children: [ labelText: "Dein Feedback (optional)",
Text( labelStyle: const TextStyle(fontSize: 20),
Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["pageSpecial"]["question2"], border: OutlineInputBorder(
style: TextStyle(fontSize: 35), borderRadius: BorderRadius.circular(15)
),
Consumer<SpezielleErnaehrungProvider>(
builder:
(context, spezielleErnaehrungProvider, child) {
return RatingStars(
onRate: (value) {
spezielleErnaehrungProvider
.setRatingFrage2(value);
},
initRating:
spezielleErnaehrungProvider.frage2,
);
},
),
],
),
const SizedBox(
height: 50,
),
Consumer<SpezielleErnaehrungProvider>(
builder: (context, spezielleErnaehrungProvider, child) {
return TextFormField(
initialValue: spezielleErnaehrungProvider.freiText,
onChanged: (value) {
spezielleErnaehrungProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 5,
focusNode: _focus,
decoration: InputDecoration(
labelText: Provider.of<LanguageProvider>(context).languageData[Provider.of<LanguageProvider>(context).language]["textfield"],
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15)),
),
style: TextStyle(fontSize: 20),
);
},
)
],
), ),
), ),
), style: TextStyle(fontSize: 20),
) );
], },
), )
],
), ),
); ),
}); );
} }
} }
-29
View File
@@ -1,29 +0,0 @@
import 'package:flutter/cupertino.dart';
class AmbienteProvider extends ChangeNotifier {
double ratingFrage1 = 0;
double ratingFrage2 = 0;
String freiText = "";
void setRatingFrage1(double rating) {
ratingFrage1 = rating;
notifyListeners();
}
void setRatingFrage2(double rating) {
ratingFrage2 = rating;
notifyListeners();
}
void setFreiText(String text) {
freiText = text;
notifyListeners();
}
void resetAllFields(){
freiText = "";
ratingFrage1 = 0;
ratingFrage2 = 0;
notifyListeners();
}
}
-29
View File
@@ -1,29 +0,0 @@
import 'package:flutter/cupertino.dart';
class AnmerkungProvider extends ChangeNotifier {
double ratingFrage1 = 0;
double ratingFrage2 = 0;
String freiText = "";
void setRatingFrage1(double rating) {
ratingFrage1 = rating;
notifyListeners();
}
void setRatingFrage2(double rating) {
ratingFrage2 = rating;
notifyListeners();
}
void setFreiText(String text) {
freiText = text;
notifyListeners();
}
void resetAllFields(){
freiText = "";
ratingFrage1 = 0;
ratingFrage2 = 0;
notifyListeners();
}
}
-29
View File
@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
class EssenProvider extends ChangeNotifier {
double ratingGeschmack = 0;
double ratingQuali = 0;
String freiText = "";
void setRatingGeschmack(double rating) {
ratingGeschmack = rating;
notifyListeners();
}
void setRatingQuali(double rating) {
ratingQuali = rating;
notifyListeners();
}
void setFreiText(String text) {
freiText = text;
notifyListeners();
}
void resetAllFields(){
freiText = "";
ratingGeschmack = 0;
ratingQuali = 0;
notifyListeners();
}
}
-154
View File
@@ -1,154 +0,0 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class LanguageProvider extends ChangeNotifier {
Map<String, dynamic> languageData = {
"de": {
"general": {
"timeOutTitle": "Bist du noch da?",
"timeOutContent": "In 30 Sekunden wird deine Bewertung verworfen",
"timeOutButton": "Ich bin da!"
},
"textfield": "Dein Feedback",
"pageAmbiente": {
"question1": "Frage1*",
"question2": "Frage2*",
},
"pageAnmerkungen": {
"question1": "Frage1*",
"question2": "Frage2*",
},
"pageEssen": {
"question1": "Geschmack*",
"question2": "Qualität*",
},
"pageHome": {
"noTimePopupTitle": "Du kannst gerade nicht bewerten!",
"noTimePopupContent":
"Du kannst nur zu den Essenszeiten zwischen 11:30 und 14:30 bewerten!",
"noTimePopupButton": "OK"
},
"pageService": {
"question1": "Frage1*",
"question2": "Frage2*",
},
"pageSpecial": {
"question1": "Frage1*",
"question2": "Frage2*",
},
"navBar": {"0": "Essen", "1": "Service", "2": "Essenswünsche"},
"floating": {
"info": "* Pflichtfeld",
"return": "Absenden",
"delete": {
"title": "Bewertungen löschen",
"info": "Möchtest du alle Eingaben entfernen?",
"keep": "Behalten",
"del": "Löschen"
}
}
},
"en": {
"general": {
"timeOutTitle": "Are you still there?",
"timeOutContent": "Your assessment will be discarded in 30 seconds",
"timeOutButton": "I'm here!"
},
"textfield": "Your Feedback",
"pageAmbiente": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageAnmerkungen": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageEssen": {
"question1": "Taste*",
"question2": "Quality*",
},
"pageHome": {
"noTimePopupTitle": "You cannot rate right now!",
"noTimePopupContent":
"You can only rate during meal times between 11:30 AM and 2:30 PM!",
"noTimePopupButton": "OK"
},
"pageService": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageSpecial": {
"question1": "Question1*",
"question2": "Question2*",
},
"navBar": {"0": "Food", "1": "Service", "2": "Food Requests"},
"floating": {
"info": "* Required field",
"return": "Submit",
"delete": {
"title": "Delete Reviews",
"info": "Do you want to remove all entries?",
"keep": "Keep",
"del": "Delete"
}
}
},
"fr": {
"general": {
"timeOutTitle": "Êtes-vous toujours là ?",
"timeOutContent": "Votre évaluation sera supprimée dans 30 secondes",
"timeOutButton": "Je suis là !"
},
"textfield": "Votre avis",
"pageAmbiente": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageAnmerkungen": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageEssen": {
"question1": "Goût*",
"question2": "Qualité*",
},
"pageHome": {
"noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !",
"noTimePopupContent":
"Vous ne pouvez évaluer que pendant les heures de repas entre 11h30 et 14h30 !",
"noTimePopupButton": "D'ACCORD"
},
"pageService": {
"question1": "Question1*",
"question2": "Question2*",
},
"pageSpecial": {
"question1": "Question1*",
"question2": "Question2*",
},
"navBar": {
"0": "Nourriture",
"1": "Service",
"2": "Demandes De Nourriture"
},
"floating": {
"info": "* Champ obligatoire",
"return": "Envoyer",
"delete": {
"title": "Supprimer les avis",
"info": "Voulez-vous supprimer toutes les entrées ?",
"keep": "Garder",
"del": "Supprimer"
}
}
}
};
String language = "de";
void setLanguage(String newLanguage) {
language = newLanguage;
notifyListeners();
}
}
+11 -18
View File
@@ -1,37 +1,30 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mensaapp/pages/pageAmbiente.dart'; import 'package:mensaapp/pages/pageAmbiente.dart';
import 'package:mensaapp/pages/pageEssen.dart'; import 'package:mensaapp/pages/pageEssen.dart';
import 'package:mensaapp/pages/pageEssenSelect.dart';
import 'package:mensaapp/pages/pageService.dart'; import 'package:mensaapp/pages/pageService.dart';
import 'package:mensaapp/pages/pageAnmerkungen.dart'; import 'package:mensaapp/pages/pageAnmerkungen.dart';
import 'package:mensaapp/pages/pageSpezielleErnaehrung.dart'; import 'package:mensaapp/pages/pageSpezielleErnaehrung.dart';
class PageProvider extends ChangeNotifier { class PageProvider extends ChangeNotifier {
int selectedPage = 0; int selectedPage = 0;
int selectedEssenID = 0;
String selectedEssenName = "";
List<Widget> pages = [ List<Widget> pages = [
const PageEssenSelect(), const PageEssen(),
const PageAmbiente(),
const PageService(), const PageService(),
const PageAnmerkungen(),
const PageSpezielleErnaehrung() const PageSpezielleErnaehrung()
]; ];
List<String> titleString = [
"Essen",
"Ambiente",
"Service",
"Anmerkungen",
"Spezielle Ernährung"
];
void changePage(int index) { void changePage(int index) {
selectedPage = index; selectedPage = index;
notifyListeners(); notifyListeners();
} }
void setSelectedEssen(int id, String name) {
selectedEssenName = name;
selectedEssenID = id;
pages[0] = const PageEssen();
notifyListeners();
}
void resetSelectedEssen() {
selectedEssenName = "";
selectedEssenID = 0;
pages[0] = const PageEssenSelect();
notifyListeners();
}
} }
-29
View File
@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
class ServiceProvider extends ChangeNotifier {
double ratingFrage1 = 0;
double ratingFrage2 = 0;
String freiText = "";
void setRatingFrage1(double rating) {
ratingFrage1 = rating;
notifyListeners();
}
void setRatingFrage2(double rating) {
ratingFrage2 = rating;
notifyListeners();
}
void setFreiText(String text) {
freiText = text;
notifyListeners();
}
void resetAllFields(){
freiText = "";
ratingFrage1 = 0;
ratingFrage2 = 0;
notifyListeners();
}
}
-17
View File
@@ -1,17 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:mensaapp/spaces/spaceHome.dart';
import 'package:mensaapp/spaces/spaceRate.dart';
class SpaceProvider extends ChangeNotifier {
var selectedSpace = 0;
var spaces = [
const SpaceHome(),
const SpaceRate()
];
void setSelectedSpace(int index) {
selectedSpace = index;
notifyListeners();
}
}
+6 -13
View File
@@ -2,17 +2,17 @@ import 'package:flutter/material.dart';
class SpezielleErnaehrungProvider extends ChangeNotifier { class SpezielleErnaehrungProvider extends ChangeNotifier {
double frage1 = 0; double ratingSitzmoeglichkeit = 0;
double frage2 = 0; double ratingKeineAhnung = 0;
String freiText = ""; String freiText = "";
void setRatingFrage1(double rating) { void setRatingSitzmoeglichkeit(double rating) {
frage1 = rating; ratingSitzmoeglichkeit = rating;
notifyListeners(); notifyListeners();
} }
void setRatingFrage2(double rating) { void setRatingKeineAhnung(double rating) {
frage2 = rating; ratingKeineAhnung = rating;
notifyListeners(); notifyListeners();
} }
@@ -20,11 +20,4 @@ class SpezielleErnaehrungProvider extends ChangeNotifier {
freiText = text; freiText = text;
notifyListeners(); notifyListeners();
} }
void resetAllFields(){
freiText = "";
frage1 = 0;
frage2 = 0;
notifyListeners();
}
} }
-170
View File
@@ -1,170 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:mensaapp/providers/languageProvider.dart';
import 'package:mensaapp/providers/spaceProvider.dart';
import 'package:provider/provider.dart';
class SpaceHome extends StatefulWidget {
const SpaceHome({super.key});
@override
State<SpaceHome> createState() => _SpaceHomeState();
}
class _SpaceHomeState extends State<SpaceHome> {
//TODO: in languageProvider
var tempTexts = [
"Bewerte jetzt deine DHBW-Kantine...",
"Rate your DHBW canteen now...",
"Évaluez votre cantine DHBW maintenant..."
];
//TODO: END-TODO
late Timer _timer;
late String text = "";
var index = 1;
var indexMap = {0: "fr", 1: "de", 2: "en"};
@override
void initState() {
text = tempTexts[0];
super.initState();
_timer = Timer.periodic(
const Duration(seconds: 5),
(timer) {
setState(() {
text = tempTexts[index];
index = (index + 1 >= tempTexts.length ? 0 : index + 1);
});
},
);
}
@override
void dispose() {
_timer.cancel();
super.dispose();
}
// only for test
var disableRateTimeDebug = true;
// end only for test
void _showNotRateTimeDialog(BuildContext context) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
title: Text(
Provider.of<LanguageProvider>(context, listen: false)
.languageData[indexMap[index]]["pageHome"]["noTimePopupTitle"],
style: TextStyle(fontSize: 25),
),
content: Text(
Provider.of<LanguageProvider>(context, listen: false)
.languageData[indexMap[index]]["pageHome"]
["noTimePopupContent"],
style: TextStyle(fontSize: 20),
),
actions: [
FilledButton(
child: Text(
Provider.of<LanguageProvider>(context, listen: false)
.languageData[indexMap[index]]["pageHome"]
["noTimePopupButton"],
style: TextStyle(fontSize: 17),
),
onPressed: () {
if (disableRateTimeDebug) {
Provider.of<SpaceProvider>(context, listen: false)
.setSelectedSpace(1);
}
Navigator.of(context).pop();
},
)
],
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onTap: () {
var now = TimeOfDay.now();
int startHour = 11;
int endHour = 14;
if (now.hour == startHour && now.minute <= 30 ||
now.hour < startHour ||
now.hour == endHour && now.minute >= 30 ||
now.hour >= endHour + 1) {
_showNotRateTimeDialog(context);
} else {
Provider.of<SpaceProvider>(context, listen: false)
.setSelectedSpace(1);
}
},
child: Stack(
children: [
Center(
child: Container(
width: 1600,
height: 750,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/backgrounds/Essen.jpg"),
fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab
colorFilter: ColorFilter.mode(
Colors.white.withOpacity(0.2),
BlendMode.dstATop,
),
),
),
),
),
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
text,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 70,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary),
),
const SizedBox(
height: 40,
),
Icon(
Icons.touch_app,
size: 150,
color: Colors.black.withOpacity(0.5),
),
SizedBox(
height: 50,
),
Text(
"11:30 - 14:30",
style: TextStyle(fontSize: 40),
),
],
),
),
],
),
),
);
}
}
-279
View File
@@ -1,279 +0,0 @@
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"],
),
],
),
),
),
);
});
}
}
View File
+2 -431
View File
@@ -1,38 +1,6 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
app_links:
dependency: transitive
description:
name: app_links
sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99
url: "https://pub.dev"
source: hosted
version: "6.3.2"
app_links_linux:
dependency: transitive
description:
name: app_links_linux
sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81
url: "https://pub.dev"
source: hosted
version: "1.0.3"
app_links_platform_interface:
dependency: transitive
description:
name: app_links_platform_interface
sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
app_links_web:
dependency: transitive
description:
name: app_links_web
sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555
url: "https://pub.dev"
source: hosted
version: "1.0.4"
async: async:
dependency: transitive dependency: transitive
description: description:
@@ -73,14 +41,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.18.0" version: "1.18.0"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -97,22 +57,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
file:
dependency: transitive
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
version: "7.0.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@@ -139,19 +83,6 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
functions_client:
dependency: transitive
description:
name: functions_client
sha256: "61597ed93be197b1be6387855e4b760e6aac2355fcfc4df6d20d2b4579982158"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
google_nav_bar: google_nav_bar:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -160,46 +91,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.7" version: "5.0.7"
gotrue:
dependency: transitive
description:
name: gotrue
sha256: b9541c62edc0ee1fddf2c95364251b8076a93bcdbc3ad27f14a633d187e89ccc
url: "https://pub.dev"
source: hosted
version: "2.11.0"
gtk:
dependency: transitive
description:
name: gtk
sha256: e8ce9ca4b1df106e4d72dad201d345ea1a036cc12c360f1a7d5a758f78ffa42c
url: "https://pub.dev"
source: hosted
version: "2.1.0"
http:
dependency: "direct main"
description:
name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.dev"
source: hosted
version: "1.2.2"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
jwt_decode:
dependency: transitive
description:
name: jwt_decode
sha256: d2e9f68c052b2225130977429d30f187aa1981d789c76ad104a32243cfdebfbb
url: "https://pub.dev"
source: hosted
version: "0.3.1"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
@@ -232,14 +123,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.0" version: "4.0.0"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.3.0"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@@ -264,14 +147,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.15.0" version: "1.15.0"
mime:
dependency: transitive
description:
name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
nested: nested:
dependency: transitive dependency: transitive
description: description:
@@ -288,86 +163,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.0" version: "1.9.0"
path_provider:
dependency: transitive
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: "8c4967f8b7cb46dc914e178daa29813d83ae502e0529d7b0478330616a691ef7"
url: "https://pub.dev"
source: hosted
version: "2.2.14"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
url: "https://pub.dev"
source: hosted
version: "2.4.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
version: "2.3.0"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
version: "6.0.2"
platform:
dependency: transitive
description:
name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
postgrest:
dependency: transitive
description:
name: postgrest
sha256: "9f759ac497a24839addbed69d9569ea6d51d2e4834c672b8c2a73752fb6945c8"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -376,86 +171,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.2" version: "6.1.2"
realtime_client:
dependency: transitive
description:
name: realtime_client
sha256: "173c3dc40922bb0ae19a558ae1a0acf7b28ec8a458b54390c499bbe5ff15f049"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
retry:
dependency: transitive
description:
name: retry
sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
rxdart:
dependency: transitive
description:
name: rxdart
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
url: "https://pub.dev"
source: hosted
version: "0.28.0"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
url: "https://pub.dev"
source: hosted
version: "2.4.2"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -477,14 +192,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.1" version: "1.11.1"
storage_client:
dependency: transitive
description:
name: storage_client
sha256: "833666edcd804aaf434f3b13165fd553a8c6371a488618a58be8914856795c04"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
@@ -501,22 +208,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
supabase:
dependency: transitive
description:
name: supabase
sha256: ecdfb226c483f05fd10425304de744144dfdda2f33d14151d2604cebe8c6d077
url: "https://pub.dev"
source: hosted
version: "2.6.0"
supabase_flutter:
dependency: "direct main"
description:
name: supabase_flutter
sha256: bdbc6770e0e91db0b9d931f41ea4ee311d8819f539743f47e8cc795b492be75a
url: "https://pub.dev"
source: hosted
version: "2.8.1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@@ -533,78 +224,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.2" version: "0.7.2"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.4.0"
url_launcher:
dependency: transitive
description:
name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
url: "https://pub.dev"
source: hosted
version: "6.3.1"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
url: "https://pub.dev"
source: hosted
version: "6.3.14"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
url: "https://pub.dev"
source: hosted
version: "6.3.1"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@@ -621,54 +240,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.5" version: "14.2.5"
web:
dependency: transitive
description:
name: web
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.dev"
source: hosted
version: "1.1.0"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
url: "https://pub.dev"
source: hosted
version: "0.1.6"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
xml:
dependency: "direct main"
description:
name: xml
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
version: "6.5.0"
yet_another_json_isolate:
dependency: transitive
description:
name: yet_another_json_isolate
sha256: "56155e9e0002cc51ea7112857bbcdc714d4c35e176d43e4d3ee233009ff410c9"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
sdks: sdks:
dart: ">=3.5.2 <4.0.0" dart: ">=3.5.3 <4.0.0"
flutter: ">=3.24.0" flutter: ">=3.18.0-18.0.pre.54"
+1 -7
View File
@@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
sdk: ^3.5.2 sdk: ^3.5.3
# Dependencies specify other packages that your package needs in order to work. # Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions # To automatically upgrade your package dependencies to the latest versions
@@ -33,11 +33,6 @@ dependencies:
provider: ^6.1.2 provider: ^6.1.2
google_nav_bar: ^5.0.7 google_nav_bar: ^5.0.7
flutter_rating_bar: ^4.0.1 flutter_rating_bar: ^4.0.1
http: ^1.2.2
shared_preferences: ^2.3.3
xml: ^6.5.0
supabase_flutter: ^2.8.1
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.
@@ -61,7 +56,6 @@ dev_dependencies:
flutter: flutter:
assets: assets:
- assets/flags/ - assets/flags/
- assets/backgrounds/
# The following line ensures that the Material Icons font is # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in
# the material Icons class. # the material Icons class.