Commit 305c7262 authored by pichillilorenzo's avatar pichillilorenzo

added WebHistory and WebHistoryItem class, added getCopyBackForwardList,...

added WebHistory and WebHistoryItem class, added getCopyBackForwardList, goBackOrForward, canGoBackOrForward and goTo methods for InAppWebView and InAppBrowser, updated docs
parent ab7b1b68
...@@ -17,16 +17,15 @@ ...@@ -17,16 +17,15 @@
<list default="true" id="9b41f7a2-a71e-4923-91fb-249d7815b3e7" name="Default" comment=""> <list default="true" id="9b41f7a2-a71e-4923-91fb-249d7815b3e7" name="Default" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CHANGELOG.md" beforeDir="false" afterPath="$PROJECT_DIR$/CHANGELOG.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/CHANGELOG.md" beforeDir="false" afterPath="$PROJECT_DIR$/CHANGELOG.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/example/lib/main.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/main.dart" afterDir="false" /> <change beforePath="$PROJECT_DIR$/example/lib/main.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/main.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" afterDir="false" /> <change beforePath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/InAppBrowserWebViewController.swift" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ios/Classes/InAppWebView.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/InAppWebView.swift" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" afterDir="false" /> <change beforePath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/SwiftFlutterPlugin.swift" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" afterDir="false" /> <change beforePath="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" beforeDir="false" afterPath="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pubspec.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/pubspec.yaml" afterDir="false" />
</list> </list>
<ignored path="$PROJECT_DIR$/.dart_tool/" /> <ignored path="$PROJECT_DIR$/.dart_tool/" />
<ignored path="$PROJECT_DIR$/.idea/" /> <ignored path="$PROJECT_DIR$/.idea/" />
...@@ -46,8 +45,8 @@ ...@@ -46,8 +45,8 @@
<file leaf-file-name="flutter_inappbrowser.dart" pinned="false" current-in-tab="false"> <file leaf-file-name="flutter_inappbrowser.dart" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart"> <entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="561"> <state relative-caret-position="337">
<caret line="1037" column="43" selection-start-line="1037" selection-start-column="21" selection-end-line="1037" selection-end-column="43" /> <caret line="1101" column="17" selection-start-line="1101" selection-start-column="17" selection-end-line="1101" selection-end-column="17" />
<folding> <folding>
<element signature="e#814#831#0" expanded="true" /> <element signature="e#814#831#0" expanded="true" />
</folding> </folding>
...@@ -58,8 +57,8 @@ ...@@ -58,8 +57,8 @@
<file leaf-file-name="README.md" pinned="false" current-in-tab="false"> <file leaf-file-name="README.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/README.md"> <entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="351"> <state relative-caret-position="-534">
<caret line="48" column="126" selection-start-line="48" selection-start-column="126" selection-end-line="48" selection-end-column="126" /> <caret line="16" column="3" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<folding> <folding>
<element signature="e#0#20#0" expanded="true" /> <element signature="e#0#20#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" /> <element signature="e#0#39#0" expanded="true" />
...@@ -72,8 +71,8 @@ ...@@ -72,8 +71,8 @@
<file leaf-file-name="main.dart" pinned="false" current-in-tab="true"> <file leaf-file-name="main.dart" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/example/lib/main.dart"> <entry file="file://$PROJECT_DIR$/example/lib/main.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state> <state relative-caret-position="449">
<caret line="234" selection-start-line="234" selection-end-line="234" /> <caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<folding> <folding>
<element signature="e#0#20#0" expanded="true" /> <element signature="e#0#20#0" expanded="true" />
</folding> </folding>
...@@ -84,8 +83,8 @@ ...@@ -84,8 +83,8 @@
<file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="false"> <file leaf-file-name="CHANGELOG.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/CHANGELOG.md"> <entry file="file://$PROJECT_DIR$/CHANGELOG.md">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="120">
<caret line="6" selection-start-line="6" selection-end-line="6" /> <caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
</state> </state>
</provider> </provider>
</entry> </entry>
...@@ -173,9 +172,9 @@ ...@@ -173,9 +172,9 @@
<option value="$PROJECT_DIR$/example/ios/Flutter/Generated.xcconfig" /> <option value="$PROJECT_DIR$/example/ios/Flutter/Generated.xcconfig" />
<option value="$PROJECT_DIR$/example/pubspec.yaml" /> <option value="$PROJECT_DIR$/example/pubspec.yaml" />
<option value="$PROJECT_DIR$/pubspec.yaml" /> <option value="$PROJECT_DIR$/pubspec.yaml" />
<option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
<option value="$PROJECT_DIR$/CHANGELOG.md" />
<option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/CHANGELOG.md" />
<option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
<option value="$PROJECT_DIR$/example/lib/main.dart" /> <option value="$PROJECT_DIR$/example/lib/main.dart" />
</list> </list>
</option> </option>
...@@ -383,16 +382,16 @@ ...@@ -383,16 +382,16 @@
<layout> <layout>
<window_info anchor="bottom" id="Android Profiler" order="7" show_stripe_button="false" /> <window_info anchor="bottom" id="Android Profiler" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" />
<window_info active="true" anchor="bottom" id="Messages" order="12" visible="true" weight="0.23594266" /> <window_info anchor="bottom" id="Messages" order="12" weight="0.23594266" />
<window_info anchor="right" id="Palette&#9;" order="9" /> <window_info anchor="right" id="Palette&#9;" order="9" />
<window_info id="Image Layers" order="7" /> <window_info id="Image Layers" order="7" />
<window_info id="Build Variants" order="3" side_tool="true" /> <window_info id="Build Variants" order="3" side_tool="true" />
<window_info anchor="right" id="Capture Analysis" order="4" /> <window_info anchor="right" id="Capture Analysis" order="4" />
<window_info anchor="bottom" id="Event Log" order="8" sideWeight="0.5043937" side_tool="true" weight="0.30650496" /> <window_info anchor="bottom" id="Event Log" order="8" sideWeight="0.5052169" side_tool="true" weight="0.34068358" />
<window_info anchor="bottom" id="Dart Analysis" order="14" weight="0.3276414" /> <window_info anchor="bottom" id="Dart Analysis" order="14" weight="0.3276414" />
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.49644473" weight="0.34068358" /> <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49478307" weight="0.34068358" />
<window_info anchor="bottom" id="Version Control" order="9" /> <window_info anchor="bottom" id="Version Control" order="9" />
<window_info anchor="bottom" id="Terminal" order="10" sideWeight="0.49560633" weight="0.20066153" /> <window_info active="true" anchor="bottom" id="Terminal" order="10" sideWeight="0.49533224" visible="true" weight="0.20066153" />
<window_info anchor="right" id="Flutter Outline" order="6" weight="0.32922077" /> <window_info anchor="right" id="Flutter Outline" order="6" weight="0.32922077" />
<window_info anchor="bottom" id="Logcat" order="11" /> <window_info anchor="bottom" id="Logcat" order="11" />
<window_info id="Captures" order="4" weight="0.32936507" /> <window_info id="Captures" order="4" weight="0.32936507" />
...@@ -658,46 +657,46 @@ ...@@ -658,46 +657,46 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/CHANGELOG.md"> <entry file="file://$PROJECT_DIR$/pubspec.yaml">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90"> <state relative-caret-position="75">
<caret line="6" selection-start-line="6" selection-end-line="6" /> <caret line="5" selection-start-line="5" selection-end-line="5" />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/README.md"> <entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="351"> <state relative-caret-position="337">
<caret line="48" column="126" selection-start-line="48" selection-start-column="126" selection-end-line="48" selection-end-column="126" /> <caret line="1101" column="17" selection-start-line="1101" selection-start-column="17" selection-end-line="1101" selection-end-column="17" />
<folding> <folding>
<element signature="e#0#20#0" expanded="true" /> <element signature="e#814#831#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/pubspec.yaml"> <entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75"> <state relative-caret-position="-534">
<caret line="5" selection-start-line="5" selection-end-line="5" /> <caret line="16" column="3" selection-start-line="16" selection-start-column="3" selection-end-line="16" selection-end-column="3" />
<folding>
<element signature="e#0#20#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" />
<element signature="e#0#39#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart"> <entry file="file://$PROJECT_DIR$/CHANGELOG.md">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="561"> <state relative-caret-position="120">
<caret line="1037" column="43" selection-start-line="1037" selection-start-column="21" selection-end-line="1037" selection-end-column="43" /> <caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
<folding>
<element signature="e#814#831#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/example/lib/main.dart"> <entry file="file://$PROJECT_DIR$/example/lib/main.dart">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state> <state relative-caret-position="449">
<caret line="234" selection-start-line="234" selection-end-line="234" /> <caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<folding> <folding>
<element signature="e#0#20#0" expanded="true" /> <element signature="e#0#20#0" expanded="true" />
</folding> </folding>
......
## 0.5.4 ## 0.5.4
- added `WebHistory` and `WebHistoryItem` class - added `WebHistory` and `WebHistoryItem` class
- added `getCopyBackForwardList` method for `InAppWebView` and `InAppBrowser` - added `getCopyBackForwardList`, `goBackOrForward`, `canGoBackOrForward` and `goTo` methods for `InAppWebView` and `InAppBrowser`
## 0.5.3 ## 0.5.3
......
...@@ -162,6 +162,14 @@ public class FlutterWebView implements PlatformView, MethodCallHandler { ...@@ -162,6 +162,14 @@ public class FlutterWebView implements PlatformView, MethodCallHandler {
case "canGoForward": case "canGoForward":
result.success((webView != null) && webView.canGoForward()); result.success((webView != null) && webView.canGoForward());
break; break;
case "goBackOrForward":
if (webView != null)
webView.goBackOrForward((Integer) call.argument("steps"));
result.success(true);
break;
case "canGoBackOrForward":
result.success((webView != null) && webView.canGoBackOrForward((Integer) call.argument("steps")));
break;
case "stopLoading": case "stopLoading":
if (webView != null) if (webView != null)
webView.stopLoading(); webView.stopLoading();
......
...@@ -238,17 +238,32 @@ public class InAppBrowserActivity extends AppCompatActivity { ...@@ -238,17 +238,32 @@ public class InAppBrowserActivity extends AppCompatActivity {
webView.goBack(); webView.goBack();
} }
public boolean canGoBack() {
if (webView != null)
return webView.canGoBack();
return false;
}
public void goForward() { public void goForward() {
if (webView != null && canGoForward()) if (webView != null && canGoForward())
webView.goForward(); webView.goForward();
} }
public boolean canGoBack() { public boolean canGoForward() {
return webView.canGoBack(); if (webView != null)
return webView.canGoForward();
return false;
} }
public boolean canGoForward() { public void goBackOrForward(int steps) {
return webView.canGoForward(); if (webView != null && canGoBackOrForward(steps))
webView.goBackOrForward(steps);
}
public boolean canGoBackOrForward(int steps) {
if (webView != null)
return webView.canGoBackOrForward(steps);
return false;
} }
public void hide() { public void hide() {
......
...@@ -233,6 +233,13 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler { ...@@ -233,6 +233,13 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler {
case "canGoForward": case "canGoForward":
result.success(canGoForward(uuid)); result.success(canGoForward(uuid));
break; break;
case "goBackOrForward":
goBackOrForward(uuid, (Integer) call.argument("steps"));
result.success(true);
break;
case "canGoBackOrForward":
result.success(canGoBackOrForward(uuid, (Integer) call.argument("steps")));
break;
case "stopLoading": case "stopLoading":
stopLoading(uuid); stopLoading(uuid);
result.success(true); result.success(true);
...@@ -497,6 +504,18 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler { ...@@ -497,6 +504,18 @@ public class InAppBrowserFlutterPlugin implements MethodCallHandler {
return false; return false;
} }
public void goBackOrForward(String uuid, int steps) {
InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
if (inAppBrowserActivity != null)
inAppBrowserActivity.goBackOrForward(steps);
}
public boolean canGoBackOrForward(String uuid, int steps) {
InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
if (inAppBrowserActivity != null)
return inAppBrowserActivity.canGoBackOrForward(steps);
return false;
}
public static void close(final String uuid, final Result result) { public static void close(final String uuid, final Result result) {
final InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid); final InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
......
...@@ -97,6 +97,12 @@ public class InAppWebView extends WebView { ...@@ -97,6 +97,12 @@ public class InAppWebView extends WebView {
this.options = options; this.options = options;
} }
@Override
public void reload() {
super.reload();
Log.d(LOG_TAG, "RELOAD");
}
public void prepare() { public void prepare() {
boolean isFromInAppBrowserActivity = inAppBrowserActivity != null; boolean isFromInAppBrowserActivity = inAppBrowserActivity != null;
......
...@@ -16,12 +16,21 @@ class MyInAppBrowser extends InAppBrowser { ...@@ -16,12 +16,21 @@ class MyInAppBrowser extends InAppBrowser {
Future onLoadStop(String url) async { Future onLoadStop(String url) async {
print("\n\nStopped $url\n\n"); print("\n\nStopped $url\n\n");
WebHistory history = await this.webViewController.getCopyBackForwardList(); // WebHistory history = await this.webViewController.getCopyBackForwardList();
print(history.list.length); // print(history.list.length);
print(history.list[history.currentIndex].url); // print(history.currentIndex);
for(WebHistoryItem item in history.list) { // print(history.list[history.currentIndex].url);
print(item.title); // for(WebHistoryItem item in history.list) {
} // print(item.title);
// }
//
// print(await this.webViewController.canGoBackOrForward(1));
// if (await this.webViewController.canGoBackOrForward(-2)) {
// this.webViewController.goTo(history.list[0]);
// }
// await this.webViewController.goBackOrForward(-1);
// print(await this.webViewController.canGoBack()); // print(await this.webViewController.canGoBack());
// print(await this.webViewController.canGoForward()); // print(await this.webViewController.canGoForward());
......
...@@ -481,10 +481,6 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio ...@@ -481,10 +481,6 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio
}) })
} }
func canGoBack() -> Bool {
return webView.canGoBack
}
@objc func goBack() { @objc func goBack() {
if canGoBack() { if canGoBack() {
webView.goBack() webView.goBack()
...@@ -492,8 +488,8 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio ...@@ -492,8 +488,8 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio
} }
} }
func canGoForward() -> Bool { func canGoBack() -> Bool {
return webView.canGoForward return webView.canGoBack
} }
@objc func goForward() { @objc func goForward() {
...@@ -503,6 +499,19 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio ...@@ -503,6 +499,19 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio
} }
} }
func canGoForward() -> Bool {
return webView.canGoForward
}
@objc func goBackOrForward(steps: Int) {
webView.goBackOrForward(steps: steps)
updateUrlTextField(url: (webView?.url?.absoluteString)!)
}
func canGoBackOrForward(steps: Int) -> Bool {
return webView.canGoBackOrForward(steps: steps)
}
func updateUrlTextField(url: String) { func updateUrlTextField(url: String) {
urlField.text = url urlField.text = url
} }
......
...@@ -10,4 +10,25 @@ import WebKit ...@@ -10,4 +10,25 @@ import WebKit
public class InAppWebView: WKWebView { public class InAppWebView: WKWebView {
public func goBackOrForward(steps: Int) {
if canGoBackOrForward(steps: steps) {
if (steps > 0) {
let index = steps - 1
go(to: self.backForwardList.forwardList[index])
}
else if (steps < 0){
let backListLength = self.backForwardList.backList.count
let index = backListLength + steps
go(to: self.backForwardList.backList[index])
}
}
}
public func canGoBackOrForward(steps: Int) -> Bool {
let currentIndex = self.backForwardList.backList.count
return (steps >= 0)
? steps <= self.backForwardList.forwardList.count
: currentIndex + steps >= 0
}
} }
...@@ -129,6 +129,22 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin { ...@@ -129,6 +129,22 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
result(false) result(false)
} }
break break
case "goBackOrForward":
if let webViewController = self.webViewControllers[uuid] {
let steps = arguments!["steps"] as! Int
webViewController?.goBackOrForward(steps: steps)
}
result(true)
break
case "canGoBackOrForward":
if let webViewController = self.webViewControllers[uuid] {
let steps = arguments!["steps"] as! Int
result(webViewController?.canGoBackOrForward(steps: steps) ?? false)
}
else {
result(false)
}
break
case "isLoading": case "isLoading":
if let webViewController = self.webViewControllers[uuid] { if let webViewController = self.webViewControllers[uuid] {
result((webViewController?.webView.isLoading ?? false) == true) result((webViewController?.webView.isLoading ?? false) == true)
......
...@@ -903,6 +903,37 @@ class InAppWebViewController { ...@@ -903,6 +903,37 @@ class InAppWebViewController {
return await _channel.invokeMethod('canGoForward', args); return await _channel.invokeMethod('canGoForward', args);
} }
///Goes to the history item that is the number of steps away from the current item. Steps is negative if backward and positive if forward.
Future<void> goBackOrForward(int steps) async {
assert(steps != null);
Map<String, dynamic> args = <String, dynamic>{};
if (_inAppBrowserUuid != null) {
_inAppBrowser._throwIsNotOpened();
args.putIfAbsent('uuid', () => _inAppBrowserUuid);
}
args.putIfAbsent('steps', () => steps);
await _channel.invokeMethod('goBackOrForward', args);
}
///Gets whether the page can go back or forward the given number of steps.
Future<bool> canGoBackOrForward(int steps) async {
assert(steps != null);
Map<String, dynamic> args = <String, dynamic>{};
if (_inAppBrowserUuid != null) {
_inAppBrowser._throwIsNotOpened();
args.putIfAbsent('uuid', () => _inAppBrowserUuid);
}
args.putIfAbsent('steps', () => steps);
return await _channel.invokeMethod('canGoBackOrForward', args);
}
///Navigates to an item from the back-forward list and sets it as the current item.
Future<void> goTo(WebHistoryItem historyItem) async {
await goBackOrForward(historyItem.offset);
}
///Check if the Web View of the [InAppWebView] instance is in a loading state. ///Check if the Web View of the [InAppWebView] instance is in a loading state.
Future<bool> isLoading() async { Future<bool> isLoading() async {
Map<String, dynamic> args = <String, dynamic>{}; Map<String, dynamic> args = <String, dynamic>{};
...@@ -1050,8 +1081,9 @@ class InAppWebViewController { ...@@ -1050,8 +1081,9 @@ class InAppWebViewController {
int currentIndex = result["currentIndex"]; int currentIndex = result["currentIndex"];
List<WebHistoryItem> historyList = List(); List<WebHistoryItem> historyList = List();
for(LinkedHashMap<dynamic, dynamic> historyItem in historyListMap) { for(var i = 0; i < historyListMap.length; i++) {
historyList.add(WebHistoryItem(historyItem["originalUrl"], historyItem["title"], historyItem["url"])); LinkedHashMap<dynamic, dynamic> historyItem = historyListMap[i];
historyList.add(WebHistoryItem(historyItem["originalUrl"], historyItem["title"], historyItem["url"], i, i - currentIndex));
} }
return WebHistory(historyList, currentIndex); return WebHistory(historyList, currentIndex);
} }
...@@ -1067,7 +1099,9 @@ class InAppWebViewController { ...@@ -1067,7 +1099,9 @@ class InAppWebViewController {
///This class contains a snapshot of the current back/forward list for a WebView. ///This class contains a snapshot of the current back/forward list for a WebView.
class WebHistory { class WebHistory {
List<WebHistoryItem> _list; List<WebHistoryItem> _list;
///List of all [WebHistoryItem]s.
List<WebHistoryItem> get list => _list; List<WebHistoryItem> get list => _list;
///Index of the current [WebHistoryItem].
int currentIndex; int currentIndex;
WebHistory(this._list, this.currentIndex); WebHistory(this._list, this.currentIndex);
...@@ -1077,11 +1111,18 @@ class WebHistory { ...@@ -1077,11 +1111,18 @@ class WebHistory {
/// ///
///A convenience class for accessing fields in an entry in the back/forward list of a WebView. Each WebHistoryItem is a snapshot of the requested history item. ///A convenience class for accessing fields in an entry in the back/forward list of a WebView. Each WebHistoryItem is a snapshot of the requested history item.
class WebHistoryItem { class WebHistoryItem {
///Original url of this history item.
String originalUrl; String originalUrl;
///Document title of this history item.
String title; String title;
///Url of this history item.
String url; String url;
///0-based position index in the back-forward [WebHistory.list].
int index;
///Position offset respect to the currentIndex of the back-forward [WebHistory.list].
int offset;
WebHistoryItem(this.originalUrl, this.title, this.url); WebHistoryItem(this.originalUrl, this.title, this.url, this.index, this.offset);
} }
///InAppLocalhostServer class. ///InAppLocalhostServer class.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment