Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
Flutter Inappwebview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李增强
Flutter Inappwebview
Commits
3dd7d175
Commit
3dd7d175
authored
Nov 25, 2019
by
Lorenzo Pichilli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed Android InAppBrowserActivity crash
parent
cab5338f
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
147 additions
and
322 deletions
+147
-322
.idea/workspace.xml
.idea/workspace.xml
+94
-56
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java
...llilorenzo/flutter_inappbrowser/InAppBrowserActivity.java
+1
-0
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
...renzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
+0
-1
example/assets/index.html
example/assets/index.html
+2
-108
example/ios/Flutter/flutter_export_environment.sh
example/ios/Flutter/flutter_export_environment.sh
+2
-1
example/lib/chrome_safari_browser_example.screen.dart
example/lib/chrome_safari_browser_example.screen.dart
+5
-36
example/lib/in_app_browser_example.screen.dart
example/lib/in_app_browser_example.screen.dart
+6
-74
example/lib/in_app_webiew_example.screen.dart
example/lib/in_app_webiew_example.screen.dart
+3
-41
example/lib/main.dart
example/lib/main.dart
+34
-5
No files found.
.idea/workspace.xml
View file @
3dd7d175
This diff is collapsed.
Click to expand it.
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserActivity.java
View file @
3dd7d175
...
...
@@ -56,6 +56,7 @@ public class InAppBrowserActivity extends AppCompatActivity {
webView
=
findViewById
(
R
.
id
.
webView
);
webView
.
inAppBrowserActivity
=
this
;
webView
.
registrar
=
InAppBrowserFlutterPlugin
.
inAppBrowser
.
registrar
;
Bundle
b
=
getIntent
().
getExtras
();
uuid
=
b
.
getString
(
"uuid"
);
...
...
android/src/main/java/com/pichillilorenzo/flutter_inappbrowser/InAppBrowserFlutterPlugin.java
View file @
3dd7d175
...
...
@@ -19,7 +19,6 @@ public class InAppBrowserFlutterPlugin implements FlutterPlugin {
public
static
CredentialDatabaseHandler
credentialDatabaseHandler
;
public
static
ValueCallback
<
Uri
[]>
uploadMessageArray
;
public
InAppBrowserFlutterPlugin
()
{}
public
static
void
registerWith
(
PluginRegistry
.
Registrar
registrar
)
{
...
...
example/assets/index.html
View file @
3dd7d175
...
...
@@ -5,7 +5,7 @@
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"ie=edge"
>
<title>
Flutter InAppBrowser
</title>
<link
rel=
"stylesheet"
href=
"http://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css"
>
<link
rel=
"stylesheet"
href=
"http
s
://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css"
>
<link
rel=
"stylesheet"
href=
"css/style.css"
>
<script
src=
"https://code.jquery.com/jquery-3.3.1.min.js"
></script>
<link
rel=
"shortcut icon"
href=
"favicon.ico"
>
...
...
@@ -25,27 +25,10 @@
<main
role=
"main"
class=
"inner cover"
>
<h1
class=
"cover-heading"
>
Inline WebView
</h1>
<img
src=
"
my-special-custom-scheme://
images/flutter-logo.svg"
alt=
"flutter logo"
>
<img
src=
"images/flutter-logo.svg"
alt=
"flutter logo"
>
<p
class=
"lead"
>
Cover is a one-page template for building simple and beautiful home pages. Download, edit the text, and add your own fullscreen background photo to make it your own.
</p>
<select
name=
""
id=
""
>
<option
value=
"1"
>
option 1
</option>
<option
value=
"2"
>
option 2
</option>
</select>
<input
type=
"file"
>
<input
type=
"file"
accept=
"image/*"
capture
>
<button
onclick=
"testHistoryPush1()"
>
History Push 1
</button>
<button
onclick=
"testHistoryPush2()"
>
History Push 2
</button>
<button
onclick=
"testLocationHref()"
>
Location Href
</button>
<p>
<img
src=
"https://via.placeholder.com/100x50"
alt=
"placeholder 100x50"
>
</p>
</main>
<!--<form method="POST" action="http://192.168.1.20:8082/test-post">
<input type="text" name="name" placeholder="name" value="Lorenzo">
<input type="submit" value="SEND">
</form>-->
<footer
class=
"mastfoot mt-auto"
>
<div
class=
"inner"
>
<p>
Cover template for
<a
target=
"_blank"
href=
"https://getbootstrap.com/"
>
Bootstrap
</a>
, by
<a
href=
"https://twitter.com/mdo"
>
@mdo
</a>
.
</p>
...
...
@@ -54,94 +37,5 @@
</div>
</footer>
</div>
<script>
var
state
=
{
'
page_id
'
:
1
,
'
user_id
'
:
5
};
function
testHistoryPush1
()
{
var
randomNumber
=
100
*
Math
.
random
();
var
title
=
'
Hello World
'
+
randomNumber
;
var
url
=
'
hello-foo-
'
+
randomNumber
+
'
.html
'
;
history
.
pushState
(
state
,
title
,
url
);
}
function
testHistoryPush2
()
{
var
randomNumber
=
100
*
Math
.
random
();
var
title
=
'
Hello World
'
+
randomNumber
;
var
url
=
'
hello-bar-
'
+
randomNumber
+
'
.html
'
;
history
.
replaceState
(
state
,
title
,
url
);
}
function
testLocationHref
()
{
var
randomNumber
=
100
*
Math
.
random
();
window
.
location
=
"
#foo-
"
+
randomNumber
;
}
window
.
addEventListener
(
"
flutterInAppBrowserPlatformReady
"
,
function
(
event
)
{
window
.
flutter_inappbrowser
.
callHandler
(
'
handlerFoo
'
).
then
(
function
(
result
)
{
console
.
log
(
result
,
typeof
result
);
console
.
log
(
JSON
.
stringify
(
result
),
result
.
bar
);
});
window
.
flutter_inappbrowser
.
callHandler
(
'
handlerFooWithArgs
'
,
1
,
true
,
[
'
bar
'
,
5
],
{
foo
:
'
baz
'
}).
then
(
function
(
result
)
{
console
.
log
(
result
,
typeof
result
);
console
.
log
(
JSON
.
stringify
(
result
));
});
});
$
(
document
).
ready
(
function
()
{
console
.
log
(
"
jQuery ready
"
);
var
xhttp
=
new
XMLHttpRequest
();
xhttp
.
addEventListener
(
"
load
"
,
function
()
{
console
.
log
(
this
.
response
);
});
xhttp
.
open
(
"
POST
"
,
"
http://192.168.1.20:8082/test-ajax-post
"
);
xhttp
.
setRequestHeader
(
"
Content-type
"
,
"
application/x-www-form-urlencoded
"
);
xhttp
.
send
(
"
name=Lorenzo
"
);
var
xhttp2
=
new
XMLHttpRequest
();
xhttp2
.
open
(
"
GET
"
,
"
http://192.168.1.20:8082/test-download-file
"
);
xhttp2
.
send
();
fetch
(
new
Request
(
"
http://192.168.1.20:8082/test-download-file
"
)).
then
(
function
(
response
)
{
console
.
log
(
response
);
}).
catch
(
function
(
error
)
{
console
.
error
(
"
ERROR:
"
+
error
);
});
fetch
(
"
http://192.168.1.20:8082/test-ajax-post
"
,
{
method
:
'
POST
'
,
body
:
JSON
.
stringify
({
name
:
'
Lorenzo Fetch API
'
}),
headers
:
{
'
Content-Type
'
:
'
application/json
'
}
}).
then
(
function
(
response
)
{
console
.
log
(
response
);
}).
catch
(
function
(
error
)
{
console
.
error
(
"
ERROR:
"
+
error
);
});
/*
alert("Alert Popup");
console.log(confirm("Press a button!"));
console.log(prompt("Please enter your name", "Lorenzo"));
*/
/*
if ("geolocation" in navigator) {
console.log("Geolocation API enabled");
navigator.geolocation.getCurrentPosition(function(position) {
console.log(position.coords.latitude, position.coords.longitude);
});
} else {
console.log("No geolocation API");
}
*/
});
</script>
</body>
</html>
\ No newline at end of file
example/ios/Flutter/flutter_export_environment.sh
View file @
3dd7d175
...
...
@@ -2,9 +2,10 @@
# This is a generated file; do not edit or check into version control.
export
"FLUTTER_ROOT=/Users/lorenzopichilli/flutter"
export
"FLUTTER_APPLICATION_PATH=/Users/lorenzopichilli/Desktop/flutter_inappbrowser/example"
export
"FLUTTER_TARGET=/Users/lorenzopichilli/Desktop/flutter_inappbrowser/example/
test_driver/app
.dart"
export
"FLUTTER_TARGET=/Users/lorenzopichilli/Desktop/flutter_inappbrowser/example/
lib/main
.dart"
export
"FLUTTER_BUILD_DIR=build"
export
"SYMROOT=
${
SOURCE_ROOT
}
/../build/ios"
export
"FLUTTER_FRAMEWORK_DIR=/Users/lorenzopichilli/flutter/bin/cache/artifacts/engine/ios"
export
"FLUTTER_BUILD_NAME=1.0.0"
export
"FLUTTER_BUILD_NUMBER=1"
export
"TRACK_WIDGET_CREATION=true"
example/lib/chrome_safari_browser_example.screen.dart
View file @
3dd7d175
import
'package:flutter/material.dart'
;
import
'package:flutter_inappbrowser/flutter_inappbrowser.dart'
;
import
'main.dart'
;
class
MyChromeSafariBrowser
extends
ChromeSafariBrowser
{
MyChromeSafariBrowser
(
browserFallback
)
:
super
(
bFallback:
browserFallback
);
...
...
@@ -43,48 +45,15 @@ class _ChromeSafariBrowserExampleScreenState
title:
Text
(
"ChromeSafariBrowser"
,
)),
drawer:
Drawer
(
child:
ListView
(
padding:
EdgeInsets
.
zero
,
children:
<
Widget
>[
DrawerHeader
(
child:
Text
(
'flutter_inappbrowser example'
),
decoration:
BoxDecoration
(
color:
Colors
.
blue
,
),
),
ListTile
(
title:
Text
(
'InAppBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/InAppBrowser'
);
},
),
ListTile
(
title:
Text
(
'ChromeSafariBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/ChromeSafariBrowser'
);
},
),
ListTile
(
title:
Text
(
'InAppWebView'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/'
);
},
),
],
),
),
drawer:
myDrawer
(
context:
context
),
body:
Center
(
child:
RaisedButton
(
onPressed:
()
async
{
await
widget
.
browser
.
open
(
url:
"https://flutter.dev/"
,
options:
ChromeSafariBrowserClassOptions
(
androidChromeCustomTabsOptions:
AndroidChromeCustomTabsOptions
(
addShareButton:
false
),
iosSafariOptions:
IosSafariOptions
(
barCollapsingEnabled:
true
)));
androidChromeCustomTabsOptions:
AndroidChromeCustomTabsOptions
(
addShareButton:
false
),
iosSafariOptions:
IosSafariOptions
(
barCollapsingEnabled:
true
)));
},
child:
Text
(
"Open Chrome Safari Browser"
)),
));
...
...
example/lib/in_app_browser_example.screen.dart
View file @
3dd7d175
...
...
@@ -3,10 +3,12 @@ import 'dart:async';
import
'package:flutter/material.dart'
;
import
'package:flutter_inappbrowser/flutter_inappbrowser.dart'
;
import
'main.dart'
;
class
MyInAppBrowser
extends
InAppBrowser
{
@override
Future
onBrowserCreated
()
async
{
print
(
"
\n\n
Browser
Ready
!
\n\n
"
);
print
(
"
\n\n
Browser
Created
!
\n\n
"
);
}
@override
...
...
@@ -19,11 +21,6 @@ class MyInAppBrowser extends InAppBrowser {
print
(
"
\n\n
Stopped
$url
\n\n
"
);
}
@override
Future
onScrollChanged
(
int
x
,
int
y
)
async
{
print
(
"Scrolled: x:
$x
y:
$y
"
);
}
@override
void
onLoadError
(
String
url
,
int
code
,
String
message
)
{
print
(
"Can't load
$url
.. Error:
$message
"
);
...
...
@@ -63,40 +60,6 @@ class MyInAppBrowser extends InAppBrowser {
messageLevel:
${consoleMessage.messageLevel.toValue()}
"""
);
}
@override
void
onDownloadStart
(
String
url
)
{
print
(
"Download of "
+
url
);
}
@override
Future
<
CustomSchemeResponse
>
onLoadResourceCustomScheme
(
String
scheme
,
String
url
)
async
{
print
(
"custom scheme: "
+
scheme
);
return
null
;
}
@override
Future
<
GeolocationPermissionShowPromptResponse
>
onGeolocationPermissionsShowPrompt
(
String
origin
)
async
{
print
(
"request Geolocation permission API"
);
return
null
;
}
@override
Future
<
JsAlertResponse
>
onJsAlert
(
String
message
)
async
{
return
new
JsAlertResponse
(
handledByClient:
false
,
message:
"coma iam"
);
}
@override
Future
<
JsConfirmResponse
>
onJsConfirm
(
String
message
)
{
return
null
;
}
@override
Future
<
JsPromptResponse
>
onJsPrompt
(
String
message
,
String
defaultValue
)
{
return
null
;
}
}
class
InAppBrowserExampleScreen
extends
StatefulWidget
{
...
...
@@ -120,48 +83,17 @@ class _InAppBrowserExampleScreenState extends State<InAppBrowserExampleScreen> {
title:
Text
(
"InAppBrowser"
,
)),
drawer:
Drawer
(
child:
ListView
(
padding:
EdgeInsets
.
zero
,
children:
<
Widget
>[
DrawerHeader
(
child:
Text
(
'flutter_inappbrowser example'
),
decoration:
BoxDecoration
(
color:
Colors
.
blue
,
),
),
ListTile
(
title:
Text
(
'InAppBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/InAppBrowser'
);
},
),
ListTile
(
title:
Text
(
'ChromeSafariBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/ChromeSafariBrowser'
);
},
),
ListTile
(
title:
Text
(
'InAppWebView'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/'
);
},
),
],
),
),
drawer:
myDrawer
(
context:
context
),
body:
Center
(
child:
RaisedButton
(
onPressed:
()
{
widget
.
browser
.
openFile
(
assetFilePath:
"assets/index.html"
,
//url: "https://www.google.com/",
options:
InAppBrowserClassOptions
(
inAppWebViewWidgetOptions:
InAppWebViewWidgetOptions
(
inAppWebViewOptions:
InAppWebViewOptions
(
useShouldOverrideUrlLoading:
true
,
useOnLoadResource:
true
,
useShouldOverrideUrlLoading:
true
,
useOnLoadResource:
true
,
))));
},
child:
Text
(
"Open Webview Browser"
)),
...
...
example/lib/in_app_webiew_example.screen.dart
View file @
3dd7d175
import
'dart:async'
;
import
'dart:convert'
;
import
'dart:io'
;
import
'dart:typed_data'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_inappbrowser/flutter_inappbrowser.dart'
;
import
'package:flutter_downloader/flutter_downloader.dart'
;
import
'package:path_provider/path_provider.dart'
;
import
'package:flutter/services.dart'
show
rootBundle
;
import
'main.dart'
;
class
InAppWebViewExampleScreen
extends
StatefulWidget
{
@override
...
...
@@ -20,7 +13,6 @@ class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> {
InAppWebViewController
webView
;
String
url
=
""
;
double
progress
=
0
;
CookieManager
cookieManager
=
CookieManager
.
instance
();
TextEditingController
_textFieldController
=
TextEditingController
();
...
...
@@ -42,37 +34,7 @@ class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> {
title:
Text
(
"InAppWebView"
,
)),
drawer:
Drawer
(
child:
ListView
(
padding:
EdgeInsets
.
zero
,
children:
<
Widget
>[
DrawerHeader
(
child:
Text
(
'flutter_inappbrowser example'
),
decoration:
BoxDecoration
(
color:
Colors
.
blue
,
),
),
ListTile
(
title:
Text
(
'InAppBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/InAppBrowser'
);
},
),
ListTile
(
title:
Text
(
'ChromeSafariBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/ChromeSafariBrowser'
);
},
),
ListTile
(
title:
Text
(
'InAppWebView'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/'
);
},
),
],
),
),
drawer:
myDrawer
(
context:
context
),
body:
Container
(
child:
Column
(
children:
<
Widget
>[
Container
(
...
...
example/lib/main.dart
View file @
3dd7d175
...
...
@@ -7,18 +7,47 @@ import 'package:flutter_inappbrowser_example/chrome_safari_browser_example.scree
import
'package:flutter_inappbrowser_example/in_app_webiew_example.screen.dart'
;
import
'package:flutter_inappbrowser_example/in_app_browser_example.screen.dart'
;
import
'package:flutter_downloader/flutter_downloader.dart'
;
import
'package:permission_handler/permission_handler.dart'
;
// InAppLocalhostServer localhostServer = new InAppLocalhostServer();
Future
main
(
)
async
{
// await localhostServer.start();
// await FlutterDownloader.initialize();
await
PermissionHandler
().
requestPermissions
([
PermissionGroup
.
locationAlways
]);
runApp
(
new
MyApp
());
}
Drawer
myDrawer
(
{
@required
BuildContext
context
})
{
return
Drawer
(
child:
ListView
(
padding:
EdgeInsets
.
zero
,
children:
<
Widget
>[
DrawerHeader
(
child:
Text
(
'flutter_inappbrowser example'
),
decoration:
BoxDecoration
(
color:
Colors
.
blue
,
),
),
ListTile
(
title:
Text
(
'InAppBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/InAppBrowser'
);
},
),
ListTile
(
title:
Text
(
'ChromeSafariBrowser'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/ChromeSafariBrowser'
);
},
),
ListTile
(
title:
Text
(
'InAppWebView'
),
onTap:
()
{
Navigator
.
pushReplacementNamed
(
context
,
'/'
);
},
),
],
),
);
}
class
MyApp
extends
StatefulWidget
{
@override
_MyAppState
createState
()
=>
new
_MyAppState
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment