added return value for JavaScriptHandlerCallback, added flutterInAppBrowserPlatformReady event for javascript, breaking change: javaScriptHandlersMap contains only one callback
This commit is contained in:
parent
f3f0876f28
commit
a480ebf6a1
|
@ -15,48 +15,29 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<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 afterPath="$PROJECT_DIR$/example/assets/page-1.html" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/JsonSerializer.swift" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/example/assets/page-2.html" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/ios/Classes/JsonSerializer.swift" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/example/assets/page-3.html" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/page-1.html" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/page-2.html" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/page-3.html" afterDir="false" />
|
|
||||||
<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$/android/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/android/build.gradle" 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/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$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebViewClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebViewClient.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/JavaScriptBridgeInterface.java" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/JavaScriptBridgeInterface.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/assets/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/example/assets/index.html" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/assets/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/example/assets/index.html" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/CHANGELOG.md" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/CHANGELOG.md" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/build.gradle" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebViewClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebViewClient.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/JavaScriptBridgeInterface.java" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/JavaScriptBridgeInterface.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/index.html" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/assets/index.html" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/ios/Runner.xcodeproj/project.pbxproj" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/ios/Runner.xcodeproj/project.pbxproj" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/chrome_safari_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/chrome_safari_example.screen.dart" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/inline_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/inline_example.screen.dart" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/inline_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/inline_example.screen.dart" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/main.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/main.dart" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/webview_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/lib/webview_example.screen.dart" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/pubspec.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/pubspec.yaml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/flutter_inappbrowser.iml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/flutter_inappbrowser.iml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/flutter_inappbrowser.iml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/flutter_inappbrowser.iml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/FlutterWebViewController.swift" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/FlutterWebViewController.swift" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppBrowserWebViewController.swift" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppBrowserWebViewController.swift" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppWebView.swift" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppWebView.swift" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppWebView.swift" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/InAppWebView.swift" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/SwiftFlutterPlugin.swift" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/ios/Classes/SwiftFlutterPlugin.swift" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/lib/flutter_inappbrowser.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/lib/flutter_inappbrowser.dart" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/ios/Runner.xcodeproj/project.pbxproj" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/Runner.xcodeproj/project.pbxproj" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/pubspec.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/pubspec.yaml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/example/lib/chrome_safari_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/chrome_safari_example.screen.dart" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/lib/inline_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/inline_example.screen.dart" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/example/lib/inline_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/inline_example.screen.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$/example/lib/webview_example.screen.dart" beforeDir="false" afterPath="$PROJECT_DIR$/example/lib/webview_example.screen.dart" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/example/pubspec.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/example/pubspec.yaml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/flutter_inappbrowser.iml" beforeDir="false" afterPath="$PROJECT_DIR$/flutter_inappbrowser.iml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/flutter_inappbrowser.iml" beforeDir="false" afterPath="$PROJECT_DIR$/flutter_inappbrowser.iml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/ios/Classes/FlutterWebViewController.swift" beforeDir="false" afterPath="$PROJECT_DIR$/ios/Classes/FlutterWebViewController.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/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$/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" />
|
<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/" />
|
||||||
|
@ -75,8 +56,41 @@
|
||||||
<session id="-1166585903">
|
<session id="-1166585903">
|
||||||
<usages-collector id="statistics.lifecycle.project">
|
<usages-collector id="statistics.lifecycle.project">
|
||||||
<counts>
|
<counts>
|
||||||
|
<entry key="project.closed" value="2" />
|
||||||
|
<entry key="project.open.time.10" value="1" />
|
||||||
<entry key="project.open.time.11" value="1" />
|
<entry key="project.open.time.11" value="1" />
|
||||||
<entry key="project.opened" value="1" />
|
<entry key="project.open.time.14" value="1" />
|
||||||
|
<entry key="project.opened" value="3" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.extensions.edit">
|
||||||
|
<counts>
|
||||||
|
<entry key="dart" value="296" />
|
||||||
|
<entry key="html" value="229" />
|
||||||
|
<entry key="md" value="7" />
|
||||||
|
<entry key="yaml" value="2" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.types.edit">
|
||||||
|
<counts>
|
||||||
|
<entry key="Dart" value="296" />
|
||||||
|
<entry key="HTML" value="229" />
|
||||||
|
<entry key="Markdown" value="7" />
|
||||||
|
<entry key="YAML" value="2" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.extensions.open">
|
||||||
|
<counts>
|
||||||
|
<entry key="dart" value="6" />
|
||||||
|
<entry key="gradle" value="1" />
|
||||||
|
<entry key="html" value="5" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.types.open">
|
||||||
|
<counts>
|
||||||
|
<entry key="Dart" value="6" />
|
||||||
|
<entry key="Groovy" value="1" />
|
||||||
|
<entry key="HTML" value="5" />
|
||||||
</counts>
|
</counts>
|
||||||
</usages-collector>
|
</usages-collector>
|
||||||
</session>
|
</session>
|
||||||
|
@ -86,17 +100,38 @@
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
<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="45">
|
<state relative-caret-position="30">
|
||||||
<caret line="3" column="24" selection-start-line="3" selection-start-column="24" selection-end-line="3" selection-end-column="24" />
|
<caret line="2" column="14" selection-start-line="2" selection-start-column="14" selection-end-line="2" selection-end-column="14" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/lib/main.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="224">
|
||||||
|
<caret line="47" column="36" selection-start-line="47" selection-start-column="14" selection-end-line="47" selection-end-column="36" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#20#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="true">
|
<file pinned="false" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/CHANGELOG.md">
|
<entry file="file://$PROJECT_DIR$/example/lib/inline_example.screen.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="45">
|
<state relative-caret-position="279">
|
||||||
<caret line="3" column="19" lean-forward="true" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
|
<caret line="87" column="33" lean-forward="true" selection-start-line="87" selection-start-column="33" selection-end-line="87" selection-end-column="33" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/assets/index.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="184">
|
||||||
|
<caret line="27" column="10" lean-forward="true" selection-start-line="27" selection-start-column="10" selection-end-line="27" selection-end-column="10" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
@ -112,16 +147,12 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="FindInProjectRecents">
|
<component name="FindInProjectRecents">
|
||||||
<findStrings>
|
<findStrings>
|
||||||
<find>onBrowserCreated</find>
|
|
||||||
<find>getUrl</find>
|
|
||||||
<find>onScrollChanged</find>
|
|
||||||
<find>initialData</find>
|
<find>initialData</find>
|
||||||
<find>openData</find>
|
<find>openData</find>
|
||||||
<find>optionsType</find>
|
<find>optionsType</find>
|
||||||
<find>InAppWebView</find>
|
<find>InAppWebView</find>
|
||||||
<find>fromInAppBrowser</find>
|
<find>fromInAppBrowser</find>
|
||||||
<find>InAppWebViewController</find>
|
<find>InAppWebViewController</find>
|
||||||
<find>_handleMethod</find>
|
|
||||||
<find>InAppBrowser</find>
|
<find>InAppBrowser</find>
|
||||||
<find>handlerTest</find>
|
<find>handlerTest</find>
|
||||||
<find>onLoadStart</find>
|
<find>onLoadStart</find>
|
||||||
|
@ -142,6 +173,10 @@
|
||||||
<find>openFile</find>
|
<find>openFile</find>
|
||||||
<find>File</find>
|
<find>File</find>
|
||||||
<find>onExit</find>
|
<find>onExit</find>
|
||||||
|
<find>_handleMethod</find>
|
||||||
|
<find>javaScriptHandlersMap</find>
|
||||||
|
<find>JavaScriptHandlerCallback</find>
|
||||||
|
<find>onConsoleM</find>
|
||||||
</findStrings>
|
</findStrings>
|
||||||
<replaceStrings>
|
<replaceStrings>
|
||||||
<replace>activity.getPreferences(0)</replace>
|
<replace>activity.getPreferences(0)</replace>
|
||||||
|
@ -181,25 +216,25 @@
|
||||||
<option value="$PROJECT_DIR$/example/assets/css/style.css" />
|
<option value="$PROJECT_DIR$/example/assets/css/style.css" />
|
||||||
<option value="$PROJECT_DIR$/example/ios/Flutter/Generated.xcconfig" />
|
<option value="$PROJECT_DIR$/example/ios/Flutter/Generated.xcconfig" />
|
||||||
<option value="$PROJECT_DIR$/example/ios/Runner/Info.plist" />
|
<option value="$PROJECT_DIR$/example/ios/Runner/Info.plist" />
|
||||||
<option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/android/gradle/wrapper/gradle-wrapper.properties" />
|
<option value="$PROJECT_DIR$/android/gradle/wrapper/gradle-wrapper.properties" />
|
||||||
<option value="$PROJECT_DIR$/README.md" />
|
|
||||||
<option value="$PROJECT_DIR$/example/android/app/build.gradle" />
|
<option value="$PROJECT_DIR$/example/android/app/build.gradle" />
|
||||||
<option value="$PROJECT_DIR$/example/android/gradle.properties" />
|
<option value="$PROJECT_DIR$/example/android/gradle.properties" />
|
||||||
<option value="$PROJECT_DIR$/android/build.gradle" />
|
<option value="$PROJECT_DIR$/android/build.gradle" />
|
||||||
<option value="$PROJECT_DIR$/example/android/build.gradle" />
|
<option value="$PROJECT_DIR$/example/android/build.gradle" />
|
||||||
<option value="$PROJECT_DIR$/example/pubspec.yaml" />
|
<option value="$PROJECT_DIR$/example/pubspec.yaml" />
|
||||||
<option value="$PROJECT_DIR$/example/assets/index.html" />
|
|
||||||
<option value="$PROJECT_DIR$/example/assets/page-1.html" />
|
<option value="$PROJECT_DIR$/example/assets/page-1.html" />
|
||||||
<option value="$PROJECT_DIR$/example/assets/page-2.html" />
|
<option value="$PROJECT_DIR$/example/assets/page-2.html" />
|
||||||
<option value="$PROJECT_DIR$/example/assets/page-3.html" />
|
<option value="$PROJECT_DIR$/example/assets/page-3.html" />
|
||||||
<option value="$PROJECT_DIR$/example/lib/main.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/example/lib/chrome_safari_example.screen.dart" />
|
<option value="$PROJECT_DIR$/example/lib/chrome_safari_example.screen.dart" />
|
||||||
<option value="$PROJECT_DIR$/example/lib/test.dart" />
|
<option value="$PROJECT_DIR$/example/lib/test.dart" />
|
||||||
<option value="$PROJECT_DIR$/example/lib/webview_example.screen.dart" />
|
<option value="$PROJECT_DIR$/README.md" />
|
||||||
<option value="$PROJECT_DIR$/example/lib/inline_example.screen.dart" />
|
|
||||||
<option value="$PROJECT_DIR$/pubspec.yaml" />
|
|
||||||
<option value="$PROJECT_DIR$/CHANGELOG.md" />
|
<option value="$PROJECT_DIR$/CHANGELOG.md" />
|
||||||
|
<option value="$PROJECT_DIR$/example/lib/main.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/lib/flutter_inappbrowser.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/example/lib/webview_example.screen.dart" />
|
||||||
|
<option value="$PROJECT_DIR$/pubspec.yaml" />
|
||||||
|
<option value="$PROJECT_DIR$/example/assets/index.html" />
|
||||||
|
<option value="$PROJECT_DIR$/example/lib/inline_example.screen.dart" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
@ -214,17 +249,6 @@
|
||||||
<foldersAlwaysOnTop value="true" />
|
<foldersAlwaysOnTop value="true" />
|
||||||
</navigator>
|
</navigator>
|
||||||
<panes>
|
<panes>
|
||||||
<pane id="Scope">
|
|
||||||
<subPane subId="Project Files">
|
|
||||||
<expand>
|
|
||||||
<path>
|
|
||||||
<item name="Root" type="cbb8eebc:String" user="Root" />
|
|
||||||
<item name="flutter_inappbrowser" type="cbb8eebc:String" user="flutter_inappbrowser" />
|
|
||||||
</path>
|
|
||||||
</expand>
|
|
||||||
<select />
|
|
||||||
</subPane>
|
|
||||||
</pane>
|
|
||||||
<pane id="AndroidView">
|
<pane id="AndroidView">
|
||||||
<subPane>
|
<subPane>
|
||||||
<expand>
|
<expand>
|
||||||
|
@ -254,7 +278,6 @@
|
||||||
<select />
|
<select />
|
||||||
</subPane>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="PackagesPane" />
|
|
||||||
<pane id="ProjectPane">
|
<pane id="ProjectPane">
|
||||||
<subPane>
|
<subPane>
|
||||||
<expand>
|
<expand>
|
||||||
|
@ -272,6 +295,18 @@
|
||||||
</subPane>
|
</subPane>
|
||||||
<option name="show-excluded-files" value="false" />
|
<option name="show-excluded-files" value="false" />
|
||||||
</pane>
|
</pane>
|
||||||
|
<pane id="PackagesPane" />
|
||||||
|
<pane id="Scope">
|
||||||
|
<subPane subId="Project Files">
|
||||||
|
<expand>
|
||||||
|
<path>
|
||||||
|
<item name="Root" type="cbb8eebc:String" user="Root" />
|
||||||
|
<item name="flutter_inappbrowser" type="cbb8eebc:String" user="flutter_inappbrowser" />
|
||||||
|
</path>
|
||||||
|
</expand>
|
||||||
|
<select />
|
||||||
|
</subPane>
|
||||||
|
</pane>
|
||||||
</panes>
|
</panes>
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
|
@ -411,18 +446,17 @@
|
||||||
<frame x="0" y="23" width="1920" height="1057" extended-state="0" />
|
<frame x="0" y="23" width="1920" height="1057" extended-state="0" />
|
||||||
<editor active="true" />
|
<editor active="true" />
|
||||||
<layout>
|
<layout>
|
||||||
<window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.6496815" visible="true" weight="0.18210863" />
|
<window_info content_ui="combo" id="Project" order="0" sideWeight="0.64341086" visible="true" weight="0.18210863" />
|
||||||
<window_info id="Structure" order="1" sideWeight="0.35031846" side_tool="true" visible="true" weight="0.18210863" />
|
<window_info id="Structure" order="1" sideWeight="0.35658914" side_tool="true" visible="true" weight="0.18210863" />
|
||||||
<window_info id="Designer" order="2" />
|
<window_info id="Designer" order="2" />
|
||||||
<window_info id="Build Variants" order="3" side_tool="true" />
|
<window_info id="Build Variants" order="3" side_tool="true" />
|
||||||
<window_info id="Captures" order="4" side_tool="true" weight="0.32936507" />
|
<window_info id="Captures" order="4" side_tool="true" weight="0.32936507" />
|
||||||
<window_info id="Favorites" order="5" side_tool="true" />
|
<window_info id="Favorites" order="5" side_tool="true" />
|
||||||
<window_info id="Capture Tool" order="6" />
|
<window_info id="Capture Tool" order="6" />
|
||||||
<window_info id="Image Layers" order="7" />
|
<window_info id="Image Layers" order="7" />
|
||||||
<window_info anchor="bottom" id="Flutter Performance" side_tool="true" />
|
|
||||||
<window_info anchor="bottom" id="Message" order="0" />
|
<window_info anchor="bottom" id="Message" order="0" />
|
||||||
<window_info anchor="bottom" id="Find" order="1" weight="0.32745314" />
|
<window_info anchor="bottom" id="Find" order="1" weight="0.32745314" />
|
||||||
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.49478307" weight="0.30522946" />
|
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.49478307" weight="0.42356688" />
|
||||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.34288865" />
|
<window_info anchor="bottom" id="Debug" order="3" weight="0.34288865" />
|
||||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||||
|
@ -430,11 +464,12 @@
|
||||||
<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="Event Log" order="8" sideWeight="0.5052169" side_tool="true" weight="0.34068358" />
|
<window_info anchor="bottom" id="Event Log" order="8" sideWeight="0.5052169" side_tool="true" 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.49533224" weight="0.2113127" />
|
<window_info active="true" anchor="bottom" id="Terminal" order="10" sideWeight="0.49533224" visible="true" weight="0.4522293" />
|
||||||
<window_info anchor="bottom" id="Logcat" order="11" />
|
<window_info anchor="bottom" id="Logcat" order="11" />
|
||||||
<window_info anchor="bottom" id="Messages" order="12" weight="0.23585913" />
|
<window_info anchor="bottom" id="Messages" order="12" weight="0.2356688" />
|
||||||
<window_info anchor="bottom" id="Dependency Viewer" order="13" weight="0.32800853" />
|
<window_info anchor="bottom" id="Dependency Viewer" order="13" weight="0.32800853" />
|
||||||
<window_info anchor="bottom" id="Dart Analysis" order="14" weight="0.32657418" />
|
<window_info anchor="bottom" id="Dart Analysis" order="14" weight="0.32657418" />
|
||||||
|
<window_info anchor="bottom" id="Flutter Performance" order="15" side_tool="true" />
|
||||||
<window_info anchor="right" id="Commander" order="0" weight="0.4" />
|
<window_info anchor="right" id="Commander" order="0" weight="0.4" />
|
||||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||||
|
@ -454,11 +489,6 @@
|
||||||
<option name="myLimit" value="2678400000" />
|
<option name="myLimit" value="2678400000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
<entry file="file://$PROJECT_DIR$/.idea/workspace.xml">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-10645" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$USER_HOME$/flutter/bin/cache/pkg/sky_engine/lib/core/string.dart">
|
<entry file="file://$USER_HOME$/flutter/bin/cache/pkg/sky_engine/lib/core/string.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="173">
|
<state relative-caret-position="173">
|
||||||
|
@ -616,20 +646,6 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/README.md">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="15">
|
|
||||||
<caret line="24" column="39" selection-start-line="24" selection-start-column="39" selection-end-line="24" selection-end-column="39" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/android/build.gradle">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state>
|
|
||||||
<caret line="13" selection-start-line="13" selection-end-line="14" selection-end-column="22" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/ios/flutter_inappbrowser.podspec">
|
<entry file="file://$PROJECT_DIR$/ios/flutter_inappbrowser.podspec">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="330">
|
<state relative-caret-position="330">
|
||||||
|
@ -644,34 +660,6 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/example/assets/page-2.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="270">
|
|
||||||
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/assets/page-3.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="270">
|
|
||||||
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/assets/page-1.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="270">
|
|
||||||
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/assets/index.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="270">
|
|
||||||
<caret line="18" column="28" selection-start-line="18" selection-start-column="28" selection-end-line="18" selection-end-column="28" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/assets/css/style.css">
|
<entry file="file://$PROJECT_DIR$/example/assets/css/style.css">
|
||||||
<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="75">
|
||||||
|
@ -686,31 +674,6 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="205">
|
|
||||||
<caret line="371" column="13" selection-start-line="371" selection-start-column="7" selection-end-line="371" selection-end-column="13" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#65617#0" expanded="true" />
|
|
||||||
<element signature="e#814#831#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/lib/webview_example.screen.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="-217">
|
|
||||||
<caret line="19" column="33" lean-forward="true" selection-start-line="19" selection-start-column="33" selection-end-line="19" selection-end-column="33" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/lib/inline_example.screen.dart">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="371">
|
|
||||||
<caret line="67" column="37" lean-forward="true" selection-start-line="67" selection-start-column="37" selection-end-line="67" selection-end-column="37" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/example/lib/test.dart">
|
<entry file="file://$PROJECT_DIR$/example/lib/test.dart">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="184">
|
<state relative-caret-position="184">
|
||||||
|
@ -718,10 +681,73 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/CHANGELOG.md">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="120">
|
||||||
|
<caret line="8" column="37" lean-forward="true" selection-start-line="8" selection-start-column="37" selection-end-line="8" selection-end-column="37" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/README.md">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="255">
|
||||||
|
<caret line="17" selection-start-line="17" selection-end-line="17" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$USER_HOME$/flutter/bin/cache/pkg/sky_engine/lib/core/map.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="2729">
|
||||||
|
<caret line="317" column="37" selection-start-line="317" selection-start-column="27" selection-end-line="317" selection-end-column="37" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/assets/page-1.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="270">
|
||||||
|
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/assets/page-2.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="270">
|
||||||
|
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/assets/page-3.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="270">
|
||||||
|
<caret line="18" column="30" selection-start-line="18" selection-start-column="30" selection-end-line="18" selection-end-column="30" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/lib/flutter_inappbrowser.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="158">
|
||||||
|
<caret line="610" column="50" selection-start-line="610" selection-start-column="40" selection-end-line="610" selection-end-column="50" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/lib/webview_example.screen.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="240">
|
||||||
|
<caret line="19" column="33" lean-forward="true" selection-start-line="19" selection-start-column="33" selection-end-line="19" selection-end-column="33" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/android/build.gradle">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-12">
|
||||||
|
<caret line="28" column="18" selection-start-line="28" selection-start-column="18" selection-end-line="28" selection-end-column="18" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</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 relative-caret-position="210">
|
<state relative-caret-position="224">
|
||||||
<caret line="14" column="27" selection-start-line="14" selection-start-column="27" selection-end-line="14" selection-end-column="27" />
|
<caret line="47" column="36" selection-start-line="47" selection-start-column="14" selection-end-line="47" selection-end-column="36" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#20#0" expanded="true" />
|
<element signature="e#0#20#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
|
@ -730,15 +756,22 @@
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/pubspec.yaml">
|
<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="45">
|
<state relative-caret-position="30">
|
||||||
<caret line="3" column="24" selection-start-line="3" selection-start-column="24" selection-end-line="3" selection-end-column="24" />
|
<caret line="2" column="14" selection-start-line="2" selection-start-column="14" selection-end-line="2" selection-end-column="14" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/CHANGELOG.md">
|
<entry file="file://$PROJECT_DIR$/example/assets/index.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="45">
|
<state relative-caret-position="184">
|
||||||
<caret line="3" column="19" lean-forward="true" selection-start-line="3" selection-start-column="19" selection-end-line="3" selection-end-column="19" />
|
<caret line="27" column="10" lean-forward="true" selection-start-line="27" selection-start-column="10" selection-end-line="27" selection-end-column="10" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/example/lib/inline_example.screen.dart">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="279">
|
||||||
|
<caret line="87" column="33" lean-forward="true" selection-start-line="87" selection-start-column="33" selection-end-line="87" selection-end-column="33" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
|
|
@ -53,4 +53,5 @@ dependencies {
|
||||||
implementation 'androidx.browser:browser:1.0.0'
|
implementation 'androidx.browser:browser:1.0.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.2'
|
implementation 'androidx.appcompat:appcompat:1.0.2'
|
||||||
implementation 'com.squareup.okhttp3:mockwebserver:3.11.0'
|
implementation 'com.squareup.okhttp3:mockwebserver:3.11.0'
|
||||||
|
implementation 'com.google.code.gson:gson:2.8.5'
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,8 @@ public class InAppWebView extends WebView {
|
||||||
" }" +
|
" }" +
|
||||||
"})();";
|
"})();";
|
||||||
|
|
||||||
|
static final String platformReadyJS = "window.dispatchEvent(new Event('flutterInAppBrowserPlatformReady'));";
|
||||||
|
|
||||||
public InAppWebView(Context context) {
|
public InAppWebView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import android.webkit.CookieManager;
|
||||||
import android.webkit.CookieSyncManager;
|
import android.webkit.CookieSyncManager;
|
||||||
import android.webkit.HttpAuthHandler;
|
import android.webkit.HttpAuthHandler;
|
||||||
import android.webkit.SslErrorHandler;
|
import android.webkit.SslErrorHandler;
|
||||||
|
import android.webkit.ValueCallback;
|
||||||
import android.webkit.WebResourceRequest;
|
import android.webkit.WebResourceRequest;
|
||||||
import android.webkit.WebResourceResponse;
|
import android.webkit.WebResourceResponse;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
@ -195,7 +196,7 @@ public class InAppWebViewClient extends WebViewClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onPageFinished(WebView view, String url) {
|
public void onPageFinished(final WebView view, String url) {
|
||||||
super.onPageFinished(view, url);
|
super.onPageFinished(view, url);
|
||||||
|
|
||||||
((inAppBrowserActivity != null) ? inAppBrowserActivity.webView : flutterWebView.webView).isLoading = false;
|
((inAppBrowserActivity != null) ? inAppBrowserActivity.webView : flutterWebView.webView).isLoading = false;
|
||||||
|
@ -213,11 +214,18 @@ public class InAppWebViewClient extends WebViewClient {
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
view.evaluateJavascript(InAppWebView.consoleLogJS, null);
|
view.evaluateJavascript(InAppWebView.consoleLogJS, null);
|
||||||
view.evaluateJavascript(JavaScriptBridgeInterface.flutterInAppBroserJSClass, null);
|
view.evaluateJavascript(JavaScriptBridgeInterface.flutterInAppBroserJSClass, new ValueCallback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onReceiveValue(String value) {
|
||||||
|
view.evaluateJavascript(InAppWebView.platformReadyJS, null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
view.loadUrl("javascript:"+InAppWebView.consoleLogJS);
|
view.loadUrl("javascript:"+InAppWebView.consoleLogJS);
|
||||||
view.loadUrl("javascript:"+JavaScriptBridgeInterface.flutterInAppBroserJSClass);
|
view.loadUrl("javascript:"+JavaScriptBridgeInterface.flutterInAppBroserJSClass);
|
||||||
|
view.loadUrl("javascript:"+InAppWebView.platformReadyJS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> obj = new HashMap<>();
|
Map<String, Object> obj = new HashMap<>();
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
package com.pichillilorenzo.flutter_inappbrowser;
|
package com.pichillilorenzo.flutter_inappbrowser;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
import android.webkit.JavascriptInterface;
|
import android.webkit.JavascriptInterface;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.pichillilorenzo.flutter_inappbrowser.InAppWebView.InAppWebView;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -14,7 +19,11 @@ public class JavaScriptBridgeInterface {
|
||||||
private InAppBrowserActivity inAppBrowserActivity;
|
private InAppBrowserActivity inAppBrowserActivity;
|
||||||
|
|
||||||
public static final String flutterInAppBroserJSClass = "window." + name + ".callHandler = function(handlerName, ...args) {" +
|
public static final String flutterInAppBroserJSClass = "window." + name + ".callHandler = function(handlerName, ...args) {" +
|
||||||
"window." + name + "._callHandler(handlerName, JSON.stringify(args));" +
|
"var _callHandlerID = setTimeout(function(){});" +
|
||||||
|
"window." + name + "._callHandler(handlerName, _callHandlerID, JSON.stringify(args));" +
|
||||||
|
"return new Promise(function(resolve, reject) {" +
|
||||||
|
" window." + name + "[_callHandlerID] = resolve;" +
|
||||||
|
"});" +
|
||||||
"}";
|
"}";
|
||||||
|
|
||||||
public JavaScriptBridgeInterface(Object obj) {
|
public JavaScriptBridgeInterface(Object obj) {
|
||||||
|
@ -25,13 +34,35 @@ public class JavaScriptBridgeInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
public void _callHandler(String handlerName, String args) {
|
public void _callHandler(String handlerName, final String _callHandlerID, String args) {
|
||||||
Map<String, Object> obj = new HashMap<>();
|
Map<String, Object> obj = new HashMap<>();
|
||||||
if (inAppBrowserActivity != null)
|
if (inAppBrowserActivity != null)
|
||||||
obj.put("uuid", inAppBrowserActivity.uuid);
|
obj.put("uuid", inAppBrowserActivity.uuid);
|
||||||
obj.put("handlerName", handlerName);
|
obj.put("handlerName", handlerName);
|
||||||
obj.put("args", args);
|
obj.put("args", args);
|
||||||
getChannel().invokeMethod("onCallJsHandler", obj);
|
|
||||||
|
getChannel().invokeMethod("onCallJsHandler", obj, new MethodChannel.Result() {
|
||||||
|
@Override
|
||||||
|
public void success(Object o) {
|
||||||
|
String json = new Gson().toJson(o);
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
|
flutterWebView.webView.evaluateJavascript("window." + name + "[" + _callHandlerID + "](" + json + ");", null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
flutterWebView.webView.loadUrl("javascript:window." + name + "[" + _callHandlerID + "](" + json + ");");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String s, String s1, Object o) {
|
||||||
|
Log.d(LOG_TAG, "ERROR: " + s + " " + s1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notImplemented() {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private MethodChannel getChannel() {
|
private MethodChannel getChannel() {
|
||||||
|
|
|
@ -27,7 +27,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
console.log("hello");
|
window.addEventListener("flutterInAppBrowserPlatformReady", function(event) {
|
||||||
|
console.log("ready");
|
||||||
|
|
||||||
|
window.flutter_inappbrowser.callHandler('handlerTest', 1).then(function(result) {
|
||||||
|
console.log(result, typeof result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -41,6 +41,7 @@ class _InlineExampleScreenState extends State<InlineExampleScreen> {
|
||||||
BoxDecoration(border: Border.all(color: Colors.blueAccent)),
|
BoxDecoration(border: Border.all(color: Colors.blueAccent)),
|
||||||
child: InAppWebView(
|
child: InAppWebView(
|
||||||
initialUrl: "https://flutter.dev/",
|
initialUrl: "https://flutter.dev/",
|
||||||
|
//initialFile: "assets/index.html",
|
||||||
initialHeaders: {},
|
initialHeaders: {},
|
||||||
initialOptions: {
|
initialOptions: {
|
||||||
"useShouldOverrideUrlLoading": true,
|
"useShouldOverrideUrlLoading": true,
|
||||||
|
@ -55,7 +56,7 @@ class _InlineExampleScreenState extends State<InlineExampleScreen> {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onLoadStop: (InAppWebViewController controller, String url) {
|
onLoadStop: (InAppWebViewController controller, String url) async {
|
||||||
print("stopped $url");
|
print("stopped $url");
|
||||||
},
|
},
|
||||||
onProgressChanged:
|
onProgressChanged:
|
||||||
|
@ -70,7 +71,10 @@ class _InlineExampleScreenState extends State<InlineExampleScreen> {
|
||||||
},
|
},
|
||||||
onLoadResource: (InAppWebViewController controller, WebResourceResponse response, WebResourceRequest request) {
|
onLoadResource: (InAppWebViewController controller, WebResourceResponse response, WebResourceRequest request) {
|
||||||
print("resource " + request.url);
|
print("resource " + request.url);
|
||||||
}
|
},
|
||||||
|
onConsoleMessage: (InAppWebViewController controller, ConsoleMessage consoleMessage) {
|
||||||
|
print(consoleMessage.message);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -20,8 +20,6 @@
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/.dart_tool" />
|
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/.dart_tool" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/.pub" />
|
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/.pub" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/build" />
|
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/build" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/ios/Flutter/App.framework/flutter_assets/packages" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/.symlinks/plugins/flutter_inappbrowser/example/ios/Flutter/flutter_assets/packages" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/Flutter/App.framework/flutter_assets/packages" />
|
<excludeFolder url="file://$MODULE_DIR$/example/ios/Flutter/App.framework/flutter_assets/packages" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/example/ios/Flutter/flutter_assets/packages" />
|
<excludeFolder url="file://$MODULE_DIR$/example/ios/Flutter/flutter_assets/packages" />
|
||||||
</content>
|
</content>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
// Created by Lorenzo on 21/10/18.
|
// Created by Lorenzo on 21/10/18.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import Flutter
|
||||||
import Foundation
|
import Foundation
|
||||||
import WebKit
|
import WebKit
|
||||||
|
|
||||||
|
@ -71,10 +72,16 @@ let JAVASCRIPT_BRIDGE_NAME = "flutter_inappbrowser"
|
||||||
let javaScriptBridgeJS = """
|
let javaScriptBridgeJS = """
|
||||||
window.\(JAVASCRIPT_BRIDGE_NAME) = {};
|
window.\(JAVASCRIPT_BRIDGE_NAME) = {};
|
||||||
window.\(JAVASCRIPT_BRIDGE_NAME).callHandler = function(handlerName, ...args) {
|
window.\(JAVASCRIPT_BRIDGE_NAME).callHandler = function(handlerName, ...args) {
|
||||||
window.webkit.messageHandlers['callHandler'].postMessage( {'handlerName': handlerName, 'args': JSON.stringify(args)} );
|
var _callHandlerID = setTimeout(function(){});
|
||||||
|
window.webkit.messageHandlers['callHandler'].postMessage( {'handlerName': handlerName, '_callHandlerID': _callHandlerID, 'args': JSON.stringify(args)} );
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
window.\(JAVASCRIPT_BRIDGE_NAME)[_callHandlerID] = resolve;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
let platformReadyJS = "window.dispatchEvent(new Event('flutterInAppBrowserPlatformReady'));";
|
||||||
|
|
||||||
public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {
|
public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {
|
||||||
|
|
||||||
var IABController: InAppBrowserWebViewController?
|
var IABController: InAppBrowserWebViewController?
|
||||||
|
@ -235,11 +242,13 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
|
||||||
public func loadUrl(url: URL, headers: [String: String]?) {
|
public func loadUrl(url: URL, headers: [String: String]?) {
|
||||||
var request = URLRequest(url: url)
|
var request = URLRequest(url: url)
|
||||||
currentURL = url
|
currentURL = url
|
||||||
if let mutableRequest = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest {
|
if headers != nil {
|
||||||
for (key, value) in headers! {
|
if let mutableRequest = (request as NSURLRequest).mutableCopy() as? NSMutableURLRequest {
|
||||||
mutableRequest.setValue(value, forHTTPHeaderField: key)
|
for (key, value) in headers! {
|
||||||
|
mutableRequest.setValue(value, forHTTPHeaderField: key)
|
||||||
|
}
|
||||||
|
request = mutableRequest as URLRequest
|
||||||
}
|
}
|
||||||
request = mutableRequest as URLRequest
|
|
||||||
}
|
}
|
||||||
load(request)
|
load(request)
|
||||||
}
|
}
|
||||||
|
@ -581,6 +590,7 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
|
||||||
self.WKNavigationMap = [:]
|
self.WKNavigationMap = [:]
|
||||||
currentURL = url
|
currentURL = url
|
||||||
onLoadStop(url: (currentURL?.absoluteString)!)
|
onLoadStop(url: (currentURL?.absoluteString)!)
|
||||||
|
evaluateJavaScript(platformReadyJS, completionHandler: nil)
|
||||||
|
|
||||||
if IABController != nil {
|
if IABController != nil {
|
||||||
IABController!.updateUrlTextField(url: (currentURL?.absoluteString)!)
|
IABController!.updateUrlTextField(url: (currentURL?.absoluteString)!)
|
||||||
|
@ -698,12 +708,28 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
|
||||||
getChannel().invokeMethod("onConsoleMessage", arguments: arguments)
|
getChannel().invokeMethod("onConsoleMessage", arguments: arguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func onCallJsHandler(handlerName: String, args: String) {
|
public func onCallJsHandler(handlerName: String, _callHandlerID: Int64, args: String) {
|
||||||
var arguments: [String: Any] = ["handlerName": handlerName, "args": args]
|
var arguments: [String: Any] = ["handlerName": handlerName, "args": args]
|
||||||
if IABController != nil {
|
if IABController != nil {
|
||||||
arguments["uuid"] = IABController!.uuid
|
arguments["uuid"] = IABController!.uuid
|
||||||
}
|
}
|
||||||
getChannel().invokeMethod("onCallJsHandler", arguments: arguments)
|
|
||||||
|
getChannel().invokeMethod("onCallJsHandler", arguments: arguments, result: {(result) -> Void in
|
||||||
|
if result is FlutterError {
|
||||||
|
print((result as! FlutterError).message)
|
||||||
|
}
|
||||||
|
else if (result as? NSObject) == FlutterMethodNotImplemented {}
|
||||||
|
else {
|
||||||
|
var json = "null"
|
||||||
|
if let r = result {
|
||||||
|
json = JSONSerializer.toJson(r)
|
||||||
|
if json == "{}" {
|
||||||
|
json = "\(r)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.evaluateJavaScript("window.\(JAVASCRIPT_BRIDGE_NAME)[\(_callHandlerID)](\(json));", completionHandler: nil)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
|
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
|
||||||
|
@ -765,8 +791,9 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, WKNavi
|
||||||
else if message.name == "callHandler" {
|
else if message.name == "callHandler" {
|
||||||
let body = message.body as! [String: Any]
|
let body = message.body as! [String: Any]
|
||||||
let handlerName = body["handlerName"] as! String
|
let handlerName = body["handlerName"] as! String
|
||||||
|
let _callHandlerID = body["_callHandlerID"] as! Int64
|
||||||
let args = body["args"] as! String
|
let args = body["args"] as! String
|
||||||
onCallJsHandler(handlerName: handlerName, args: args)
|
onCallJsHandler(handlerName: handlerName, _callHandlerID: _callHandlerID, args: args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,284 @@
|
||||||
|
/*The MIT License (MIT)
|
||||||
|
Copyright (c) 2015 Peter Helstrup Jensen
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.*/
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Handles Convertion from instances of objects to JSON strings. Also helps with casting strings of JSON to Arrays or Dictionaries.
|
||||||
|
open class JSONSerializer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Errors that indicates failures of JSONSerialization
|
||||||
|
- JsonIsNotDictionary: -
|
||||||
|
- JsonIsNotArray: -
|
||||||
|
- JsonIsNotValid: -
|
||||||
|
*/
|
||||||
|
public enum JSONSerializerError: Error {
|
||||||
|
case jsonIsNotDictionary
|
||||||
|
case jsonIsNotArray
|
||||||
|
case jsonIsNotValid
|
||||||
|
}
|
||||||
|
|
||||||
|
//http://stackoverflow.com/questions/30480672/how-to-convert-a-json-string-to-a-dictionary
|
||||||
|
/**
|
||||||
|
Tries to convert a JSON string to a NSDictionary. NSDictionary can be easier to work with, and supports string bracket referencing. E.g. personDictionary["name"].
|
||||||
|
- parameter jsonString: JSON string to be converted to a NSDictionary.
|
||||||
|
- throws: Throws error of type JSONSerializerError. Either JsonIsNotValid or JsonIsNotDictionary. JsonIsNotDictionary will typically be thrown if you try to parse an array of JSON objects.
|
||||||
|
- returns: A NSDictionary representation of the JSON string.
|
||||||
|
*/
|
||||||
|
open static func toDictionary(_ jsonString: String) throws -> NSDictionary {
|
||||||
|
if let dictionary = try jsonToAnyObject(jsonString) as? NSDictionary {
|
||||||
|
return dictionary
|
||||||
|
} else {
|
||||||
|
throw JSONSerializerError.jsonIsNotDictionary
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Tries to convert a JSON string to a NSArray. NSArrays can be iterated and each item in the array can be converted to a NSDictionary.
|
||||||
|
- parameter jsonString: The JSON string to be converted to an NSArray
|
||||||
|
- throws: Throws error of type JSONSerializerError. Either JsonIsNotValid or JsonIsNotArray. JsonIsNotArray will typically be thrown if you try to parse a single JSON object.
|
||||||
|
- returns: NSArray representation of the JSON objects.
|
||||||
|
*/
|
||||||
|
open static func toArray(_ jsonString: String) throws -> NSArray {
|
||||||
|
if let array = try jsonToAnyObject(jsonString) as? NSArray {
|
||||||
|
return array
|
||||||
|
} else {
|
||||||
|
throw JSONSerializerError.jsonIsNotArray
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Tries to convert a JSON string to AnyObject. AnyObject can then be casted to either NSDictionary or NSArray.
|
||||||
|
- parameter jsonString: JSON string to be converted to AnyObject
|
||||||
|
- throws: Throws error of type JSONSerializerError.
|
||||||
|
- returns: Returns the JSON string as AnyObject
|
||||||
|
*/
|
||||||
|
fileprivate static func jsonToAnyObject(_ jsonString: String) throws -> Any? {
|
||||||
|
var any: Any?
|
||||||
|
|
||||||
|
if let data = jsonString.data(using: String.Encoding.utf8) {
|
||||||
|
do {
|
||||||
|
any = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
|
||||||
|
}
|
||||||
|
catch let error as NSError {
|
||||||
|
let sError = String(describing: error)
|
||||||
|
NSLog(sError)
|
||||||
|
throw JSONSerializerError.jsonIsNotValid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return any
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Generates the JSON representation given any custom object of any custom class. Inherited properties will also be represented.
|
||||||
|
- parameter object: The instantiation of any custom class to be represented as JSON.
|
||||||
|
- returns: A string JSON representation of the object.
|
||||||
|
*/
|
||||||
|
open static func toJson(_ object: Any, prettify: Bool = false) -> String {
|
||||||
|
var json = ""
|
||||||
|
if (!(object is Array<Any>)) {
|
||||||
|
json += "{"
|
||||||
|
}
|
||||||
|
let mirror = Mirror(reflecting: object)
|
||||||
|
|
||||||
|
var children = [(label: String?, value: Any)]()
|
||||||
|
|
||||||
|
if let mirrorChildrenCollection = AnyRandomAccessCollection(mirror.children) {
|
||||||
|
children += mirrorChildrenCollection
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let mirrorIndexCollection = AnyCollection(mirror.children)
|
||||||
|
children += mirrorIndexCollection
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentMirror = mirror
|
||||||
|
while let superclassChildren = currentMirror.superclassMirror?.children {
|
||||||
|
let randomCollection = AnyRandomAccessCollection(superclassChildren)!
|
||||||
|
children += randomCollection
|
||||||
|
currentMirror = currentMirror.superclassMirror!
|
||||||
|
}
|
||||||
|
|
||||||
|
var filteredChildren = [(label: String?, value: Any)]()
|
||||||
|
|
||||||
|
for (optionalPropertyName, value) in children {
|
||||||
|
|
||||||
|
if let optionalPropertyName = optionalPropertyName {
|
||||||
|
|
||||||
|
if !optionalPropertyName.contains("notMapped_") {
|
||||||
|
filteredChildren.append((optionalPropertyName, value))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
filteredChildren.append((nil, value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var skip = false
|
||||||
|
let size = filteredChildren.count
|
||||||
|
var index = 0
|
||||||
|
|
||||||
|
var first = true
|
||||||
|
|
||||||
|
for (optionalPropertyName, value) in filteredChildren {
|
||||||
|
skip = false
|
||||||
|
|
||||||
|
let propertyName = optionalPropertyName
|
||||||
|
let property = Mirror(reflecting: value)
|
||||||
|
|
||||||
|
var handledValue = String()
|
||||||
|
|
||||||
|
if propertyName != nil && propertyName == "some" && property.displayStyle == Mirror.DisplayStyle.struct {
|
||||||
|
handledValue = toJson(value)
|
||||||
|
skip = true
|
||||||
|
}
|
||||||
|
else if (value is Int ||
|
||||||
|
value is Int32 ||
|
||||||
|
value is Int64 ||
|
||||||
|
value is Double ||
|
||||||
|
value is Float ||
|
||||||
|
value is Bool) && property.displayStyle != Mirror.DisplayStyle.optional {
|
||||||
|
handledValue = String(describing: value)
|
||||||
|
}
|
||||||
|
else if let array = value as? [Int?] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += value != nil ? String(value!) : "null"
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? [Double?] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += value != nil ? String(value!) : "null"
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? [Float?] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += value != nil ? String(value!) : "null"
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? [Bool?] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += value != nil ? String(value!) : "null"
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? [String?] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += value != nil ? "\"\(value!)\"" : "null"
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? [String] {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
handledValue += "\"\(value)\""
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if let array = value as? NSArray {
|
||||||
|
handledValue += "["
|
||||||
|
for (index, value) in array.enumerated() {
|
||||||
|
if !(value is Int) &&
|
||||||
|
!(value is Int32) &&
|
||||||
|
!(value is Int64) &&
|
||||||
|
!(value is Double) && !(value is Float) && !(value is Bool) && !(value is String) {
|
||||||
|
handledValue += toJson(value)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handledValue += "\(value)"
|
||||||
|
}
|
||||||
|
handledValue += (index < array.count-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
handledValue += "]"
|
||||||
|
}
|
||||||
|
else if property.displayStyle == Mirror.DisplayStyle.class ||
|
||||||
|
property.displayStyle == Mirror.DisplayStyle.struct ||
|
||||||
|
String(describing: value).contains("#") {
|
||||||
|
handledValue = toJson(value)
|
||||||
|
}
|
||||||
|
else if property.displayStyle == Mirror.DisplayStyle.optional {
|
||||||
|
let str = String(describing: value)
|
||||||
|
if str != "nil" {
|
||||||
|
// Some optional values cannot be unpacked if type is "Any"
|
||||||
|
// We remove the "Optional(" and last ")" from the value by string manipulation
|
||||||
|
var d = String(str).dropFirst(9)
|
||||||
|
d = d.dropLast(1)
|
||||||
|
handledValue = String(d)
|
||||||
|
} else {
|
||||||
|
handledValue = "null"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handledValue = String(describing: value) != "nil" ? "\"\(value)\"" : "null"
|
||||||
|
}
|
||||||
|
|
||||||
|
if !skip {
|
||||||
|
|
||||||
|
// if optional propertyName is populated we'll use it
|
||||||
|
if let propertyName = propertyName {
|
||||||
|
json += "\"\(propertyName)\": \(handledValue)" + (index < size-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
// if not then we have a member an array
|
||||||
|
else {
|
||||||
|
// if it's the first member we need to prepend ]
|
||||||
|
if first {
|
||||||
|
json += "["
|
||||||
|
first = false
|
||||||
|
}
|
||||||
|
// if it's not the last we need a comma. if it is the last we need to close ]
|
||||||
|
json += "\(handledValue)" + (index < size-1 ? ", " : "]")
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
json = "\(handledValue)" + (index < size-1 ? ", " : "")
|
||||||
|
}
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if !skip {
|
||||||
|
if (!(object is Array<Any>)) {
|
||||||
|
json += "}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if prettify {
|
||||||
|
let jsonData = json.data(using: String.Encoding.utf8)!
|
||||||
|
let jsonObject = try! JSONSerialization.jsonObject(with: jsonData, options: [])
|
||||||
|
let prettyJsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted)
|
||||||
|
json = NSString(data: prettyJsonData, encoding: String.Encoding.utf8.rawValue)! as String
|
||||||
|
}
|
||||||
|
|
||||||
|
return json
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -34,7 +34,7 @@ import 'package:uuid/uuid.dart';
|
||||||
import 'package:mime/mime.dart';
|
import 'package:mime/mime.dart';
|
||||||
|
|
||||||
typedef Future<dynamic> ListenerCallback(MethodCall call);
|
typedef Future<dynamic> ListenerCallback(MethodCall call);
|
||||||
typedef Future<void> JavaScriptHandlerCallback(List<dynamic> arguments);
|
typedef dynamic JavaScriptHandlerCallback(List<dynamic> arguments);
|
||||||
|
|
||||||
var _uuidGenerator = new Uuid();
|
var _uuidGenerator = new Uuid();
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ class _ChannelManager {
|
||||||
class InAppBrowser {
|
class InAppBrowser {
|
||||||
|
|
||||||
String uuid;
|
String uuid;
|
||||||
Map<String, List<JavaScriptHandlerCallback>> javaScriptHandlersMap = HashMap<String, List<JavaScriptHandlerCallback>>();
|
Map<String, JavaScriptHandlerCallback> javaScriptHandlersMap = HashMap<String, JavaScriptHandlerCallback>();
|
||||||
bool _isOpened = false;
|
bool _isOpened = false;
|
||||||
/// WebView Controller that can be used to access the [InAppWebView] API.
|
/// WebView Controller that can be used to access the [InAppWebView] API.
|
||||||
InAppWebViewController webViewController;
|
InAppWebViewController webViewController;
|
||||||
|
@ -735,7 +735,7 @@ class InAppWebViewController {
|
||||||
|
|
||||||
InAppWebView _widget;
|
InAppWebView _widget;
|
||||||
MethodChannel _channel;
|
MethodChannel _channel;
|
||||||
Map<String, List<JavaScriptHandlerCallback>> javaScriptHandlersMap = HashMap<String, List<JavaScriptHandlerCallback>>();
|
Map<String, JavaScriptHandlerCallback> javaScriptHandlersMap = HashMap<String, JavaScriptHandlerCallback>();
|
||||||
bool _isOpened = false;
|
bool _isOpened = false;
|
||||||
int _id;
|
int _id;
|
||||||
String _inAppBrowserUuid;
|
String _inAppBrowserUuid;
|
||||||
|
@ -849,9 +849,7 @@ class InAppWebViewController {
|
||||||
String handlerName = call.arguments["handlerName"];
|
String handlerName = call.arguments["handlerName"];
|
||||||
List<dynamic> args = jsonDecode(call.arguments["args"]);
|
List<dynamic> args = jsonDecode(call.arguments["args"]);
|
||||||
if (javaScriptHandlersMap.containsKey(handlerName)) {
|
if (javaScriptHandlersMap.containsKey(handlerName)) {
|
||||||
for (var handler in javaScriptHandlersMap[handlerName]) {
|
return await javaScriptHandlersMap[handlerName](args);
|
||||||
handler(args);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1140,31 +1138,22 @@ class InAppWebViewController {
|
||||||
await _channel.invokeMethod('injectStyleFile', args);
|
await _channel.invokeMethod('injectStyleFile', args);
|
||||||
}
|
}
|
||||||
|
|
||||||
///Adds/Appends a JavaScript message handler [callback] ([JavaScriptHandlerCallback]) that listen to post messages sent from JavaScript by the handler with name [handlerName].
|
///Adds a JavaScript message handler [callback] ([JavaScriptHandlerCallback]) that listen to post messages sent from JavaScript by the handler with name [handlerName].
|
||||||
///Returns the position `index` of the handler that can be used to remove it with the [removeJavaScriptHandler()] method.
|
|
||||||
///
|
///
|
||||||
///The Android implementation uses [addJavascriptInterface](https://developer.android.com/reference/android/webkit/WebView#addJavascriptInterface(java.lang.Object,%20java.lang.String)).
|
///The Android implementation uses [addJavascriptInterface](https://developer.android.com/reference/android/webkit/WebView#addJavascriptInterface(java.lang.Object,%20java.lang.String)).
|
||||||
///The iOS implementation uses [addScriptMessageHandler](https://developer.apple.com/documentation/webkit/wkusercontentcontroller/1537172-addscriptmessagehandler?language=objc)
|
///The iOS implementation uses [addScriptMessageHandler](https://developer.apple.com/documentation/webkit/wkusercontentcontroller/1537172-addscriptmessagehandler?language=objc)
|
||||||
///
|
///
|
||||||
///The JavaScript function that can be used to call the handler is `window.flutter_inappbrowser.callHandler(handlerName <String>, ...args);`, where `args` are [rest parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
|
///The JavaScript function that can be used to call the handler is `window.flutter_inappbrowser.callHandler(handlerName <String>, ...args);`, where `args` are [rest parameters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
|
||||||
///The `args` will be stringified automatically using `JSON.stringify(args)` method and then they will be decoded on the Dart side.
|
///The `args` will be stringified automatically using `JSON.stringify(args)` method and then they will be decoded on the Dart side.
|
||||||
int addJavaScriptHandler(String handlerName, JavaScriptHandlerCallback callback) {
|
void addJavaScriptHandler(String handlerName, JavaScriptHandlerCallback callback) {
|
||||||
this.javaScriptHandlersMap.putIfAbsent(handlerName, () => List<JavaScriptHandlerCallback>());
|
this.javaScriptHandlersMap[handlerName] = (callback);
|
||||||
this.javaScriptHandlersMap[handlerName].add(callback);
|
|
||||||
return this.javaScriptHandlersMap[handlerName].indexOf(callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///Removes a JavaScript message handler previously added with the [addJavaScriptHandler()] method in the [handlerName] list by its position [index].
|
///Removes a JavaScript message handler previously added with the [addJavaScriptHandler()] associated to [handlerName] key.
|
||||||
///Returns `true` if the callback is removed, otherwise `false`.
|
///Returns the value associated with [handlerName] before it was removed.
|
||||||
bool removeJavaScriptHandler(String handlerName, int index) {
|
///Returns `null` if [handlerName] was not found.
|
||||||
try {
|
JavaScriptHandlerCallback removeJavaScriptHandler(String handlerName) {
|
||||||
this.javaScriptHandlersMap[handlerName].removeAt(index);
|
return this.javaScriptHandlersMap.remove(handlerName);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
on RangeError catch(e) {
|
|
||||||
print(e);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///Takes a screenshot (in PNG format) of the WebView's visible viewport and returns a `Uint8List`. Returns `null` if it wasn't be able to take it.
|
///Takes a screenshot (in PNG format) of the WebView's visible viewport and returns a `Uint8List`. Returns `null` if it wasn't be able to take it.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: flutter_inappbrowser
|
name: flutter_inappbrowser
|
||||||
description: A Flutter plugin that allows you to add an inline webview or open an in-app browser window (inspired by the popular cordova-plugin-inappbrowser).
|
description: A Flutter plugin that allows you to add an inline webview or open an in-app browser window (inspired by the popular cordova-plugin-inappbrowser).
|
||||||
version: 1.0.1
|
version: 1.1.0
|
||||||
author: Lorenzo Pichilli <pichillilorenzo@gmail.com>
|
author: Lorenzo Pichilli <pichillilorenzo@gmail.com>
|
||||||
homepage: https://github.com/pichillilorenzo/flutter_inappbrowser
|
homepage: https://github.com/pichillilorenzo/flutter_inappbrowser
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue