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 53c51434..e125c366 100644 --- a/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java +++ b/android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java @@ -61,6 +61,9 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { case "back": back(call, result); break; + case "canGoBack": + canGoBack(call, result); + break; case "forward": forward(call, result); break; @@ -175,6 +178,13 @@ private void back(MethodCall call, MethodChannel.Result result) { result.success(null); } + private void canGoBack(MethodCall call, MethodChannel.Result result) { + if (webViewManager != null) { + result.success(webViewManager.canGoBack()); + } + result.success(null); + } + /** * Navigates forward on the Webview. */ diff --git a/ios/Classes/FlutterWebviewPlugin.m b/ios/Classes/FlutterWebviewPlugin.m index da8afcc4..67317b97 100644 --- a/ios/Classes/FlutterWebviewPlugin.m +++ b/ios/Classes/FlutterWebviewPlugin.m @@ -64,6 +64,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { } else if ([@"back" isEqualToString:call.method]) { [self back]; result(nil); + } else if ([@"canGoBack" isEqualToString:call.method]) { + result([NSNumber numberWithBool:self.webview.canGoBack]); } else if ([@"forward" isEqualToString:call.method]) { [self forward]; result(nil); @@ -88,12 +90,28 @@ - (void)initWebview:(FlutterMethodCall*)call { _invalidUrlRegex = call.arguments[@"invalidUrlRegex"]; if (clearCache != (id)[NSNull null] && [clearCache boolValue]) { - [[NSURLCache sharedURLCache] removeAllCachedResponses]; + if (@available(iOS 11.3, *)) { + NSSet *dataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeFetchCache]]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:dataTypes modifiedSince:[NSDate dateWithTimeIntervalSince1970:0] completionHandler:^(){ + }]; + } else if (@available(iOS 9.0, *)) { + NSSet *dataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:dataTypes modifiedSince:[NSDate dateWithTimeIntervalSince1970:0] completionHandler:^(){ + }]; + } else { + [[NSURLCache sharedURLCache] removeAllCachedResponses]; + } } if (clearCookies != (id)[NSNull null] && [clearCookies boolValue]) { - [[NSURLSession sharedSession] resetWithCompletionHandler:^{ - }]; + if (@available(iOS 9.0, *)) { + NSSet *dataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeCookies]]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:dataTypes modifiedSince:[NSDate dateWithTimeIntervalSince1970:0] completionHandler:^(){ + }]; + } else { + [[NSURLSession sharedSession] resetWithCompletionHandler:^{ + }]; + } } if (userAgent != (id)[NSNull null]) { diff --git a/lib/src/base.dart b/lib/src/base.dart index 1afa1f2c..260a9761 100644 --- a/lib/src/base.dart +++ b/lib/src/base.dart @@ -182,6 +182,8 @@ class FlutterWebviewPlugin { /// Navigates back on the Webview. Future goBack() async => await _channel.invokeMethod('back'); + Future canGoBack() async => await _channel.invokeMethod('canGoBack'); + /// Navigates forward on the Webview. Future goForward() async => await _channel.invokeMethod('forward');