Skip to content

Commit ec348cd

Browse files
v0.5.2
1 parent 867715e commit ec348cd

File tree

12 files changed

+347
-98
lines changed

12 files changed

+347
-98
lines changed

.idea/workspace.xml

+94-79
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.5.2
2+
3+
- fixed some missing `result.success()` on Android and iOS
4+
- added `postUrl()` method for `InAppWebView` and `InAppBrowser`
5+
- added `loadData()` method for `InAppWebView` and `InAppBrowser`
6+
17
## 0.5.1
28

39
- updated README.md

README.md

+18-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ InAppWebView(
295295
}
296296
```
297297

298-
299298
#### Future\<void\> InAppWebViewController.loadUrl
300299

301300
Loads the given `url` with optional `headers` specified as a map from name to value.
@@ -304,6 +303,24 @@ Loads the given `url` with optional `headers` specified as a map from name to va
304303
inAppWebViewController.loadUrl(String url, {Map<String, String> headers = const {}});
305304
```
306305

306+
#### Future\<void\> InAppWebViewController.postUrl
307+
308+
Loads the given `url` with `postData` using `POST` method into this WebView.
309+
310+
```dart
311+
inAppWebViewController.postUrl(String url, Uint8List postData);
312+
```
313+
314+
#### Future\<void\> InAppWebViewController.loadData
315+
316+
Loads the given `data` into this WebView, using `baseUrl` as the base URL for the content.
317+
The `mimeType` parameter specifies the format of the data.
318+
The `encoding` parameter specifies the encoding of the data.
319+
320+
```dart
321+
inAppWebViewController.loadData(String data, {String mimeType = "text/html", String encoding = "utf8", String baseUrl = "about:blank"});
322+
```
323+
307324
#### Future\<void\> InAppWebViewController.loadFile
308325

309326
Loads the given `assetFilePath` with optional `headers` specified as a map from name to value.

android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/FlutterWebView.java

+19
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,25 @@ public void onMethodCall(MethodCall call, Result result) {
8383
else
8484
result.success(false);
8585
break;
86+
case "postUrl":
87+
if (webView != null)
88+
webView.postUrl(call.argument("url").toString(), (byte[]) call.argument("postData"), result);
89+
else
90+
result.success(false);
91+
break;
92+
case "loadData":
93+
{
94+
String data = call.argument("data").toString();
95+
String mimeType = call.argument("mimeType").toString();
96+
String encoding = call.argument("encoding").toString();
97+
String baseUrl = call.argument("baseUrl").toString();
98+
99+
if (webView != null)
100+
webView.loadData(data, mimeType, encoding, baseUrl, result);
101+
else
102+
result.success(false);
103+
}
104+
break;
86105
case "loadFile":
87106
if (webView != null)
88107
webView.loadFile(call.argument("url").toString(), (Map<String, String>) call.argument("headers"), result);

android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java

+16
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,22 @@ public void loadUrl(String url, Map<String, String> headers, MethodChannel.Resul
180180
}
181181
}
182182

