diff --git a/.gitignore b/.gitignore index 0678d7501d36e550432444c0ce3421c9f48113ea..6668ffa9626fc3fb8f6c6a8bbb8b1ec1c07ac1f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Auto-generated by VScode -./vs +.vs/ # Auto-generated by Android Studio -./idea \ No newline at end of file +.idea/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d33521af10bcc7fd8cea344038eaaeb78d0ef5..0000000000000000000000000000000000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml deleted file mode 100644 index 3c2e5fe04b6e61181b96374f1c17cf35be4c81a5..0000000000000000000000000000000000000000 --- a/.idea/libraries/Dart_Packages.xml +++ /dev/null @@ -1,220 +0,0 @@ -<component name="libraryTable"> - <library name="Dart Packages" type="DartPackagesLibraryType"> - <properties> - <option name="packageNameToDirsMap"> - <entry key="async"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/lib" /> - </list> - </value> - </entry> - <entry key="boolean_selector"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1/lib" /> - </list> - </value> - </entry> - <entry key="characters"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0/lib" /> - </list> - </value> - </entry> - <entry key="clock"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib" /> - </list> - </value> - </entry> - <entry key="collection"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib" /> - </list> - </value> - </entry> - <entry key="fake_async"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1/lib" /> - </list> - </value> - </entry> - <entry key="flutter"> - <value> - <list> - <option value="$USER_HOME$/flutter/packages/flutter/lib" /> - </list> - </value> - </entry> - <entry key="flutter_lints"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_lints-2.0.3/lib" /> - </list> - </value> - </entry> - <entry key="flutter_test"> - <value> - <list> - <option value="$USER_HOME$/flutter/packages/flutter_test/lib" /> - </list> - </value> - </entry> - <entry key="http"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http-0.13.6/lib" /> - </list> - </value> - </entry> - <entry key="http_parser"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.0.2/lib" /> - </list> - </value> - </entry> - <entry key="lints"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/lints-2.1.1/lib" /> - </list> - </value> - </entry> - <entry key="matcher"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16/lib" /> - </list> - </value> - </entry> - <entry key="material_color_utilities"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.5.0/lib" /> - </list> - </value> - </entry> - <entry key="meta"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.10.0/lib" /> - </list> - </value> - </entry> - <entry key="path"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.8.3/lib" /> - </list> - </value> - </entry> - <entry key="sky_engine"> - <value> - <list> - <option value="$USER_HOME$/flutter/bin/cache/pkg/sky_engine/lib" /> - </list> - </value> - </entry> - <entry key="source_span"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0/lib" /> - </list> - </value> - </entry> - <entry key="stack_trace"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.11.1/lib" /> - </list> - </value> - </entry> - <entry key="stream_channel"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2/lib" /> - </list> - </value> - </entry> - <entry key="string_scanner"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.2.0/lib" /> - </list> - </value> - </entry> - <entry key="term_glyph"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1/lib" /> - </list> - </value> - </entry> - <entry key="test_api"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.6.1/lib" /> - </list> - </value> - </entry> - <entry key="typed_data"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.3.2/lib" /> - </list> - </value> - </entry> - <entry key="vector_math"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4/lib" /> - </list> - </value> - </entry> - <entry key="web"> - <value> - <list> - <option value="$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-0.3.0/lib" /> - </list> - </value> - </entry> - </option> - </properties> - <CLASSES> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_lints-2.0.3/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http-0.13.6/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.0.2/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/lints-2.1.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.5.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.10.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.8.3/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.11.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.2.0/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.6.1/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.3.2/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4/lib" /> - <root url="file://$USER_HOME$/AppData/Local/Pub/Cache/hosted/pub.dev/web-0.3.0/lib" /> - <root url="file://$USER_HOME$/flutter/bin/cache/pkg/sky_engine/lib" /> - <root url="file://$USER_HOME$/flutter/packages/flutter/lib" /> - <root url="file://$USER_HOME$/flutter/packages/flutter_test/lib" /> - </CLASSES> - <JAVADOC /> - <SOURCES /> - </library> -</component> \ No newline at end of file diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml deleted file mode 100644 index 3b3c0ad641e79359469a9679eaa9fbbe9e634ee2..0000000000000000000000000000000000000000 --- a/.idea/libraries/Dart_SDK.xml +++ /dev/null @@ -1,29 +0,0 @@ -<component name="libraryTable"> - <library name="Dart SDK"> - <CLASSES> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/async" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/cli" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/collection" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/convert" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/core" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/developer" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/ffi" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/html" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/indexed_db" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/io" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/isolate" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/js" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/js_interop" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/js_interop_unsafe" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/js_util" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/math" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/mirrors" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/svg" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/typed_data" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/web_audio" /> - <root url="file://$USER_HOME$/flutter/bin/cache/dart-sdk/lib/web_gl" /> - </CLASSES> - <JAVADOC /> - <SOURCES /> - </library> -</component> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b886f057893d266d5f636e82d3ba93f1f3604241..0000000000000000000000000000000000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/repo2900.iml" filepath="$PROJECT_DIR$/.idea/repo2900.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/.idea/repo2900.iml b/.idea/repo2900.iml deleted file mode 100644 index e80ce9c810bdddd45204523bf8c258b28ad3adc0..0000000000000000000000000000000000000000 --- a/.idea/repo2900.iml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="JAVA_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$"> - <excludeFolder url="file://$MODULE_DIR$/app/.dart_tool" /> - <excludeFolder url="file://$MODULE_DIR$/app/.pub" /> - <excludeFolder url="file://$MODULE_DIR$/app/build" /> - </content> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" name="Dart SDK" level="project" /> - <orderEntry type="library" name="Dart Packages" level="project" /> - </component> -</module> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbbc029bcab630581847471d7f238ec53..0000000000000000000000000000000000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="" vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/app/lib/consts.dart b/app/lib/consts.dart new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/app/lib/main.dart b/app/lib/main.dart index d2d9e0c98242ce794729148d852ef1fb5a7f7774..bff144024437ae2f42b7df9fecce02ce0b1142c9 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -1,33 +1,19 @@ import 'package:flutter/material.dart'; -import 'package:http/http.dart' as http; -import 'dart:convert'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:latlong2/latlong.dart'; // Import LatLng class from the latlong package import 'dart:async'; import 'dart:io'; + const String port = "8443"; const String serverURI = "https://127.0.0.1:$port/"; +const String mapEndpoint = "update_map"; +// NB: if http connection fails, run: adb reverse tcp:8443 tcp:8443 const int fetchInterval = 5; -Future<void> main() async { - // NB temporary test print - print(serverURI); - - try { - // Create a custom HTTP client with disabled SSL certificate validation - HttpClient client = HttpClient() - ..badCertificateCallback = - (X509Certificate cert, String host, int port) => true; - - // Use the custom HTTP client for requests - var request = await client.getUrl(Uri.parse(serverURI)); - var response = await request.close(); - - // Handle response - print('Response status: ${response.statusCode}'); - } catch (e) { - // Handle connection error - print('Failed to connect to the server: $e'); - } +// main is the entry point for the application, and starts the App() function +void main() { + runApp(const App()); } class App extends StatelessWidget { @@ -43,17 +29,18 @@ class App extends StatelessWidget { // fetchData requests data from the update_map endpoint Future<void> fetchData() async { - final response = await http.get(Uri.parse(serverURI)); - - if (response.statusCode == 200) { - // Parse the JSON response - Map<String, dynamic> data = jsonDecode(response.body); - - // NB temporary test print - print(data); - print("Test print, fetchData triggered"); - } else { // Handle the error case - print('Failed to fetch data. Status code: ${response.statusCode}'); + try { + // Custom HTTP client + HttpClient client = HttpClient() + ..badCertificateCallback = // NB: temporary disable SSL certificate validation + (X509Certificate cert, String host, int port) => true; + + var request = await client.getUrl(Uri.parse(serverURI+mapEndpoint)); + var response = await request.close(); + + print('Response status: ${response.statusCode}'); + } catch (e) { + print('Failed to connect to the server: $e'); } } @@ -64,9 +51,24 @@ class DefaultPage extends StatefulWidget { _DefaultPageState createState() => _DefaultPageState(); } +class MarkerData { + final LatLng location; + final double size; + final Color color; + + MarkerData({required this.location, required this.size, required this.color}); +} + class _DefaultPageState extends State<DefaultPage> { late Timer _timer; + final List<MarkerData> markerList = [ + MarkerData(location: LatLng(60.7266, 10.9771), size: 50.0, color: Colors.blue), + MarkerData(location: LatLng(60.8366, 10.8171), size: 70.0, color: Colors.red), + MarkerData(location: LatLng(60.7366, 10.8471), size: 60.0, color: Colors.green), + ]; + + // Timer initializer @override void initState() { super.initState(); @@ -80,6 +82,7 @@ class _DefaultPageState extends State<DefaultPage> { }); } + // Fetch timer @override void dispose() { // Cancel timer on widget termination @@ -87,22 +90,77 @@ class _DefaultPageState extends State<DefaultPage> { super.dispose(); } + // Main widget @override Widget build(BuildContext context) { + double screenWidth = MediaQuery.of(context).size.width; + double boxWidth = 0.9; + double boxHeight = 1.5; + const double markerSize = 40; + return Scaffold( appBar: AppBar( title: const Text('IceMap'), ), - body: const Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: <Widget>[ - Text( - 'Default page', - style: TextStyle(fontSize: 24), - ), - SizedBox(height: 20), - ], + body: Center( + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + Container( // Map container + width: screenWidth * boxWidth, + height: screenWidth * boxHeight, + color: Colors.blue, + child: FlutterMap( + options: MapOptions( + center: LatLng(60.7666, 10.8471), + zoom: 9.0, + ), + children: [ + TileLayer( + urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + subdomains: ['a', 'b', 'c'], + ), + MarkerLayer( // Dynamically allocate markers based on a list + markers: markerList + .map( + (MarkerData markerData) => Marker( + width: markerData.size, + height: markerData.size, + point: markerData.location, + builder: (ctx) => Container( + child: Icon( + Icons.location_on, + color: markerData.color, + size: markerData.size, + ), + ), + ), + ) + .toList(), + ), + ], + ), + ), + SizedBox(height: 20), + Container( // Detailed info container + width: screenWidth * boxWidth, + height: screenWidth * boxHeight, + color: Colors.blue, + child: const Align( + alignment: Alignment.topLeft, + child: Padding( + padding: EdgeInsets.only(top: 10, left: 10), // Edge padding, text + child: Text( + 'Placeholder text', + style: TextStyle(fontSize: 20, color: Colors.black), + ), + ), + ), + ), + SizedBox(height: 20), + ], + ), ), ), ); diff --git a/app/pubspec.lock b/app/pubspec.lock index 399063b499604d182c12d45fdff6536548b85f9f..29ec17a46d8598260b9d81c6ec4ef924f60898a6 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -62,6 +62,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + flutter_map: + dependency: "direct main" + description: + name: flutter_map + sha256: "52c65a977daae42f9aae6748418dd1535eaf27186e9bac9bf431843082bc75a3" + url: "https://pub.dev" + source: hosted + version: "4.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -83,6 +91,22 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" + latlong2: + dependency: "direct main" + description: + name: latlong2 + sha256: "08ef7282ba9f76e8495e49e2dc4d653015ac929dce5f92b375a415d30b407ea0" + url: "https://pub.dev" + source: hosted + version: "0.8.2" lints: dependency: transitive description: @@ -91,6 +115,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + lists: + dependency: transitive + description: + name: lists + sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" + url: "https://pub.dev" + source: hosted + version: "1.0.1" matcher: dependency: transitive description: @@ -115,6 +147,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + mgrs_dart: + dependency: transitive + description: + name: mgrs_dart + sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" path: dependency: transitive description: @@ -123,6 +163,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + polylabel: + dependency: transitive + description: + name: polylabel + sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + proj4dart: + dependency: transitive + description: + name: proj4dart + sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e + url: "https://pub.dev" + source: hosted + version: "2.1.0" sky_engine: dependency: transitive description: flutter @@ -176,6 +232,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + tuple: + dependency: transitive + description: + name: tuple + sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 + url: "https://pub.dev" + source: hosted + version: "2.0.2" typed_data: dependency: transitive description: @@ -184,6 +248,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + unicode: + dependency: transitive + description: + name: unicode + sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" + url: "https://pub.dev" + source: hosted + version: "0.3.1" vector_math: dependency: transitive description: @@ -200,5 +272,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.0" + wkt_parser: + dependency: transitive + description: + name: wkt_parser + sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" + url: "https://pub.dev" + source: hosted + version: "2.0.0" sdks: - dart: ">=3.2.6 <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" + flutter: ">=3.3.0" diff --git a/app/pubspec.yaml b/app/pubspec.yaml index ad954a096aa49565c0bc9bd7fac7ed3a5425e1fb..7d385a53bf526fef8a336ccb16d1bc9e5726088b 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -4,12 +4,15 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: '>=3.2.6 <4.0.0' + sdk: '>=2.17.0 <4.0.0' dependencies: flutter: sdk: flutter + flutter_map: ^4.0.0 http: ^0.13.3 + latlong2: ^0.8.2 + dev_dependencies: