From 60eb2785eec39f4ff72fb46f7956bb4ef0b763c0 Mon Sep 17 00:00:00 2001 From: Ali Date: Fri, 29 Nov 2024 01:36:46 +0100 Subject: [PATCH] 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? --- lib/main.dart | 26 +- lib/modules/databaseService.dart | 181 +++++++++++++ lib/pages/pageSpezielleErnaehrung.dart | 8 +- lib/providers/languageProvider.dart | 60 ++-- .../spezielleErnaehrungProvider.dart | 16 +- lib/spaces/spaceHome.dart | 3 +- lib/spaces/spaceRate.dart | 21 +- pubspec.lock | 256 ++++++++++++++++++ pubspec.yaml | 2 + 9 files changed, 522 insertions(+), 51 deletions(-) create mode 100644 lib/modules/databaseService.dart diff --git a/lib/main.dart b/lib/main.dart index 0958cff..be39c63 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,8 +9,25 @@ import 'package:mensaapp/providers/spaceProvider.dart'; import 'package:mensaapp/providers/spezielleErnaehrungProvider.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()); } @@ -71,7 +88,7 @@ class MyApp extends StatelessWidget { var lastTimeClick = DateTime.now(); -var secondsTimeOut = 80; +var secondsTimeOut = 80; //80 var popupOpen = false; void _showTimeOverDialog(BuildContext context) { @@ -122,7 +139,7 @@ class MyHome extends StatelessWidget { (timer) { var clickDiff = DateTime.now().difference(lastTimeClick).inSeconds; if (clickDiff >= secondsTimeOut && Provider.of(context, listen: false).selectedSpace == 1) { - Navigator.of(context).pop(); + Navigator.of(context).popUntil((route) => route.isFirst); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) @@ -135,6 +152,8 @@ class MyHome extends StatelessWidget { .resetAllFields(); Provider.of(context, listen: false) .resetSelectedEssen(); + Provider.of(context, listen: false) + .changePage(0); Provider.of(context, listen: false) .setSelectedSpace(0); Provider.of(context, listen: false) @@ -142,6 +161,7 @@ class MyHome extends StatelessWidget { } else if (clickDiff >= secondsTimeOut - 30 && Provider.of(context, listen: false).selectedSpace == 1) { if (!popupOpen) { _showTimeOverDialog(context); + _showTimeOverDialog(context); } } diff --git a/lib/modules/databaseService.dart b/lib/modules/databaseService.dart new file mode 100644 index 0000000..a271e64 --- /dev/null +++ b/lib/modules/databaseService.dart @@ -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(context, listen: false); + var essenProvider = Provider.of(context, listen: false); + var speziellerProvider = Provider.of(context, listen: false); + var pageProvider = Provider.of(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 myJson) { + return !myJson.values.any((value) => value == 0); + } + + Future sendDataToSupabase(Map 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 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(context, listen: false).resetAllFields(); + Provider.of(context, listen: false).resetAllFields(); + Provider.of(context, listen: false) + .resetAllFields(); + Provider.of(context, listen: false).resetSelectedEssen(); + Provider.of(context, listen: false).setSelectedSpace(0); + Provider.of(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) + ), + ), + ], + ); + }, + ); + } +} + diff --git a/lib/pages/pageSpezielleErnaehrung.dart b/lib/pages/pageSpezielleErnaehrung.dart index 3165927..449f7e6 100644 --- a/lib/pages/pageSpezielleErnaehrung.dart +++ b/lib/pages/pageSpezielleErnaehrung.dart @@ -63,10 +63,10 @@ class PageSpezielleErnaehrung extends StatelessWidget { return RatingStars( onRate: (value) { spezielleErnaehrungProvider - .setRatingSitzmoeglichkeit(value); + .setRatingFrage1(value); }, initRating: spezielleErnaehrungProvider - .ratingSitzmoeglichkeit, + .frage1, ); }, ) @@ -85,10 +85,10 @@ class PageSpezielleErnaehrung extends StatelessWidget { return RatingStars( onRate: (value) { spezielleErnaehrungProvider - .setRatingKeineAhnung(value); + .setRatingFrage2(value); }, initRating: - spezielleErnaehrungProvider.ratingKeineAhnung, + spezielleErnaehrungProvider.frage2, ); }, ), diff --git a/lib/providers/languageProvider.dart b/lib/providers/languageProvider.dart index dbe6668..00bd349 100644 --- a/lib/providers/languageProvider.dart +++ b/lib/providers/languageProvider.dart @@ -12,16 +12,16 @@ class LanguageProvider extends ChangeNotifier { }, "textfield": "Dein Feedback", "pageAmbiente": { - "question1": "Frage1", - "question2": "Frage2", + "question1": "Frage1*", + "question2": "Frage2*", }, "pageAnmerkungen": { - "question1": "Frage1", - "question2": "Frage2", + "question1": "Frage1*", + "question2": "Frage2*", }, "pageEssen": { - "question1": "Geschmack", - "question2": "Qualität", + "question1": "Geschmack*", + "question2": "Qualität*", }, "pageHome": { "noTimePopupTitle": "Du kannst gerade nicht bewerten!", @@ -30,12 +30,12 @@ class LanguageProvider extends ChangeNotifier { "noTimePopupButton": "OK" }, "pageService": { - "question1": "Frage1", - "question2": "Frage2", + "question1": "Frage1*", + "question2": "Frage2*", }, "pageSpecial": { - "question1": "Frage1", - "question2": "Frage2", + "question1": "Frage1*", + "question2": "Frage2*", }, "navBar": {"0": "Essen", "1": "Service", "2": "Essenswünsche"}, "floating": { @@ -57,16 +57,16 @@ class LanguageProvider extends ChangeNotifier { }, "textfield": "Your Feedback", "pageAmbiente": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageAnmerkungen": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageEssen": { - "question1": "Taste", - "question2": "Quality", + "question1": "Taste*", + "question2": "Quality*", }, "pageHome": { "noTimePopupTitle": "You cannot rate right now!", @@ -75,12 +75,12 @@ class LanguageProvider extends ChangeNotifier { "noTimePopupButton": "OK" }, "pageService": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageSpecial": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "navBar": {"0": "Food", "1": "Service", "2": "Food Requests"}, "floating": { @@ -102,16 +102,16 @@ class LanguageProvider extends ChangeNotifier { }, "textfield": "Votre avis", "pageAmbiente": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageAnmerkungen": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageEssen": { - "question1": "Goût", - "question2": "Qualité", + "question1": "Goût*", + "question2": "Qualité*", }, "pageHome": { "noTimePopupTitle": "Vous ne pouvez pas évaluer pour le moment !", @@ -120,12 +120,12 @@ class LanguageProvider extends ChangeNotifier { "noTimePopupButton": "D'ACCORD" }, "pageService": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "pageSpecial": { - "question1": "Question1", - "question2": "Question2", + "question1": "Question1*", + "question2": "Question2*", }, "navBar": { "0": "Nourriture", diff --git a/lib/providers/spezielleErnaehrungProvider.dart b/lib/providers/spezielleErnaehrungProvider.dart index 6512324..8223849 100644 --- a/lib/providers/spezielleErnaehrungProvider.dart +++ b/lib/providers/spezielleErnaehrungProvider.dart @@ -2,17 +2,17 @@ import 'package:flutter/material.dart'; class SpezielleErnaehrungProvider extends ChangeNotifier { - double ratingSitzmoeglichkeit = 0; - double ratingKeineAhnung = 0; + double frage1 = 0; + double frage2 = 0; String freiText = ""; - void setRatingSitzmoeglichkeit(double rating) { - ratingSitzmoeglichkeit = rating; + void setRatingFrage1(double rating) { + frage1 = rating; notifyListeners(); } - void setRatingKeineAhnung(double rating) { - ratingKeineAhnung = rating; + void setRatingFrage2(double rating) { + frage2 = rating; notifyListeners(); } @@ -23,8 +23,8 @@ class SpezielleErnaehrungProvider extends ChangeNotifier { void resetAllFields(){ freiText = ""; - ratingSitzmoeglichkeit = 0; - ratingKeineAhnung = 0; + frage1 = 0; + frage2 = 0; notifyListeners(); } } \ No newline at end of file diff --git a/lib/spaces/spaceHome.dart b/lib/spaces/spaceHome.dart index 8eb415a..f9dff6b 100644 --- a/lib/spaces/spaceHome.dart +++ b/lib/spaces/spaceHome.dart @@ -50,7 +50,7 @@ class _SpaceHomeState extends State { } // only for test - var disableRateTimeDebug = false; + var disableRateTimeDebug = true; // end only for test void _showNotRateTimeDialog(BuildContext context) { @@ -138,6 +138,7 @@ class _SpaceHomeState extends State { children: [ Text( text, + textAlign: TextAlign.center, style: TextStyle( fontSize: 70, fontWeight: FontWeight.bold, diff --git a/lib/spaces/spaceRate.dart b/lib/spaces/spaceRate.dart index 93c696a..79dd7a2 100644 --- a/lib/spaces/spaceRate.dart +++ b/lib/spaces/spaceRate.dart @@ -1,5 +1,6 @@ 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'; @@ -46,18 +47,20 @@ class SpaceRate extends StatelessWidget { ), ElevatedButton( onPressed: () { - Provider.of(context, listen: false) - .resetAllFields(); + /*Provider.of(context, listen: false) + .resetAllFields();*/ Provider.of(context, listen: false) .resetAllFields(); - Provider.of(context, listen: false) - .resetAllFields(); + /*Provider.of(context, listen: false) + .resetAllFields();*/ Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetAllFields(); Provider.of(context, listen: false) .resetSelectedEssen(); + Provider.of(context, listen: false) + .changePage(0); Provider.of(context, listen: false) .setSelectedSpace(0); Provider.of(context, listen: false) @@ -213,7 +216,15 @@ class SpaceRate extends StatelessWidget { height: 10, ), FloatingActionButton.extended( - onPressed: () {}, + onPressed: () { + DatabaseService().getAllRatings( + context + ); + + /*DatabaseService.getAllRatings( + Provider.of(context), Provider.of(context), Provider.of(context)); // Passe den Kontext an, falls nötig + */ + }, label: Text( Provider.of(context).languageData[ Provider.of(context).language] diff --git a/pubspec.lock b/pubspec.lock index 879bb3e..a06540d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,38 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile 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: dependency: transitive description: @@ -41,6 +73,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" cupertino_icons: dependency: "direct main" description: @@ -104,6 +144,14 @@ packages: 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: dependency: "direct main" description: @@ -112,6 +160,22 @@ packages: url: "https://pub.dev" source: hosted 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: @@ -128,6 +192,14 @@ packages: 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: dependency: transitive description: @@ -160,6 +232,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" matcher: dependency: transitive description: @@ -184,6 +264,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.15.0" + mime: + dependency: transitive + description: + name: mime + sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" + url: "https://pub.dev" + source: hosted + version: "1.0.6" nested: dependency: transitive description: @@ -200,6 +288,30 @@ packages: url: "https://pub.dev" source: hosted 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: @@ -248,6 +360,14 @@ packages: 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: dependency: "direct main" description: @@ -256,6 +376,30 @@ packages: url: "https://pub.dev" source: hosted 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: @@ -333,6 +477,14 @@ packages: url: "https://pub.dev" source: hosted 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: dependency: transitive description: @@ -349,6 +501,22 @@ packages: url: "https://pub.dev" source: hosted 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: dependency: transitive description: @@ -373,6 +541,70 @@ packages: 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: dependency: transitive description: @@ -397,6 +629,22 @@ packages: 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: @@ -413,6 +661,14 @@ packages: 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: dart: ">=3.5.2 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 21f495c..75742cf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,8 @@ dependencies: 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. # Use with the CupertinoIcons class for iOS style icons.