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.