Skip to content

Commit 7753313

Browse files
committed
merge codes
2 parents caa8f92 + 271e68b commit 7753313

File tree

6 files changed

+52
-6
lines changed

6 files changed

+52
-6
lines changed

android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ private void openUrl(MethodCall call, MethodChannel.Result result) {
9999
boolean allowFileURLs = call.argument("allowFileURLs");
100100
boolean useWideViewPort = call.argument("useWideViewPort");
101101
String invalidUrlRegex = call.argument("invalidUrlRegex");
102+
boolean geolocationEnabled = call.argument("geolocationEnabled");
102103

103104
if (webViewManager == null || webViewManager.closed == true) {
104105
webViewManager = new WebviewManager(activity);
@@ -122,7 +123,8 @@ private void openUrl(MethodCall call, MethodChannel.Result result) {
122123
appCacheEnabled,
123124
allowFileURLs,
124125
useWideViewPort,
125-
invalidUrlRegex
126+
invalidUrlRegex,
127+
geolocationEnabled
126128
);
127129
result.success(null);
128130
}
@@ -151,6 +153,7 @@ private void stopLoading(MethodCall call, MethodChannel.Result result) {
151153
if (webViewManager != null) {
152154
webViewManager.stopLoading(call, result);
153155
}
156+
result.success(null);
154157
}
155158

156159
private void close(MethodCall call, MethodChannel.Result result) {
@@ -167,6 +170,7 @@ private void back(MethodCall call, MethodChannel.Result result) {
167170
if (webViewManager != null) {
168171
webViewManager.back(call, result);
169172
}
173+
result.success(null);
170174
}
171175

172176
/**
@@ -176,6 +180,7 @@ private void forward(MethodCall call, MethodChannel.Result result) {
176180
if (webViewManager != null) {
177181
webViewManager.forward(call, result);
178182
}
183+
result.success(null);
179184
}
180185

181186
/**
@@ -185,13 +190,15 @@ private void reload(MethodCall call, MethodChannel.Result result) {
185190
if (webViewManager != null) {
186191
webViewManager.reload(call, result);
187192
}
193+
result.success(null);
188194
}
189195

190196
private void reloadUrl(MethodCall call, MethodChannel.Result result) {
191197
if (webViewManager != null) {
192198
String url = call.argument("url");
193199
webViewManager.reloadUrl(url);
194200
}
201+
result.success(null);
195202
}
196203

197204
private void eval(MethodCall call, final MethodChannel.Result result) {
@@ -212,12 +219,14 @@ private void hide(MethodCall call, final MethodChannel.Result result) {
212219
if (webViewManager != null) {
213220
webViewManager.hide(call, result);
214221
}
222+
result.success(null);
215223
}
216224

217225
private void show(MethodCall call, final MethodChannel.Result result) {
218226
if (webViewManager != null) {
219227
webViewManager.show(call, result);
220228
}
229+
result.success(null);
221230
}
222231

223232
private void cleanCookies(MethodCall call, final MethodChannel.Result result) {

android/src/main/java/com/flutter_webview_plugin/WebviewManager.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.view.View;
1010
import android.view.ViewGroup;
1111
import android.webkit.CookieManager;
12+
import android.webkit.GeolocationPermissions;
1213
import android.webkit.ValueCallback;
1314
import android.webkit.WebChromeClient;
1415
import android.webkit.WebSettings;
@@ -205,7 +206,8 @@ void openUrl(
205206
boolean appCacheEnabled,
206207
boolean allowFileURLs,
207208
boolean useWideViewPort,
208-
String invalidUrlRegex
209+
String invalidUrlRegex,
210+
boolean geolocationEnabled
209211
) {
210212
webView.getSettings().setJavaScriptEnabled(withJavascript);
211213
webView.getSettings().setBuiltInZoomControls(withZoom);
@@ -224,6 +226,16 @@ void openUrl(
224226

225227
webViewClient.updateInvalidUrlRegex(invalidUrlRegex);
226228

229+
if (geolocationEnabled) {
230+
webView.getSettings().setGeolocationEnabled(true);
231+
webView.setWebChromeClient(new WebChromeClient() {
232+
@Override
233+
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
234+
callback.invoke(origin, true, false);
235+
}
236+
});
237+
}
238+
227239
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
228240
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
229241
}
@@ -233,7 +245,7 @@ void openUrl(
233245
}
234246

235247
if (hidden) {
236-
webView.setVisibility(View.INVISIBLE);
248+
webView.setVisibility(View.GONE);
237249
}
238250

239251
if (clearCookies) {
@@ -330,7 +342,7 @@ boolean canGoForward() {
330342
}
331343
void hide(MethodCall call, MethodChannel.Result result) {
332344
if (webView != null) {
333-
webView.setVisibility(View.INVISIBLE);
345+
webView.setVisibility(View.GONE);
334346
}
335347
}
336348
void show(MethodCall call, MethodChannel.Result result) {

ios/Classes/FlutterWebviewPlugin.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
static NSString *const CHANNEL_NAME = @"flutter_webview_plugin";
44

55
// UIWebViewDelegate
6-
@interface FlutterWebviewPlugin() <WKNavigationDelegate, UIScrollViewDelegate> {
6+
@interface FlutterWebviewPlugin() <WKNavigationDelegate, UIScrollViewDelegate, WKUIDelegate> {
77
BOOL _enableAppScheme;
88
BOOL _enableZoom;
99
NSString* _invalidUrlRegex;
@@ -108,6 +108,7 @@ - (void)initWebview:(FlutterMethodCall*)call {
108108
}
109109

110110
self.webview = [[WKWebView alloc] initWithFrame:rc];
111+
self.webview.UIDelegate = self;
111112
self.webview.navigationDelegate = self;
112113
self.webview.scrollView.delegate = self;
113114
self.webview.hidden = [hidden boolValue];
@@ -293,6 +294,15 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati
293294
}
294295
}
295296

297+
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration
298+
forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
299+
300+
if (!navigationAction.targetFrame.isMainFrame) {
301+
[webView loadRequest:navigationAction.request];
302+
}
303+
304+
return nil;
305+
}
296306

297307
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
298308
[channel invokeMethod:@"onState" arguments:@{@"type": @"startLoad", @"url": webView.URL.absoluteString}];

lib/src/base.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class FlutterWebviewPlugin {
115115
bool allowFileURLs,
116116
bool useWideViewPort,
117117
String invalidUrlRegex,
118+
bool geolocationEnabled,
118119
}) async {
119120
final args = <String, dynamic>{
120121
'url': url,
@@ -133,6 +134,7 @@ class FlutterWebviewPlugin {
133134
'allowFileURLs': allowFileURLs ?? false,
134135
'useWideViewPort': useWideViewPort ?? false,
135136
'invalidUrlRegex': invalidUrlRegex,
137+
'geolocationEnabled': geolocationEnabled ?? false,
136138
};
137139

138140
if (headers != null) {

lib/src/webview_scaffold.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class WebviewScaffold extends StatefulWidget {
3131
this.initialChild,
3232
this.allowFileURLs,
3333
this.invalidUrlRegex,
34+
this.geolocationEnabled
3435
}) : super(key: key);
3536

3637
final PreferredSizeWidget appBar;
@@ -54,6 +55,7 @@ class WebviewScaffold extends StatefulWidget {
5455
final Widget initialChild;
5556
final bool allowFileURLs;
5657
final String invalidUrlRegex;
58+
final bool geolocationEnabled;
5759

5860
@override
5961
_WebviewScaffoldState createState() => _WebviewScaffoldState();
@@ -65,11 +67,19 @@ class _WebviewScaffoldState extends State<WebviewScaffold> {
6567
Timer _resizeTimer;
6668
StreamSubscription<WebViewStateChanged> _onStateChanged;
6769

70+
var _onDestroy;
71+
6872
@override
6973
void initState() {
7074
super.initState();
7175
webviewReference.close();
7276

77+
_onDestroy = webviewReference.onDestroy.listen((_) {
78+
if (mounted) {
79+
Navigator.of(context).pop();
80+
}
81+
});
82+
7383
if (widget.hidden) {
7484
_onStateChanged = webviewReference.onStateChanged.listen((WebViewStateChanged state) {
7585
if (state.type == WebViewState.finishLoad) {
@@ -82,6 +92,7 @@ class _WebviewScaffoldState extends State<WebviewScaffold> {
8292
@override
8393
void dispose() {
8494
super.dispose();
95+
_onDestroy?.cancel();
8596
_resizeTimer?.cancel();
8697
webviewReference.close();
8798
if (widget.hidden) {
@@ -94,6 +105,7 @@ class _WebviewScaffoldState extends State<WebviewScaffold> {
94105
Widget build(BuildContext context) {
95106
return Scaffold(
96107
appBar: widget.appBar,
108+
resizeToAvoidBottomInset: false,
97109
persistentFooterButtons: widget.persistentFooterButtons,
98110
bottomNavigationBar: widget.bottomNavigationBar,
99111
body: _WebviewPlaceholder(
@@ -118,6 +130,7 @@ class _WebviewScaffoldState extends State<WebviewScaffold> {
118130
appCacheEnabled: widget.appCacheEnabled,
119131
allowFileURLs: widget.allowFileURLs,
120132
invalidUrlRegex: widget.invalidUrlRegex,
133+
geolocationEnabled: widget.geolocationEnabled
121134
);
122135
} else {
123136
if (_rect != value) {

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ authors:
77
- Simon Lightfoot <[email protected]>
88
- Rafal Wachol <[email protected]>
99
homepage: https://github.com/dart-flitter/flutter_webview_plugin
10-
version: 0.3.0+2
10+
version: 0.3.1
1111
maintainer: Simon Lightfoot (@slightfoot)
1212

1313
environment:

0 commit comments

Comments
 (0)