183+
public void postUrl(String url, byte[] postData, MethodChannel.Result result) {
184+
if (webView != null) {
185+
webView.postUrl(url, postData, result);
186+
} else {
187+
result.error(LOG_TAG, "Cannot load url " + url, null);
188+
}
189+
}
190+
191+
public void loadData(String data, String mimeType, String encoding, String baseUrl, MethodChannel.Result result) {
192+
if (webView != null) {
193+
webView.loadData(data, mimeType, encoding, baseUrl, result);
194+
} else {
195+
result.error(LOG_TAG, "Cannot load data", null);
196+
}
197+
}
198+
183199
public void loadFile(String url, MethodChannel.Result result) {
184200
if (webView != null) {
185201
webView.loadFile(url, result);

android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ public void run() {
137137
if (openWithSystemBrowser) {
138138
Log.d(LOG_TAG, "in system");
139139
openExternal(url, result);
140-
}
141-
else {
140+
} else {
142141
//Load the dialer
143142
if (url.startsWith(WebView.SCHEME_TEL)) {
144143
try {
@@ -163,6 +162,18 @@ public void run() {
163162
case "loadUrl":
164163
loadUrl(uuid, call.argument("url").toString(), (Map<String, String>) call.argument("headers"), result);
165164
break;
165+
case "postUrl":
166+
postUrl(uuid, call.argument("url").toString(), (byte[]) call.argument("postData"), result);
167+
break;
168+
case "loadData":
169+
{
170+
String data = call.argument("data").toString();
171+
String mimeType = call.argument("mimeType").toString();
172+
String encoding = call.argument("encoding").toString();
173+
String baseUrl = call.argument("baseUrl").toString();
174+
loadData(uuid, data, mimeType, encoding, baseUrl, result);
175+
}
176+
break;
166177
case "loadFile":
167178
loadFile(uuid, call.argument("url").toString(), (Map<String, String>) call.argument("headers"), result);
168179
break;
@@ -393,6 +404,18 @@ public void loadUrl(String uuid, String url, Map<String, String> headers, Result
393404
}
394405
}
395406

407+
public void postUrl(String uuid, String url, byte[] postData, Result result) {
408+
InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
409+
if (inAppBrowserActivity != null)
410+
inAppBrowserActivity.postUrl(url, postData, result);
411+
}
412+
413+
public void loadData(String uuid, String data, String mimeType, String encoding, String baseUrl, Result result) {
414+
InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
415+
if (inAppBrowserActivity != null)
416+
inAppBrowserActivity.loadData(data, mimeType, encoding, baseUrl, result);
417+
}
418+
396419
public void loadFile(String uuid, String url, Map<String, String> headers, Result result) {
397420
InAppBrowserActivity inAppBrowserActivity = webViewActivities.get(uuid);
398421
if (inAppBrowserActivity != null) {

android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppWebView/InAppWebView.java

+23
Original file line numberDiff line numberDiff line change
@@ -183,15 +183,34 @@ public void loadUrl(String url, MethodChannel.Result result) {
183183
loadUrl(url);
184184
} else {
185185
result.error(LOG_TAG, "url is empty", null);
186+
return;
186187
}
188+
result.success(true);
187189
}
188190

189191
public void loadUrl(String url, Map<String, String> headers, MethodChannel.Result result) {
190192
if (!url.isEmpty()) {
191193
loadUrl(url, headers);
192194
} else {
193195
result.error(LOG_TAG, "url is empty", null);
196+
return;
194197
}
198+
result.success(true);
199+
}
200+
201+
public void postUrl(String url, byte[] postData, MethodChannel.Result result) {
202+
if (!url.isEmpty()) {
203+
postUrl(url, postData);
204+
} else {
205+
result.error(LOG_TAG, "url is empty", null);
206+
return;
207+
}
208+
result.success(true);
209+
}
210+
211+
public void loadData(String data, String mimeType, String encoding, String baseUrl, MethodChannel.Result result) {
212+
loadDataWithBaseURL(baseUrl, data, mimeType, encoding, null);
213+
result.success(true);
195214
}
196215

197216
public void loadFile(String url, MethodChannel.Result result) {
@@ -206,7 +225,9 @@ public void loadFile(String url, MethodChannel.Result result) {
206225
loadUrl(url);
207226
} else {
208227
result.error(LOG_TAG, "url is empty", null);
228+
return;
209229
}
230+
result.success(true);
210231
}
211232

212233
public void loadFile(String url, Map<String, String> headers, MethodChannel.Result result) {
@@ -221,7 +242,9 @@ public void loadFile(String url, Map<String, String> headers, MethodChannel.Resu
221242
loadUrl(url, headers);
222243
} else {
223244
result.error(LOG_TAG, "url is empty", null);
245+
return;
224246
}
247+
result.success(true);
225248
}
226249

227250
public boolean isLoading() {

example/lib/main.dart

+48-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import 'dart:async';
2-
import 'dart:convert' show base64;
2+
import 'dart:convert';
33
import 'package:flutter/material.dart';
44
import 'package:flutter_inappbrowser/flutter_inappbrowser.dart';
55

66
class MyInAppBrowser extends InAppBrowser {
77
@override
88
Future onLoadStart(String url) async {
99
print("\n\nStarted $url\n\n");
10-
print("\n\n ${await this.isHidden()} \n\n");
11-
print(await this.webViewController.canGoBack());
12-
print(await this.webViewController.canGoForward());
10+
// print("\n\n ${await this.isHidden()} \n\n");
11+
// print(await this.webViewController.canGoBack());
12+
// print(await this.webViewController.canGoForward());
1313
}
1414

1515
@override
@@ -105,7 +105,7 @@ class MyInAppBrowser extends InAppBrowser {
105105

106106
@override
107107
void onProgressChanged(int progress) {
108-
print("Progress: $progress");
108+
// print("Progress: $progress");
109109
}
110110

111111
@override
@@ -117,6 +117,47 @@ class MyInAppBrowser extends InAppBrowser {
117117
void shouldOverrideUrlLoading(String url) {
118118
print("\n\n override $url\n\n");
119119
this.webViewController.loadUrl(url);
120+
121+
// var postData = "username=my_username&password=my_password";
122+
// inAppBrowserFallback.webViewController.postUrl("http://localhost:8080", utf8.encode(postData));
123+
124+
// var htmlData = """
125+
//<!doctype html>
126+
//<html lang="en">
127+
//<head>
128+
// <meta charset="UTF-8">
129+
// <meta name="viewport"
130+
// content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
131+
// <meta http-equiv="X-UA-Compatible" content="ie=edge">
132+
// <title>Document</title>
133+
// <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
134+
// <link rel="stylesheet" href="http://localhost:8080/assets/css/style.css">
135+
// <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
136+
//</head>
137+
//<body>
138+
//<div class="container">
139+
// <div class="container">
140+
// <img src="http://localhost:8080/assets/images/dart.svg" alt="dart logo">
141+
// <div class="row">
142+
// <div class="col-sm">
143+
// One of three columns
144+
// </div>
145+
// <div class="col-sm">
146+
// One of three columns
147+
// </div>
148+
// <div class="col-sm">
149+
// One of three columns
150+
// </div>
151+
// </div>
152+
// </div>
153+
// <script>
154+
// console.log("hello");
155+
// </script>
156+
//</div>
157+
//</body>
158+
//</html>
159+
// """;
160+
// inAppBrowserFallback.webViewController.loadData(htmlData);
120161
}
121162

122163
@override
@@ -231,10 +272,10 @@ class _MyAppState extends State<MyApp> {
231272
// });
232273
//
233274
await inAppBrowserFallback.open(url: "https://flutter.io/", options: {
234-
"useOnLoadResource": true,
275+
//"useOnLoadResource": true,
235276
//"hidden": true,
236277
//"toolbarTopFixedTitle": "Fixed title",
237-
//"useShouldOverrideUrlLoading": true
278+
"useShouldOverrideUrlLoading": true
238279
//"hideUrlBar": true,
239280
//"toolbarTop": false,
240281
//"toolbarBottom": false

ios/Classes/InAppBrowserWebViewController.swift

+28
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,34 @@ class InAppBrowserWebViewController: UIViewController, WKUIDelegate, WKNavigatio
378378
webView.load(request)
379379
}
380380

381+
func loadData(data: String, mimeType: String, encoding: String, baseUrl: String) {
382+
let url = URL(string: baseUrl)!
383+
currentURL = url
384+
if #available(iOS 9.0, *) {
385+
webView.load(data.data(using: .utf8)!, mimeType: mimeType, characterEncodingName: encoding, baseURL: url)
386+
} else {
387+
webView.loadHTMLString(data, baseURL: url)
388+
}
389+
}
390+
391+
func postUrl(url: URL, postData: Data, result: @escaping FlutterResult) {
392+
var request = URLRequest(url: url)
393+
request.httpMethod = "POST"
394+
request.httpBody = postData
395+
396+
let task = URLSession.shared.dataTask(with: request) { (data : Data?, response : URLResponse?, error : Error?) in
397+
var returnString = ""
398+
if data != nil {
399+
returnString = String(data: data!, encoding: .utf8) ?? ""
400+
}
401+
DispatchQueue.main.async(execute: {() -> Void in
402+
self.webView.loadHTMLString(returnString, baseURL: url)
403+
result(true)
404+
})
405+
}
406+
task.resume()
407+
}
408+
381409
// Load user requested url
382410
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
383411
textField.resignFirstResponder()

ios/Classes/SwiftFlutterPlugin.swift

+32
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
6868
case "loadUrl":
6969
self.loadUrl(uuid: uuid, arguments: arguments!, result: result)
7070
break
71+
case "loadData":
72+
self.loadData(uuid: uuid, arguments: arguments!, result: result)
73+
break
74+
case "postUrl":
75+
self.postUrl(uuid: uuid, arguments: arguments!, result: result)
76+
break
7177
case "loadFile":
7278
self.loadFile(uuid: uuid, arguments: arguments!, result: result)
7379
break
@@ -384,10 +390,34 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
384390
}
385391
else {
386392
result(FlutterError(code: "InAppBrowserFlutterPlugin", message: "url is empty", details: nil))
393+
return
387394
}
388395
result(true)
389396
}
390397

398+
public func loadData(uuid: String, arguments: NSDictionary, result: @escaping FlutterResult) {
399+
let webViewController: InAppBrowserWebViewController = self.webViewControllers[uuid] as! InAppBrowserWebViewController
400+
let data = (arguments["data"] as? String)!
401+
let mimeType = (arguments["mimeType"] as? String)!
402+
let encoding = (arguments["encoding"] as? String)!
403+
let baseUrl = (arguments["baseUrl"] as? String)!
404+
webViewController.loadData(data: data, mimeType: mimeType, encoding: encoding, baseUrl: baseUrl)
405+
result(true)
406+
}
407+
408+
public func postUrl(uuid: String, arguments: NSDictionary, result: @escaping FlutterResult) {
409+
let webViewController: InAppBrowserWebViewController = self.webViewControllers[uuid] as! InAppBrowserWebViewController
410+
if let url = arguments["url"] as? String {
411+
let postData = (arguments["postData"] as? FlutterStandardTypedData)!
412+
let absoluteUrl = URL(string: url)!.absoluteURL
413+
webViewController.postUrl(url: absoluteUrl, postData: postData.data, result: result)
414+
}
415+
else {
416+
result(FlutterError(code: "InAppBrowserFlutterPlugin", message: "url is empty", details: nil))
417+
return
418+
}
419+
}
420+
391421
public func loadFile(uuid: String, arguments: NSDictionary, result: @escaping FlutterResult) {
392422
let webViewController: InAppBrowserWebViewController = self.webViewControllers[uuid] as! InAppBrowserWebViewController
393423
if let url = arguments["url"] as? String {
@@ -404,6 +434,7 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
404434
}
405435
else {
406436
result(FlutterError(code: "InAppBrowserFlutterPlugin", message: "url is empty", details: nil))
437+
return
407438
}
408439
result(true)
409440
}
@@ -458,6 +489,7 @@ public class SwiftFlutterPlugin: NSObject, FlutterPlugin {
458489
func open(inSystem url: URL, result: @escaping FlutterResult) {
459490
if !UIApplication.shared.canOpenURL(url) {
460491
result(FlutterError(code: "InAppBrowserFlutterPlugin", message: url.absoluteString + " cannot be opened!", details: nil))
492+
return
461493
}
462494
else {
463495
if #available(iOS 10.0, *) {

0 commit comments

Comments
 (0)