diff --git a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java index a2da4fda..d5e96421 100644 --- a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java +++ b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java @@ -97,6 +97,7 @@ private void openUrl(MethodCall call, MethodChannel.Result result) { Map headers = call.argument("headers"); boolean scrollBar = call.argument("scrollBar"); boolean allowFileURLs = call.argument("allowFileURLs"); + boolean geolocationEnabled = call.argument("geolocationEnabled"); if (webViewManager == null || webViewManager.closed == true) { webViewManager = new WebviewManager(activity); @@ -118,7 +119,8 @@ private void openUrl(MethodCall call, MethodChannel.Result result) { scrollBar, supportMultipleWindows, appCacheEnabled, - allowFileURLs + allowFileURLs, + geolocationEnabled ); result.success(null); } diff --git a/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java b/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java index 1dd8491f..2641f8d9 100644 --- a/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java +++ b/android/src/main/java/com/flutter_webview_plugin/WebviewManager.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.webkit.CookieManager; +import android.webkit.GeolocationPermissions; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; @@ -204,7 +205,8 @@ void openUrl( boolean scrollBar, boolean supportMultipleWindows, boolean appCacheEnabled, - boolean allowFileURLs + boolean allowFileURLs, + boolean geolocationEnabled ) { webView.getSettings().setJavaScriptEnabled(withJavascript); webView.getSettings().setBuiltInZoomControls(withZoom); @@ -219,6 +221,16 @@ void openUrl( webView.getSettings().setAllowFileAccessFromFileURLs(allowFileURLs); webView.getSettings().setAllowUniversalAccessFromFileURLs(allowFileURLs); + if (geolocationEnabled) { + webView.getSettings().setGeolocationEnabled(true); + webView.setWebChromeClient(new WebChromeClient() { + @Override + public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { + callback.invoke(origin, true, false); + } + }); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); } diff --git a/lib/src/base.dart b/lib/src/base.dart index 91101810..d0b232ab 100644 --- a/lib/src/base.dart +++ b/lib/src/base.dart @@ -110,6 +110,7 @@ class FlutterWebviewPlugin { bool supportMultipleWindows, bool appCacheEnabled, bool allowFileURLs, + bool geolocationEnabled, }) async { final args = { 'url': url, @@ -126,6 +127,7 @@ class FlutterWebviewPlugin { 'supportMultipleWindows': supportMultipleWindows ?? false, 'appCacheEnabled': appCacheEnabled ?? false, 'allowFileURLs': allowFileURLs ?? false, + 'geolocationEnabled': geolocationEnabled ?? false, }; if (headers != null) { diff --git a/lib/src/webview_scaffold.dart b/lib/src/webview_scaffold.dart index 8df7b05f..7d4f9e0b 100644 --- a/lib/src/webview_scaffold.dart +++ b/lib/src/webview_scaffold.dart @@ -30,6 +30,7 @@ class WebviewScaffold extends StatefulWidget { this.hidden = false, this.initialChild, this.allowFileURLs, + this.geolocationEnabled }) : super(key: key); final PreferredSizeWidget appBar; @@ -52,6 +53,7 @@ class WebviewScaffold extends StatefulWidget { final bool hidden; final Widget initialChild; final bool allowFileURLs; + final bool geolocationEnabled; @override _WebviewScaffoldState createState() => _WebviewScaffoldState(); @@ -115,6 +117,7 @@ class _WebviewScaffoldState extends State { supportMultipleWindows: widget.supportMultipleWindows, appCacheEnabled: widget.appCacheEnabled, allowFileURLs: widget.allowFileURLs, + geolocationEnabled: widget.geolocationEnabled ); } else { if (_rect != value) {