jsChannels = [
- JavascriptChannel(
- name: 'Print',
- onMessageReceived: (JavascriptMessage message) {
- print(message.message);
- }),
-].toSet();
+import 'package:webview_flutter/webview_flutter.dart';
+
+const String kNavigationExamplePage = '''
+
+Navigation Delegate Example
+
+
+The navigation delegate is set to block navigation to the youtube website.
+
+
+
+
+''';
class MyWebView extends StatefulWidget {
- final flutterWebViewPlugin = FlutterWebviewPlugin();
-
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State {
- // Instance of WebView plugin
- final flutterWebViewPlugin = FlutterWebviewPlugin();
- Future _prefs = SharedPreferences.getInstance();
- String userUuid;
- bool uuidSet = false;
-
- // On destroy stream
- StreamSubscription _onDestroy;
-
- // On urlChanged stream
- StreamSubscription _onUrlChanged;
-
- // On urlChanged stream
- StreamSubscription _onStateChanged;
-
- StreamSubscription _onHttpError;
-
- StreamSubscription _onProgressChanged;
-
- StreamSubscription _onScrollYChanged;
-
- StreamSubscription _onScrollXChanged;
-
- final _urlCtrl = TextEditingController(text: selectedUrl);
-
- final _codeCtrl = TextEditingController(text: 'window.navigator.userAgent');
-
- final _scaffoldKey = GlobalKey();
-
- final _history = [];
+ final Completer _controller =
+ Completer();
@override
void initState() {
super.initState();
-
- flutterWebViewPlugin.close();
-
- _getUserUUID().then((_thisId) {
- userUuid = _thisId;
- });
-
- _urlCtrl.addListener(() {
- // selectedUrl = _urlCtrl.text;
- });
-
- // Add a listener to on destroy WebView, so you can make came actions.
- _onDestroy = flutterWebViewPlugin.onDestroy.listen((_) {
- if (mounted) {
- // Actions like show a info toast.
- _scaffoldKey.currentState.showSnackBar(
- const SnackBar(content: const Text('Webview Destroyed')));
- }
- });
-
- // Add a listener to on url changed
- _onUrlChanged = flutterWebViewPlugin.onUrlChanged.listen((String url) {
- if (url == "https://ee.kobotoolbox.org/thanks") {
- Navigator.pop(context);
- }
-
- if (mounted) {
- setState(() {
- _history.add('onUrlChanged: $url');
- });
- }
- });
-
- _onProgressChanged =
- flutterWebViewPlugin.onProgressChanged.listen((double progress) {
- if (mounted) {
- setState(() {
- _history.add('onProgressChanged: $progress');
- });
- }
- });
-
- _onScrollYChanged =
- flutterWebViewPlugin.onScrollYChanged.listen((double y) {
- if (mounted) {
- setState(() {
- _history.add('Scroll in Y Direction: $y');
-
- if (userUuid != null) {
- _setFormUUID(userUuid);
- } else {
- _getUserUUID().then((_thisId) {
- userUuid = _thisId;
- _setFormUUID(userUuid);
- });
- }
- });
- }
- });
-
- _onScrollXChanged =
- flutterWebViewPlugin.onScrollXChanged.listen((double x) {
- if (mounted) {
- setState(() {
- _history.add('Scroll in X Direction: $x');
- });
- }
- });
-
- _onStateChanged =
- flutterWebViewPlugin.onStateChanged.listen((viewState) async {
- if (mounted) {
- setState(() {
- _history.add('onStateChanged: ${viewState.type} ${viewState.url}');
- });
- }
- });
-
- _onHttpError =
- flutterWebViewPlugin.onHttpError.listen((WebViewHttpError error) {
- if (mounted) {
- setState(() {
- _history.add('onHttpError: ${error.code} ${error.url}');
- });
- }
- });
- }
-
- @override
- void dispose() {
- // Every listener should be canceled, the same should be done with this stream.
- _onDestroy.cancel();
- _onUrlChanged.cancel();
- _onStateChanged.cancel();
- _onHttpError.cancel();
- _onProgressChanged.cancel();
- _onScrollXChanged.cancel();
- _onScrollYChanged.cancel();
-
- flutterWebViewPlugin.dispose();
-
- super.dispose();
+ if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}
@override
Widget build(BuildContext context) {
- return WebviewScaffold(
- url: selectedUrl,
+ return Scaffold(
appBar: AppBar(
title: const Text('Survey'),
+ // This drop down menu demonstrates that Flutter widgets can be shown over the web view.
+ actions: [
+ NavigationControls(_controller.future),
+ ],
),
- withZoom: true,
- withLocalStorage: true,
- hidden: true,
- initialChild: Container(
- color: Colors.grey,
- child: const Center(
- child: const Text('Loading...'),
- ),
- ),
+ // We're using a Builder here so we have a context that is below the Scaffold
+ // to allow calling Scaffold.of(context) so we can show a snackbar.
+ body: Builder(builder: (BuildContext context) {
+ return WebView(
+ initialUrl: 'https://ee.kobotoolbox.org/single/asCwpCjZ',
+ javascriptMode: JavascriptMode.unrestricted,
+ onWebViewCreated: (WebViewController webViewController) {
+ _controller.complete(webViewController);
+ },
+ onProgress: (int progress) {
+ print("WebView is loading (progress : $progress%)");
+ },
+ javascriptChannels: {
+ _toasterJavascriptChannel(context),
+ },
+ navigationDelegate: (NavigationRequest request) {
+ if (request.url.startsWith('https://www.youtube.com/')) {
+ print('blocking navigation to $request}');
+ return NavigationDecision.prevent;
+ }
+ print('allowing navigation to $request');
+ return NavigationDecision.navigate;
+ },
+ onPageStarted: (String url) {
+ print('Page started loading: $url');
+ },
+ onPageFinished: (String url) {
+ print('Page finished loading: $url');
+ },
+ gestureNavigationEnabled: true,
+ );
+ }),
);
}
- Future _getUserUUID() async {
- SharedPreferences prefs = await _prefs;
- String _userUuid = prefs.getString("user_uuid");
- if (_userUuid == null) {
- prefs.setString("user_uuid", Uuid().v4());
- }
- print(_userUuid);
- return (_userUuid);
+ JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
+ return JavascriptChannel(
+ name: 'Toaster',
+ onMessageReceived: (JavascriptMessage message) {
+ // ignore: deprecated_member_use
+ Scaffold.of(context).showSnackBar(
+ SnackBar(content: Text(message.message)),
+ );
+ });
}
+}
+
+class NavigationControls extends StatelessWidget {
+ const NavigationControls(this._webViewControllerFuture);
+
+ final Future _webViewControllerFuture;
- void _setFormUUID(_thisId) {
- flutterWebViewPlugin.evalJavascript(
- 'var event = new Event("change", {bubbles: true,cancelable: true,}); var this_input = document.getElementsByName("' +
- userUUID_element +
- '")[0];this_input.value="' +
- _thisId +
- '";this_input.dispatchEvent(event); this_input.style.visibility = "hidden"; var id_labels = document.querySelectorAll("[data-itext-id=\'' +
- userUUID_label +
- '\']"); for (var i = 0; i < id_labels.length; i++) id_labels[i].innerHTML = "ID: ' +
- _thisId +
- '";');
- print(_thisId);
- print("URL " + selectedUrl);
+ @override
+ Widget build(BuildContext context) {
+ return FutureBuilder(
+ future: _webViewControllerFuture,
+ builder:
+ (BuildContext context, AsyncSnapshot snapshot) {
+ final bool webViewReady =
+ snapshot.connectionState == ConnectionState.done;
+ final WebViewController? controller = snapshot.data;
+ return Row(
+ children: [
+ IconButton(
+ icon: const Icon(Icons.replay),
+ onPressed: !webViewReady
+ ? null
+ : () {
+ controller!.reload();
+ },
+ ),
+ ],
+ );
+ },
+ );
}
}
-*/
\ No newline at end of file
diff --git a/Space_Mapper/lib/util/dialog.dart b/Space_Mapper/lib/util/dialog.dart
index ab6c36d2..4669bc96 100644
--- a/Space_Mapper/lib/util/dialog.dart
+++ b/Space_Mapper/lib/util/dialog.dart
@@ -40,7 +40,8 @@ const SOUND_MAP = {
/// - [showLoading]
///
class Dialog {
- static void confirm(BuildContext context, String title, String message, Function(bool) callback) {
+ static void confirm(BuildContext context, String title, String message,
+ Function(bool) callback) {
showDialog(
context: context,
barrierDismissible: false,
@@ -69,7 +70,8 @@ class Dialog {
);
}
- static void alert(BuildContext context, String title, String message, [Function callback]) {
+ static void alert(BuildContext context, String title, String message,
+ [Function? callback]) {
showDialog(
context: context,
barrierDismissible: false,
@@ -93,56 +95,54 @@ class Dialog {
);
}
- static Future prompt(BuildContext context, {String title, String labelText, String hintText, String value}) {
+ static Future prompt(BuildContext context,
+ {String? title, String? labelText, String? hintText, String? value}) {
TextEditingController controller = new TextEditingController(text: value);
Completer completer = new Completer();
- String submittedValue = value;
+ String submittedValue = value!;
showDialog(
context: context,
builder: (BuildContext context) {
return new AlertDialog(
- title: Text(title),
+ title: Text(title!),
contentPadding: const EdgeInsets.all(16.0),
content: SizedBox(
height: 100.0,
- child: Column(
+ child: Column(children: [
+ //new Text(''), TODO could add some paragrah here before text-field.
+ new Row(
children: [
- //new Text(''), TODO could add some paragrah here before text-field.
- new Row(
- children: [
- Expanded(
- child: new TextField(
- controller: controller,
- onChanged: (String value) {
- submittedValue = value;
- },
- autofocus: true,
- decoration: new InputDecoration(
- labelText: labelText, hintText: hintText,
- ),
- ))
- ],
- ),
- ]
- ),
+ Expanded(
+ child: new TextField(
+ controller: controller,
+ onChanged: (String value) {
+ submittedValue = value;
+ },
+ autofocus: true,
+ decoration: new InputDecoration(
+ labelText: labelText,
+ hintText: hintText,
+ ),
+ ))
+ ],
+ ),
+ ]),
),
actions: [
new FlatButton(
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
- }
- ),
+ }),
new FlatButton(
child: Text('Submit'),
onPressed: () {
Navigator.of(context).pop();
completer.complete(submittedValue);
- }
- )
+ })
],
);
},
@@ -150,20 +150,20 @@ class Dialog {
return completer.future;
}
- static Future showLoading(BuildContext context, String message) {
+ static Future showLoading(BuildContext context, String message) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return CircularProgressIndicator();
- }
- );
+ });
}
+
// TODO return dynamic until iOS supports String sound ids.
static dynamic getSoundId(String key) {
key = key.toUpperCase();
dynamic soundId = -1;
- Map soundMap;
+ Map? soundMap;
if (defaultTargetPlatform == TargetPlatform.android) {
soundMap = SOUND_MAP["android"];
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
@@ -174,4 +174,4 @@ class Dialog {
}
return soundId;
}
-}
\ No newline at end of file
+}
diff --git a/Space_Mapper/lib/util/spacemapper_auth.dart b/Space_Mapper/lib/util/spacemapper_auth.dart
index 4f4a69d3..5dddd600 100644
--- a/Space_Mapper/lib/util/spacemapper_auth.dart
+++ b/Space_Mapper/lib/util/spacemapper_auth.dart
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
+import 'package:flutter_background_geolocation/flutter_background_geolocation.dart'
+ as bg;
import 'ENV.dart';
void _onHttp(bg.HttpEvent event) async {
-
switch (event.status) {
case 403:
case 406:
@@ -19,7 +19,8 @@ void _onHttp(bg.HttpEvent event) async {
}
break;
case 410:
- print('[TransistorAuth] It seems this device has been destroyed from the server. The authentication token is no longer valid.');
+ print(
+ '[TransistorAuth] It seems this device has been destroyed from the server. The authentication token is no longer valid.');
// For now in this case we will do nothing. Consider alternatives
break;
}
@@ -32,18 +33,19 @@ class TransistorAuth {
try {
SharedPreferences prefs = await _prefs;
// Request a JWT from server
- String sample_id = prefs.getString("sample_id");
- String user_uuid = prefs.getString("user_uuid");
+ String? sample_id = prefs.getString("sample_id");
+ String? user_uuid = prefs.getString("user_uuid");
if (sample_id == null || user_uuid == null) {
// TODO throw an Error instead.
return false;
}
- bg.TransistorAuthorizationToken jwt = await bg.TransistorAuthorizationToken.findOrCreate(sample_id, user_uuid, ENV.TRACKER_HOST);
+ bg.TransistorAuthorizationToken jwt =
+ await bg.TransistorAuthorizationToken.findOrCreate(
+ sample_id, user_uuid, ENV.TRACKER_HOST);
- await bg.BackgroundGeolocation.setConfig(bg.Config(
- transistorAuthorizationToken: jwt
- ));
+ await bg.BackgroundGeolocation.setConfig(
+ bg.Config(transistorAuthorizationToken: jwt));
return true;
} catch (error) {
print("[ERROR] $error");
@@ -54,7 +56,7 @@ class TransistorAuth {
static Future registerErrorHandler() async {
bg.State state = await bg.BackgroundGeolocation.state;
- if ((state.params != null) && (state.params['device'] != null)) {
+ if ((state.params != null) && (state.params!['device'] != null)) {
_migrateConfig();
}
bg.BackgroundGeolocation.removeListener(_onHttp);
@@ -72,7 +74,6 @@ class TransistorAuth {
stopOnTerminate: false,
startOnBoot: true,
url: "${ENV.TRACKER_HOST}/api/locations",
- params: {}
- ));
+ params: {}));
}
-}
\ No newline at end of file
+}
diff --git a/Space_Mapper/pubspec.lock b/Space_Mapper/pubspec.lock
index 72652ea8..3e8547ca 100644
--- a/Space_Mapper/pubspec.lock
+++ b/Space_Mapper/pubspec.lock
@@ -1,13 +1,6 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
- ansicolor:
- dependency: transitive
- description:
- name: ansicolor
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.0.2"
async:
dependency: transitive
description:
@@ -21,7 +14,7 @@ packages:
name: background_fetch
url: "https://pub.dartlang.org"
source: hosted
- version: "0.5.5"
+ version: "1.0.1"
boolean_selector:
dependency: transitive
description:
@@ -29,13 +22,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
- cached_network_image:
- dependency: transitive
- description:
- name: cached_network_image
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.2.0+1"
characters:
dependency: transitive
description:
@@ -64,34 +50,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
- console_log_handler:
- dependency: transitive
- description:
- name: console_log_handler
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.6"
- convert:
- dependency: transitive
- description:
- name: convert
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.4"
+ version: "3.0.1"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.3"
+ version: "1.0.3"
fake_async:
dependency: transitive
description:
@@ -99,13 +71,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
- version: "5.1.0"
+ version: "6.1.2"
flutter:
dependency: "direct main"
description: flutter
@@ -117,14 +96,7 @@ packages:
name: flutter_background_geolocation
url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.3"
- flutter_cache_manager:
- dependency: transitive
- description:
- name: flutter_cache_manager
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.2.2"
+ version: "4.3.0"
flutter_form_builder:
dependency: "direct main"
description:
@@ -132,13 +104,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.0+1"
- flutter_image:
- dependency: transitive
- description:
- name: flutter_image
- url: "https://pub.dartlang.org"
- source: hosted
- version: "3.0.0"
flutter_localizations:
dependency: transitive
description: flutter
@@ -150,7 +115,7 @@ packages:
name: flutter_map
url: "https://pub.dartlang.org"
source: hosted
- version: "0.9.0"
+ version: "0.14.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -167,14 +132,14 @@ packages:
name: http
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.1"
+ version: "0.13.4"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
- version: "3.1.4"
+ version: "4.0.0"
intl:
dependency: transitive
description:
@@ -189,27 +154,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3"
- latlong:
- dependency: transitive
+ latlong2:
+ dependency: "direct main"
description:
- name: latlong
+ name: latlong2
url: "https://pub.dartlang.org"
source: hosted
- version: "0.6.1"
+ version: "0.8.1"
lists:
dependency: transitive
description:
name: lists
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.6"
- logging:
- dependency: transitive
- description:
- name: logging
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.11.4"
+ version: "1.0.1"
matcher:
dependency: transitive
description:
@@ -230,7 +188,14 @@ packages:
name: mgrs_dart
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.1"
+ version: "2.0.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.0"
path:
dependency: transitive
description:
@@ -244,105 +209,126 @@ packages:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
- version: "1.6.7"
+ version: "2.0.5"
+ path_provider_linux:
+ dependency: transitive
+ description:
+ name: path_provider_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.0"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
- version: "0.0.4+2"
+ version: "2.0.2"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.1"
- pedantic:
+ version: "2.0.1"
+ path_provider_windows:
dependency: transitive
description:
- name: pedantic
+ name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
- version: "1.8.0+1"
+ version: "2.0.3"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.1"
+ version: "3.0.2"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3"
- positioned_tap_detector:
+ version: "2.0.2"
+ positioned_tap_detector_2:
dependency: transitive
description:
- name: positioned_tap_detector
+ name: positioned_tap_detector_2
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3"
- proj4dart:
+ version: "1.0.4"
+ process:
dependency: transitive
description:
- name: proj4dart
+ name: process
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.5"
- quiver:
+ version: "4.2.3"
+ proj4dart:
dependency: transitive
description:
- name: quiver
+ name: proj4dart
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.3"
- rxdart:
+ version: "2.0.0"
+ quiver:
dependency: transitive
description:
- name: rxdart
+ name: quiver
url: "https://pub.dartlang.org"
source: hosted
- version: "0.24.0"
+ version: "3.0.1"
share:
dependency: "direct main"
description:
name: share
url: "https://pub.dartlang.org"
source: hosted
- version: "0.6.4+1"
+ version: "2.0.4"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
- version: "0.5.7+1"
+ version: "2.0.8"
+ shared_preferences_linux:
+ dependency: transitive
+ description:
+ name: shared_preferences_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.2"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
- version: "0.0.1+8"
+ version: "2.0.2"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3"
+ version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.2+5"
+ version: "2.0.2"
+ shared_preferences_windows:
+ dependency: transitive
+ description:
+ name: shared_preferences_windows
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.2"
sky_engine:
dependency: transitive
description: flutter
@@ -361,14 +347,14 @@ packages:
name: sqflite
url: "https://pub.dartlang.org"
source: hosted
- version: "1.3.0+1"
+ version: "2.0.0+4"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.1"
+ version: "2.0.1+1"
stack_trace:
dependency: transitive
description:
@@ -396,7 +382,7 @@ packages:
name: synchronized
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.0"
+ version: "3.0.0"
term_glyph:
dependency: transitive
description:
@@ -417,14 +403,14 @@ packages:
name: transparent_image
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.0"
+ version: "2.0.0"
tuple:
dependency: transitive
description:
name: tuple
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3"
+ version: "2.0.0"
typed_data:
dependency: transitive
description:
@@ -438,63 +424,112 @@ packages:
name: unicode
url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.3"
+ version: "0.3.1"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
- version: "5.4.5"
+ version: "6.0.12"
+ url_launcher_linux:
+ dependency: transitive
+ description:
+ name: url_launcher_linux
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.2"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
url: "https://pub.dartlang.org"
source: hosted
- version: "0.0.1+5"
+ version: "2.0.2"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.6"
+ version: "2.0.4"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.1+4"
+ version: "2.0.4"
+ url_launcher_windows:
+ dependency: transitive
+ description:
+ name: url_launcher_windows
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.2"
uuid:
dependency: "direct main"
description:
name: uuid
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.4"
- validate:
+ version: "3.0.5"
+ vector_math:
dependency: transitive
description:
- name: validate
+ name: vector_math
url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.0"
- vector_math:
+ version: "2.1.0"
+ webview_flutter:
+ dependency: "direct main"
+ description:
+ name: webview_flutter
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.1.1"
+ webview_flutter_android:
dependency: transitive
description:
- name: vector_math
+ name: webview_flutter_android
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.0"
+ version: "2.0.15"
+ webview_flutter_platform_interface:
+ dependency: transitive
+ description:
+ name: webview_flutter_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.2.0"
+ webview_flutter_wkwebview:
+ dependency: transitive
+ description:
+ name: webview_flutter_wkwebview
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.14"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.9"
wkt_parser:
dependency: transitive
description:
name: wkt_parser
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.7"
+ version: "2.0.0"
+ xdg_directories:
+ dependency: transitive
+ description:
+ name: xdg_directories
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.2.0"
sdks:
- dart: ">=2.12.0 <3.0.0"
- flutter: ">=1.12.13+hotfix.5"
+ dart: ">=2.14.0 <3.0.0"
+ flutter: ">=2.5.0"
diff --git a/Space_Mapper/pubspec.yaml b/Space_Mapper/pubspec.yaml
index bb6436f9..4db4da4f 100644
--- a/Space_Mapper/pubspec.yaml
+++ b/Space_Mapper/pubspec.yaml
@@ -14,27 +14,29 @@ description: Flutter version of Space Mapper with 2020 upgrades
version: 3.0.2+18
environment:
- sdk: ">=2.2.2 <3.0.0"
+ sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
- flutter_background_geolocation: '^1.3.2'
- shared_preferences: ^0.5.6
- background_fetch: ^0.5.3
- url_launcher: ^5.2.5
- http: ^0.12.1
- flutter_map: ^0.9.0
- # flutter_webview_plugin: ^0.3.11
- sqflite: ^1.3.0
- path_provider: ^1.6.7
- share: ^0.6.4+1
- uuid: 2.0.4
+ flutter_background_geolocation: ^4.3.0
+ shared_preferences: ^2.0.8
+ background_fetch: ^1.0.1
+ url_launcher: ^6.0.12
+ http: ^0.13.4
+ flutter_map: ^0.14.0
+ # flutter_webview_plugin: ^0.4.0
+ webview_flutter: ^2.1.1
+ sqflite: ^2.0.0+4
+ path_provider: ^2.0.5
+ share: ^2.0.4
+ uuid: 3.0.5
flutter_form_builder: ^6.1.0+1
+ latlong2: ^0.8.1
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: ^0.1.2
+ cupertino_icons: ^1.0.3
dev_dependencies:
flutter_test: