A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
- Official documentation: inappwebview.dev/docs
- Read the online API Reference to get the full API documentation.
- Official blog: inappwebview.dev/blog
- Find open source projects on the Official Showcase page: inappwebview.dev/showcase
- Check the example/integration_test/webview_flutter_test.dart file for other code examples
- Flutter Browser App: A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by the flutter_inappwebview plugin
Check the Showcase page to see an open list of Apps built with Flutter and Flutter InAppWebView.
Send a submission request to the Submit App page!
- Dart sdk: ">=2.12.0-0 <3.0.0"
- Flutter: ">=1.22.2"
- Android:
minSdkVersion 17
and add support forandroidx
(see AndroidX Migration to migrate an existing app) - iOS:
--ios-language swift
, Xcode version>= 12
Add flutter_inappwebview
as a dependency in your pubspec.yaml file.
- InAppWebView: Flutter Widget for adding an inline native WebView integrated into the flutter widget tree.
- ContextMenu: This class represents the WebView context menu.
- HeadlessInAppWebView: Class that represents a WebView in headless mode. It can be used to run a WebView in background without attaching an InAppWebView to the widget tree.
- InAppBrowser: In-App Browser using native WebView.
- ChromeSafariBrowser: In-App Browser using Chrome Custom Tabs on Android / SFSafariViewController on iOS.
- InAppLocalhostServer: This class allows you to create a simple server on http://localhost:[port]/. The default port value is 8080.
- CookieManager: This class implements a singleton object (shared instance) which manages the cookies used by WebView instances.
- HttpAuthCredentialDatabase: This class implements a singleton object (shared instance) that manages the shared HTTP auth credentials cache.
- WebStorageManager: This class implements a singleton object (shared instance) which manages the web storage used by WebView instances.
Did you find this plugin useful? Please consider to make a donation to help improve it!
To add persistent http header, you should use shouldOverrideUrlLoading() method that flutter_inappwebview package provide.
they returns navigationAction as second parameter that contains request that are going to be proceeded.
In this case, it contains method, header, url and all other options but it doesn't included body of request.
This is what original package did in swift code.
Thus, you need to change it so that it returns body of request.
To do this, you need to change one file
./ios/Classes/Types/URLRequest.swift
add this line "body": httpBody,
after line65
then it will looks like this.
public func toMap () -> [String:Any?] {
var iosAllowsConstrainedNetworkAccess: Bool? = nil
var iosAllowsExpensiveNetworkAccess: Bool? = nil
if #available(iOS 13.0, *) {
iosAllowsConstrainedNetworkAccess = allowsConstrainedNetworkAccess
iosAllowsExpensiveNetworkAccess = allowsExpensiveNetworkAccess
}
return [
"url": url?.absoluteString,
"method": httpMethod,
"headers": allHTTPHeaderFields,
"body": httpBody,
"iosAllowsCellularAccess": allowsCellularAccess,
"iosAllowsConstrainedNetworkAccess": iosAllowsConstrainedNetworkAccess,
"iosAllowsExpensiveNetworkAccess": iosAllowsExpensiveNetworkAccess,
"iosCachePolicy": cachePolicy.rawValue,
"iosHttpShouldHandleCookies": httpShouldHandleCookies,
"iosHttpShouldUsePipelining": httpShouldUsePipelining,
"iosNetworkServiceType": networkServiceType.rawValue,
"iosTimeoutInterval": timeoutInterval,
"iosMainDocumentURL": mainDocumentURL?.absoluteString
]
}
Then you can get body of request with navigationAction.request.body
And you can make same request with same params and can add custom headers to the request.
thats all.
in pubspec.yaml file, add this under dependencies
flutter_inappwebview:
git:
url: https://github.com/galaxydeve/flutter_inappwebview.git
ref: master