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?
This commit is contained in:
Ali
2024-11-29 01:36:46 +01:00
parent ba79191a78
commit 60eb2785ee
9 changed files with 522 additions and 51 deletions
+23 -3
View File
@@ -9,8 +9,25 @@ 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 '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());
} }
@@ -71,7 +88,7 @@ class MyApp extends StatelessWidget {
var lastTimeClick = DateTime.now(); var lastTimeClick = DateTime.now();
var secondsTimeOut = 80; var secondsTimeOut = 80; //80
var popupOpen = false; var popupOpen = false;
void _showTimeOverDialog(BuildContext context) { void _showTimeOverDialog(BuildContext context) {
@@ -122,7 +139,7 @@ class MyHome extends StatelessWidget {
(timer) { (timer) {
var clickDiff = DateTime.now().difference(lastTimeClick).inSeconds; var clickDiff = DateTime.now().difference(lastTimeClick).inSeconds;
if (clickDiff >= secondsTimeOut && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) { if (clickDiff >= secondsTimeOut && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) {
Navigator.of(context).pop(); Navigator.of(context).popUntil((route) => route.isFirst);
Provider.of<AnmerkungProvider>(context, listen: false) Provider.of<AnmerkungProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();
Provider.of<EssenProvider>(context, listen: false) Provider.of<EssenProvider>(context, listen: false)
@@ -135,6 +152,8 @@ class MyHome extends StatelessWidget {
.resetAllFields(); .resetAllFields();
Provider.of<PageProvider>(context, listen: false) Provider.of<PageProvider>(context, listen: false)
.resetSelectedEssen(); .resetSelectedEssen();
Provider.of<PageProvider>(context, listen: false)
.changePage(0);
Provider.of<SpaceProvider>(context, listen: false) Provider.of<SpaceProvider>(context, listen: false)
.setSelectedSpace(0); .setSelectedSpace(0);
Provider.of<LanguageProvider>(context, listen: false) Provider.of<LanguageProvider>(context, listen: false)
@@ -142,6 +161,7 @@ class MyHome extends StatelessWidget {
} else if (clickDiff >= secondsTimeOut - 30 && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) { } else if (clickDiff >= secondsTimeOut - 30 && Provider.of<SpaceProvider>(context, listen: false).selectedSpace == 1) {
if (!popupOpen) { if (!popupOpen) {
_showTimeOverDialog(context); _showTimeOverDialog(context);
_showTimeOverDialog(context);
} }
} }
+181
View File
@@ -0,0 +1,181 @@
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('flutter').insert({"rating": 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");
},
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)
),
),
],
);
},
);
}
}
+4 -4
View File
@@ -63,10 +63,10 @@ class PageSpezielleErnaehrung extends StatelessWidget {
return RatingStars( return RatingStars(
onRate: (value) { onRate: (value) {
spezielleErnaehrungProvider spezielleErnaehrungProvider
.setRatingSitzmoeglichkeit(value); .setRatingFrage1(value);
}, },
initRating: spezielleErnaehrungProvider initRating: spezielleErnaehrungProvider
.ratingSitzmoeglichkeit, .frage1,
); );
}, },
) )
@@ -85,10 +85,10 @@ class PageSpezielleErnaehrung extends StatelessWidget {
return RatingStars( return RatingStars(
onRate: (value) { onRate: (value) {
spezielleErnaehrungProvider spezielleErnaehrungProvider
.setRatingKeineAhnung(value); .setRatingFrage2(value);
}, },
initRating: initRating:
spezielleErnaehrungProvider.ratingKeineAhnung, spezielleErnaehrungProvider.frage2,
); );
}, },
), ),
+30 -30
View File
@@ -12,16 +12,16 @@ class LanguageProvider extends ChangeNotifier {
}, },
"textfield": "Dein Feedback", "textfield": "Dein Feedback",
"pageAmbiente": { "pageAmbiente": {
"question1": "Frage1", "question1": "Frage1*",
"question2": "Frage2", "question2": "Frage2*",
}, },
"pageAnmerkungen": { "pageAnmerkungen": {
"question1": "Frage1", "question1": "Frage1*",
"question2": "Frage2", "question2": "Frage2*",
}, },
"pageEssen": { "pageEssen": {
"question1": "Geschmack", "question1": "Geschmack*",
"question2": "Qualität", "question2": "Qualität*",
}, },
"pageHome": { "pageHome": {
"noTimePopupTitle": "Du kannst gerade nicht bewerten!", "noTimePopupTitle": "Du kannst gerade nicht bewerten!",
@@ -30,12 +30,12 @@ class LanguageProvider extends ChangeNotifier {
"noTimePopupButton": "OK" "noTimePopupButton": "OK"
}, },
"pageService": { "pageService": {
"question1": "Frage1", "question1": "Frage1*",
"question2": "Frage2", "question2": "Frage2*",
}, },
"pageSpecial": { "pageSpecial": {
"question1": "Frage1", "question1": "Frage1*",
"question2": "Frage2", "question2": "Frage2*",
}, },
"navBar": {"0": "Essen", "1": "Service", "2": "Essenswünsche"}, "navBar": {"0": "Essen", "1": "Service", "2": "Essenswünsche"},
"floating": { "floating": {
@@ -57,16 +57,16 @@ class LanguageProvider extends ChangeNotifier {
}, },
"textfield": "Your Feedback", "textfield": "Your Feedback",
"pageAmbiente": { "pageAmbiente": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageAnmerkungen": { "pageAnmerkungen": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageEssen": { "pageEssen": {
"question1": "Taste", "question1": "Taste*",
"question2": "Quality", "question2": "Quality*",
}, },
"pageHome": { "pageHome": {
"noTimePopupTitle": "You cannot rate right now!", "noTimePopupTitle": "You cannot rate right now!",
@@ -75,12 +75,12 @@ class LanguageProvider extends ChangeNotifier {
"noTimePopupButton": "OK" "noTimePopupButton": "OK"
}, },
"pageService": { "pageService": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageSpecial": { "pageSpecial": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"navBar": {"0": "Food", "1": "Service", "2": "Food Requests"}, "navBar": {"0": "Food", "1": "Service", "2": "Food Requests"},
"floating": { "floating": {
@@ -102,16 +102,16 @@ class LanguageProvider extends ChangeNotifier {
}, },
"textfield": "Votre avis", "textfield": "Votre avis",
"pageAmbiente": { "pageAmbiente": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageAnmerkungen": { "pageAnmerkungen": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageEssen": { "pageEssen": {
"question1": "Goût", "question1": "Goût*",
"question2": "Qualité", "question2": "Qualité*",
}, },
"pageHome": { "pageHome": {
"noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !", "noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !",
@@ -120,12 +120,12 @@ class LanguageProvider extends ChangeNotifier {
"noTimePopupButton": "D'ACCORD" "noTimePopupButton": "D'ACCORD"
}, },
"pageService": { "pageService": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"pageSpecial": { "pageSpecial": {
"question1": "Question1", "question1": "Question1*",
"question2": "Question2", "question2": "Question2*",
}, },
"navBar": { "navBar": {
"0": "Nourriture", "0": "Nourriture",
@@ -2,17 +2,17 @@ import 'package:flutter/material.dart';
class SpezielleErnaehrungProvider extends ChangeNotifier { class SpezielleErnaehrungProvider extends ChangeNotifier {
double ratingSitzmoeglichkeit = 0; double frage1 = 0;
double ratingKeineAhnung = 0; double frage2 = 0;
String freiText = ""; String freiText = "";
void setRatingSitzmoeglichkeit(double rating) { void setRatingFrage1(double rating) {
ratingSitzmoeglichkeit = rating; frage1 = rating;
notifyListeners(); notifyListeners();
} }
void setRatingKeineAhnung(double rating) { void setRatingFrage2(double rating) {
ratingKeineAhnung = rating; frage2 = rating;
notifyListeners(); notifyListeners();
} }
@@ -23,8 +23,8 @@ class SpezielleErnaehrungProvider extends ChangeNotifier {
void resetAllFields(){ void resetAllFields(){
freiText = ""; freiText = "";
ratingSitzmoeglichkeit = 0; frage1 = 0;
ratingKeineAhnung = 0; frage2 = 0;
notifyListeners(); notifyListeners();
} }
} }
+2 -1
View File
@@ -50,7 +50,7 @@ class _SpaceHomeState extends State<SpaceHome> {
} }
// only for test // only for test
var disableRateTimeDebug = false; var disableRateTimeDebug = true;
// end only for test // end only for test
void _showNotRateTimeDialog(BuildContext context) { void _showNotRateTimeDialog(BuildContext context) {
@@ -138,6 +138,7 @@ class _SpaceHomeState extends State<SpaceHome> {
children: [ children: [
Text( Text(
text, text,
textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 70, fontSize: 70,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
+16 -5
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_nav_bar/google_nav_bar.dart'; import 'package:google_nav_bar/google_nav_bar.dart';
import 'package:mensaapp/modules/databaseService.dart';
import 'package:mensaapp/providers/spaceProvider.dart'; import 'package:mensaapp/providers/spaceProvider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -46,18 +47,20 @@ class SpaceRate extends StatelessWidget {
), ),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
Provider.of<AnmerkungProvider>(context, listen: false) /*Provider.of<AnmerkungProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();*/
Provider.of<EssenProvider>(context, listen: false) Provider.of<EssenProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();
Provider.of<AmbienteProvider>(context, listen: false) /*Provider.of<AmbienteProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();*/
Provider.of<ServiceProvider>(context, listen: false) Provider.of<ServiceProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();
Provider.of<SpezielleErnaehrungProvider>(context, listen: false) Provider.of<SpezielleErnaehrungProvider>(context, listen: false)
.resetAllFields(); .resetAllFields();
Provider.of<PageProvider>(context, listen: false) Provider.of<PageProvider>(context, listen: false)
.resetSelectedEssen(); .resetSelectedEssen();
Provider.of<PageProvider>(context, listen: false)
.changePage(0);
Provider.of<SpaceProvider>(context, listen: false) Provider.of<SpaceProvider>(context, listen: false)
.setSelectedSpace(0); .setSelectedSpace(0);
Provider.of<LanguageProvider>(context, listen: false) Provider.of<LanguageProvider>(context, listen: false)
@@ -213,7 +216,15 @@ class SpaceRate extends StatelessWidget {
height: 10, height: 10,
), ),
FloatingActionButton.extended( FloatingActionButton.extended(
onPressed: () {}, 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( label: Text(
Provider.of<LanguageProvider>(context).languageData[ Provider.of<LanguageProvider>(context).languageData[
Provider.of<LanguageProvider>(context).language] Provider.of<LanguageProvider>(context).language]
+256
View File
@@ -1,6 +1,38 @@
# 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:
@@ -41,6 +73,14 @@ 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:
@@ -104,6 +144,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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:
@@ -112,6 +160,22 @@ 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: http:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -128,6 +192,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.0.2" 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:
@@ -160,6 +232,14 @@ 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:
@@ -184,6 +264,14 @@ 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:
@@ -200,6 +288,30 @@ 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: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
@@ -248,6 +360,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.8" 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:
@@ -256,6 +376,30 @@ 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: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -333,6 +477,14 @@ 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:
@@ -349,6 +501,22 @@ 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:
@@ -373,6 +541,70 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" 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:
@@ -397,6 +629,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" 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: xdg_directories:
dependency: transitive dependency: transitive
description: description:
@@ -413,6 +661,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.5.0" 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.2 <4.0.0"
flutter: ">=3.24.0" flutter: ">=3.24.0"
+2
View File
@@ -36,6 +36,8 @@ dependencies:
http: ^1.2.2 http: ^1.2.2
shared_preferences: ^2.3.3 shared_preferences: ^2.3.3
xml: ^6.5.0 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.