From 75efe1aaac007a3983b40753b435ce7b09356156 Mon Sep 17 00:00:00 2001 From: Remy Moll Date: Thu, 1 Aug 2024 14:39:15 +0200 Subject: [PATCH] frontend groundwork --- backend/Dockerfile | 2 +- backend/src/constants.py | 6 +- backend/src/persistence.py | 4 +- frontend/android/app/build.gradle | 2 +- .../fast_network_navigation/MainActivity.kt | 2 +- frontend/lib/modules/map.dart | 89 ++++-- frontend/lib/pages/new_trip.dart | 75 ++++- frontend/lib/structs/route.dart | 14 - frontend/lib/utils/fetch_landmarks.dart | 54 ---- frontend/lib/utils/fetch_trip.dart | 45 +++ .../Flutter/GeneratedPluginRegistrant.swift | 4 + frontend/pubspec.lock | 262 ++++++++++++++---- frontend/pubspec.yaml | 3 +- 13 files changed, 399 insertions(+), 163 deletions(-) delete mode 100644 frontend/lib/structs/route.dart delete mode 100644 frontend/lib/utils/fetch_landmarks.dart create mode 100644 frontend/lib/utils/fetch_trip.dart diff --git a/backend/Dockerfile b/backend/Dockerfile index 4a3ca4d..25a5e31 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,6 +13,6 @@ EXPOSE 8000 # Set environment variables used by the deployment. These can be overridden by the user using this image. ENV NUM_WORKERS=1 ENV OSM_CACHE_DIR=/cache -ENV MEMCACHED_HOST=none +ENV MEMCACHED_HOST_PATH=none CMD fastapi run src/main.py --port 8000 --workers $NUM_WORKERS diff --git a/backend/src/constants.py b/backend/src/constants.py index 7118666..e9a4be2 100644 --- a/backend/src/constants.py +++ b/backend/src/constants.py @@ -26,6 +26,6 @@ logging.config.dictConfig(config) if os.getenv('DEBUG', False): logging.getLogger().setLevel(logging.DEBUG) -MEMCACHE_HOST = os.getenv('MEMCACHE_HOST', None) -if MEMCACHE_HOST == "none": - MEMCACHE_HOST = None +MEMCACHED_HOST_PATH = os.getenv('MEMCACHED_HOST_PATH', None) +if MEMCACHED_HOST_PATH == "none": + MEMCACHED_HOST_PATH = None diff --git a/backend/src/persistence.py b/backend/src/persistence.py index 249edc6..1376277 100644 --- a/backend/src/persistence.py +++ b/backend/src/persistence.py @@ -12,7 +12,7 @@ class DummyClient: return self._data[key] -if constants.MEMCACHE_HOST is None: +if constants.MEMCACHED_HOST_PATH is None: client = DummyClient() else: - client = Client(constants.MEMCACHE_HOST, timeout=1) + client = Client(constants.MEMCACHED_HOST_PATH, timeout=1) diff --git a/frontend/android/app/build.gradle b/frontend/android/app/build.gradle index 7f145d2..c0f4089 100644 --- a/frontend/android/app/build.gradle +++ b/frontend/android/app/build.gradle @@ -61,7 +61,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.anyway" + applicationId "com.anydev.anyway" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // Minimum Android version for Google Maps SDK diff --git a/frontend/android/app/src/main/kotlin/com/example/fast_network_navigation/MainActivity.kt b/frontend/android/app/src/main/kotlin/com/example/fast_network_navigation/MainActivity.kt index 0cddadf..95565a7 100644 --- a/frontend/android/app/src/main/kotlin/com/example/fast_network_navigation/MainActivity.kt +++ b/frontend/android/app/src/main/kotlin/com/example/fast_network_navigation/MainActivity.kt @@ -1,4 +1,4 @@ -package com.example.anyway +package com.anydev.anyway import io.flutter.embedding.android.FlutterActivity diff --git a/frontend/lib/modules/map.dart b/frontend/lib/modules/map.dart index 339792c..d0ab511 100644 --- a/frontend/lib/modules/map.dart +++ b/frontend/lib/modules/map.dart @@ -1,9 +1,10 @@ import 'dart:collection'; +import 'package:flutter/material.dart'; import 'package:anyway/structs/landmark.dart'; import 'package:anyway/structs/trip.dart'; -import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:the_widget_marker/the_widget_marker.dart'; class MapWidget extends StatefulWidget { @@ -25,6 +26,7 @@ class _MapWidgetState extends State { zoom: 11.0, ); Set markers = {}; + final GlobalKey globalKey = GlobalKey(); void _onMapCreated(GoogleMapController controller) async { @@ -49,28 +51,81 @@ class _MapWidgetState extends State { Trip? trip = await widget.trip; LinkedList? landmarks = trip?.landmarks; if (landmarks != null){ - setState(() { - for (Landmark landmark in landmarks) { - markers.add(Marker( - markerId: MarkerId(landmark.name), - position: LatLng(landmark.location[0], landmark.location[1]), - infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name), - )); - } - }); + for (Landmark landmark in landmarks) { + markers.add(Marker( + markerId: MarkerId(landmark.name), + position: LatLng(landmark.location[0], landmark.location[1]), + // infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name), + icon: await MarkerIcon.widgetToIcon(globalKey), + )); + } + setState(() {}); } } @override Widget build(BuildContext context) { - return GoogleMap( - onMapCreated: _onMapCreated, - initialCameraPosition: _cameraPosition, - onCameraIdle: _onCameraIdle, - // onLongPress: , - markers: markers, - cloudMapId: '41c21ac9b81dbfd8', + return Stack( + children: [ + MyMarker(globalKey), + + GoogleMap( + onMapCreated: _onMapCreated, + initialCameraPosition: _cameraPosition, + onCameraIdle: _onCameraIdle, + // onLongPress: , + markers: markers, + cloudMapId: '41c21ac9b81dbfd8', + ) + ] ); } } + + +class MyMarker extends StatelessWidget { + // declare a global key and get it trough Constructor + + MyMarker(this.globalKeyMyWidget); + final GlobalKey globalKeyMyWidget; + + @override + Widget build(BuildContext context) { + // This returns an outlined circle, with an icon corresponding to the landmark type + // As a small dot, the number of the landmark is displayed in the top right + return RepaintBoundary( + key: globalKeyMyWidget, + child: Stack( + children: [ + Container( + width: 75, + height: 75, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [Colors.red, Colors.yellow] + ), + shape: BoxShape.circle, + border: Border.all(color: Colors.black, width: 5), + ), + child: Icon(Icons.location_on, color: Colors.black, size: 50), + ), + Positioned( + top: 0, + right: 0, + child: Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + shape: BoxShape.circle, + ), + child: Text('1', style: TextStyle(color: Colors.white, fontSize: 20)), + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/frontend/lib/pages/new_trip.dart b/frontend/lib/pages/new_trip.dart index 47e2c5b..a10a046 100644 --- a/frontend/lib/pages/new_trip.dart +++ b/frontend/lib/pages/new_trip.dart @@ -1,5 +1,11 @@ +import 'package:anyway/layout.dart'; +import 'package:anyway/structs/preferences.dart'; +import 'package:anyway/utils/fetch_trip.dart'; import 'package:flutter/material.dart'; +import "package:anyway/structs/trip.dart"; + + class NewTripPage extends StatefulWidget { const NewTripPage({Key? key}) : super(key: key); @@ -9,22 +15,71 @@ class NewTripPage extends StatefulWidget { } class _NewTripPageState extends State { + final GlobalKey _formKey = GlobalKey(); + final TextEditingController latController = TextEditingController(); + final TextEditingController lonController = TextEditingController(); + @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('New Trip'), ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'Create a new trip', + body: Form( + key: _formKey, + child: + Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + + children: [ + TextFormField( + decoration: const InputDecoration(hintText: 'Lat'), + controller: latController, + validator: (String? value) { + if (value == null || value.isEmpty || double.tryParse(value) == null){ + return 'Please enter a floating point number'; + } + return null; + }, + ), + TextFormField( + decoration: const InputDecoration(hintText: 'Lon'), + controller: lonController, + + validator: (String? value) { + if (value == null || value.isEmpty || double.tryParse(value) == null){ + return 'Please enter a floating point number'; + } + return null; + }, + ), + Divider(height: 15, color: Colors.transparent), + ElevatedButton( + onPressed: () { + if (_formKey.currentState!.validate()) { + List startPoint = [ + double.parse(latController.text), + double.parse(lonController.text) + ]; + UserPreferences preferences = UserPreferences(); + preferences.load(); + Future trip = fetchTrip(startPoint, preferences); + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => BasePage(mainScreen: "map", trip: trip) + ) + ); + } + }, + child: const Text('Create trip'), + ), + ], ), - ], - ), - ), + ) + + ) ); } -} \ No newline at end of file +} diff --git a/frontend/lib/structs/route.dart b/frontend/lib/structs/route.dart deleted file mode 100644 index 20b1625..0000000 --- a/frontend/lib/structs/route.dart +++ /dev/null @@ -1,14 +0,0 @@ -import "package:anyway/structs/landmark.dart"; - - -class Route { - final String name; - final Duration duration; - final List landmarks; - - Route({ - required this.name, - required this.duration, - required this.landmarks - }); -} \ No newline at end of file diff --git a/frontend/lib/utils/fetch_landmarks.dart b/frontend/lib/utils/fetch_landmarks.dart deleted file mode 100644 index c014f5d..0000000 --- a/frontend/lib/utils/fetch_landmarks.dart +++ /dev/null @@ -1,54 +0,0 @@ -import "package:anyway/structs/landmark.dart"; -import "package:anyway/structs/linked_landmarks.dart"; -import 'package:dio/dio.dart'; - -final dio = Dio(); - -// Future> fetchLandmarks() async { -// // final response = await http -// // .get(Uri.parse('https://nav.kluster.moll.re/v1/destination/1')); - -// // if (response.statusCode == 200) { -// // If the server did return a 200 OK response, -// // then parse the JSON. -// List landmarks = [ -// // 48°51′29.6″N 2°17′40.2″E -// Landmark( -// name: "Eiffel Tower", -// location: [48.51296, 2.17402], -// type: LandmarkType(name: "Tower"), -// imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Tour_Eiffel_Wikimedia_Commons.jpg/1037px-Tour_Eiffel_Wikimedia_Commons.jpg" -// ), -// Landmark( -// name: "Notre Dame Cathedral", -// location: [48.8530, 2.3498], -// type: LandmarkType(name: "Monument"), -// imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Notre-Dame_de_Paris%2C_4_October_2017.jpg/440px-Notre-Dame_de_Paris%2C_4_October_2017.jpg" -// ), -// Landmark( -// name: "Louvre palace", -// location: [48.8606, 2.3376], -// type: LandmarkType(name: "Museum"), -// imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Louvre_Museum_Wikimedia_Commons.jpg/540px-Louvre_Museum_Wikimedia_Commons.jpg" -// ), -// Landmark( -// name: "Pont-des-arts", -// location: [48.5130, 2.2015], -// type: LandmarkType(name: "Bridge"), -// imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Pont_des_Arts%2C_6e_Arrondissement%2C_Paris_%28HDR%29_20140320_1.jpg/560px-Pont_des_Arts%2C_6e_Arrondissement%2C_Paris_%28HDR%29_20140320_1.jpg"), -// Landmark( -// name: "Panthéon", -// location: [48.5046, 2.2046], -// type: LandmarkType(name: "Monument"), -// imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pantheon_of_Paris_007.JPG/1280px-Pantheon_of_Paris_007.JPG" -// ), -// ]; -// // sleep 10 seconds -// await Future.delayed(Duration(seconds: 5)); -// return landmarks; -// // } else { -// // // If the server did not return a 200 OK response, -// // // then throw an exception. -// // throw Exception('Failed to load destination'); -// // } -// } \ No newline at end of file diff --git a/frontend/lib/utils/fetch_trip.dart b/frontend/lib/utils/fetch_trip.dart new file mode 100644 index 0000000..fd55751 --- /dev/null +++ b/frontend/lib/utils/fetch_trip.dart @@ -0,0 +1,45 @@ +import 'package:dio/dio.dart'; +import 'package:anyway/constants.dart'; +import "package:anyway/structs/landmark.dart"; +import "package:anyway/structs/trip.dart"; +import "package:anyway/structs/preferences.dart"; + +import "package:anyway/structs/linked_landmarks.dart"; + +Dio dio = Dio( + BaseOptions( + baseUrl: API_URL_BASE, + connectTimeout: const Duration(seconds: 5), + receiveTimeout: const Duration(seconds: 60), + // api is notoriously slow + // headers: { + // HttpHeaders.userAgentHeader: 'dio', + // 'api': '1.0.0', + // }, + contentType: Headers.jsonContentType, + responseType: ResponseType.json, + ), +); + +Future fetchTrip( + List startPoint, + UserPreferences preferences, +) async { + final response = await dio.post( + "/trip/new", + data: { + // 'preferences': preferences.toJson(), + 'start': [48,2.3] + } + ); + + // handle errors + if (response.statusCode != 200) { + throw Exception('Failed to load trip'); + } + if (response.data["error"] != null) { + throw Exception(response.data["error"]); + } + return Trip.fromJson(response.data); +} + diff --git a/frontend/macos/Flutter/GeneratedPluginRegistrant.swift b/frontend/macos/Flutter/GeneratedPluginRegistrant.swift index 724bb2a..eefcc6d 100644 --- a/frontend/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/frontend/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,8 +5,12 @@ import FlutterMacOS import Foundation +import path_provider_foundation import shared_preferences_foundation +import sqflite func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) } diff --git a/frontend/pubspec.lock b/frontend/pubspec.lock index eeca771..8d3dc88 100644 --- a/frontend/pubspec.lock +++ b/frontend/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" async: dependency: transitive description: @@ -41,6 +49,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" csslib: dependency: transitive description: @@ -97,11 +113,27 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: a77f77806a790eb9ba0118a5a3a936e81c4fea2b61533033b2b0c3d50bbde5ea + url: "https://pub.dev" + source: hosted + version: "3.4.0" flutter_lints: dependency: "direct dev" description: @@ -114,10 +146,18 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" + sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de" url: "https://pub.dev" source: hosted - version: "2.0.19" + version: "2.0.21" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + url: "https://pub.dev" + source: hosted + version: "2.0.10+1" flutter_test: dependency: "direct dev" description: flutter @@ -132,50 +172,50 @@ packages: dependency: transitive description: name: google_maps - sha256: "47eef3836b49bb030d5cb3afc60b8451408bf34cf753e571b645d6529eb4251a" + sha256: "463b38e5a92a05cde41220a11fd5eef3847031fef3e8cf295ac76ec453246907" url: "https://pub.dev" source: hosted - version: "7.1.0" + version: "8.0.0" google_maps_flutter: dependency: "direct main" description: name: google_maps_flutter - sha256: c1972cbad779bc5346c49045f26ae45550a0958b1cbca5b524dd3c8954995d28 + sha256: acf0ec482d86b2ac55ade80597ce7f797a47971f5210ebfd030f0d58130e0a94 url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "2.7.0" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - sha256: "0bcadb80eba39afda77dede89a6caafd3b68f2786b90491eceea4a01c3db181c" + sha256: "5d444f4135559488d7ea325eae710ae3284e6951b1b61729a0ac026456fe1548" url: "https://pub.dev" source: hosted - version: "2.8.0" + version: "2.12.1" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: e5132d17f051600d90d79d9f574b177c24231da702453a036db2490f9ced4646 + sha256: a6e3c6ecdda6c985053f944be13a0645ebb919da2ef0f5bc579c5e1670a5b2a8 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.10.0" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - sha256: "167af879da4d004cd58771f1469b91dcc3b9b0a2c5334cc6bf71fd41d4b35403" + sha256: bd60ca330e3c7763b95b477054adec338a522d982af73ecc520b232474063ac5 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.8.0" google_maps_flutter_web: dependency: transitive description: name: google_maps_flutter_web - sha256: "0c0d5c723d94b295cf86dd1c45ff91d2ac1fff7c05ddca4f01bef9fa0a014690" + sha256: "8d5d0f58bfc4afac0bbe3d399f2018fcea691e3ea3d35254b7aae56df5827659" url: "https://pub.dev" source: hosted - version: "0.5.7" + version: "0.5.9+1" html: dependency: transitive description: @@ -188,10 +228,10 @@ packages: dependency: "direct main" description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_parser: dependency: transitive description: @@ -200,22 +240,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - js_wrapping: - dependency: transitive - description: - name: js_wrapping - sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c - url: "https://pub.dev" - source: hosted - version: "0.7.4" leak_tracker: dependency: transitive description: @@ -280,6 +304,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + url: "https://pub.dev" + source: hosted + version: "2.1.4" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "490539678396d4c3c0b06efdaab75ae60675c3e0c66f72bc04c2e2c1e0e2abeb" + url: "https://pub.dev" + source: hosted + version: "2.2.9" + 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: @@ -300,18 +356,26 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + 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: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -320,6 +384,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" + url: "https://pub.dev" + source: hosted + version: "0.28.0" sanitize_html: dependency: transitive description: @@ -332,58 +404,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + sha256: c3f888ba2d659f3e75f4686112cc1e71f46177f74452d40d8307edc332296ead url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.0" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" + sha256: "041be4d9d2dc6079cf342bc8b761b03787e3b71192d658220a56cac9c04a0294" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + sha256: "671e7a931f55a08aa45be2a13fe7247f2a41237897df434b30d2012388191833" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.5.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + sha256: "3a293170d4d9403c3254ee05b84e62e8a9b3c5808ebd17de6a33fe9ea6457936" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.0" sky_engine: dependency: transitive description: flutter @@ -405,6 +477,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d + url: "https://pub.dev" + source: hosted + version: "2.3.3+1" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" + url: "https://pub.dev" + source: hosted + version: "2.5.4" stack_trace: dependency: transitive description: @@ -437,6 +533,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -453,6 +557,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + the_widget_marker: + dependency: "direct main" + description: + name: the_widget_marker + sha256: "2476ae6b1fe29bbffa3596546871bd26f724c223ea7da74775801d9b70d64811" + url: "https://pub.dev" + source: hosted + version: "1.0.0" typed_data: dependency: transitive description: @@ -461,6 +573,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90" + url: "https://pub.dev" + source: hosted + version: "4.4.2" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + url: "https://pub.dev" + source: hosted + version: "1.1.11+1" vector_math: dependency: transitive description: @@ -485,14 +629,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" - win32: - dependency: transitive - description: - name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 - url: "https://pub.dev" - source: hosted - version: "5.5.1" xdg_directories: dependency: transitive description: @@ -501,6 +637,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" sdks: dart: ">=3.4.0 <4.0.0" - flutter: ">=3.19.0" + flutter: ">=3.22.0" diff --git a/frontend/pubspec.yaml b/frontend/pubspec.yaml index 1d31915..6f6d8cf 100644 --- a/frontend/pubspec.yaml +++ b/frontend/pubspec.yaml @@ -36,10 +36,11 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.6 sliding_up_panel: ^2.0.0+1 - google_maps_flutter: ^2.6.1 http: ^1.2.1 shared_preferences: ^2.2.3 dio: ^5.5.0+1 + google_maps_flutter: ^2.7.0 + the_widget_marker: ^1.0.0 dev_dependencies: flutter_test: