initial refactor
This commit is contained in:
parent
cac89da621
commit
a866cd6b24
@ -2,13 +2,13 @@ package com.pichillilorenzo.flutter_inappwebview.in_app_browser;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.pichillilorenzo.flutter_inappwebview.Options;
|
||||
import com.pichillilorenzo.flutter_inappwebview.IWebViewSettings;
|
||||
import com.pichillilorenzo.flutter_inappwebview.R;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class InAppBrowserOptions implements Options<InAppBrowserActivity> {
|
||||
public class InAppBrowserOptions implements IWebViewSettings<InAppBrowserActivity> {
|
||||
|
||||
public static final String LOG_TAG = "InAppBrowserOptions";
|
||||
|
@ -2,12 +2,12 @@ package com.pichillilorenzo.flutter_inappwebview.pull_to_refresh;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.pichillilorenzo.flutter_inappwebview.Options;
|
||||
import com.pichillilorenzo.flutter_inappwebview.IWebViewSettings;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PullToRefreshOptions implements Options<PullToRefreshLayout> {
|
||||
public class PullToRefreshOptions implements IWebViewSettings<PullToRefreshLayout> {
|
||||
public static final String LOG_TAG = "PullToRefreshOptions";
|
||||
|
||||
public Boolean enabled = true;
|
||||
@ -67,7 +67,7 @@ public class PullToRefreshOptions implements Options<PullToRefreshLayout> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getRealOptions(PullToRefreshLayout pullToRefreshLayout) {
|
||||
public Map<String, Object> getRealSettings(PullToRefreshLayout pullToRefreshLayout) {
|
||||
Map<String, Object> realOptions = toMap();
|
||||
return realOptions;
|
||||
}
|
||||
|
@ -8,13 +8,13 @@
|
||||
import Foundation
|
||||
|
||||
@objcMembers
|
||||
public class Options<T>: NSObject {
|
||||
public class IWebViewSettings<T>: NSObject {
|
||||
|
||||
override init(){
|
||||
super.init()
|
||||
}
|
||||
|
||||
func parse(options: [String: Any?]) -> Options {
|
||||
func parse(options: [String: Any?]) -> IWebViewSettings {
|
||||
for (key, value) in options {
|
||||
if !(value is NSNull), value != nil, self.responds(to: Selector(key)) {
|
||||
self.setValue(value, forKey: key)
|
@ -8,7 +8,7 @@
|
||||
import Foundation
|
||||
|
||||
@objcMembers
|
||||
public class InAppBrowserOptions: Options<InAppBrowserWebViewController> {
|
||||
public class InAppBrowserSettings: Options<InAppBrowserWebViewController> {
|
||||
|
||||
var hidden = false
|
||||
var hideToolbarTop = true
|
@ -1,139 +0,0 @@
|
||||
//
|
||||
// InAppWebViewOptions.swift
|
||||
// flutter_inappwebview
|
||||
//
|
||||
// Created by Lorenzo on 21/10/18.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebKit
|
||||
|
||||
@objcMembers
|
||||
public class InAppWebViewOptions: Options<InAppWebView> {
|
||||
|
||||
var useShouldOverrideUrlLoading = false
|
||||
var useOnLoadResource = false
|
||||
var useOnDownloadStart = false
|
||||
var clearCache = false
|
||||
var userAgent = ""
|
||||
var applicationNameForUserAgent = ""
|
||||
var javaScriptEnabled = true
|
||||
var javaScriptCanOpenWindowsAutomatically = false
|
||||
var mediaPlaybackRequiresUserGesture = true
|
||||
var verticalScrollBarEnabled = true
|
||||
var horizontalScrollBarEnabled = true
|
||||
var resourceCustomSchemes: [String] = []
|
||||
var contentBlockers: [[String: [String : Any]]] = []
|
||||
var minimumFontSize = 0
|
||||
var useShouldInterceptAjaxRequest = false
|
||||
var useShouldInterceptFetchRequest = false
|
||||
var incognito = false
|
||||
var cacheEnabled = true
|
||||
var transparentBackground = false
|
||||
var disableVerticalScroll = false
|
||||
var disableHorizontalScroll = false
|
||||
var disableContextMenu = false
|
||||
var supportZoom = true
|
||||
var allowUniversalAccessFromFileURLs = false
|
||||
var allowFileAccessFromFileURLs = false
|
||||
|
||||
var disallowOverScroll = false
|
||||
var enableViewportScale = false
|
||||
var suppressesIncrementalRendering = false
|
||||
var allowsAirPlayForMediaPlayback = true
|
||||
var allowsBackForwardNavigationGestures = true
|
||||
var allowsLinkPreview = true
|
||||
var ignoresViewportScaleLimits = false
|
||||
var allowsInlineMediaPlayback = false
|
||||
var allowsPictureInPictureMediaPlayback = true
|
||||
var isFraudulentWebsiteWarningEnabled = true;
|
||||
var selectionGranularity = 0;
|
||||
var dataDetectorTypes: [String] = ["NONE"] // WKDataDetectorTypeNone
|
||||
var preferredContentMode = 0
|
||||
var sharedCookiesEnabled = false
|
||||
var automaticallyAdjustsScrollIndicatorInsets = false
|
||||
var accessibilityIgnoresInvertColors = false
|
||||
var decelerationRate = "NORMAL" // UIScrollView.DecelerationRate.normal
|
||||
var alwaysBounceVertical = false
|
||||
var alwaysBounceHorizontal = false
|
||||
var scrollsToTop = true
|
||||
var isPagingEnabled = false
|
||||
var maximumZoomScale = 1.0
|
||||
var minimumZoomScale = 1.0
|
||||
var contentInsetAdjustmentBehavior = 2 // UIScrollView.ContentInsetAdjustmentBehavior.never
|
||||
var isDirectionalLockEnabled = false
|
||||
var mediaType: String? = nil
|
||||
var pageZoom = 1.0
|
||||
var limitsNavigationsToAppBoundDomains = false
|
||||
var useOnNavigationResponse = false
|
||||
var applePayAPIEnabled = false
|
||||
var allowingReadAccessTo: String? = nil
|
||||
var disableLongPressContextMenuOnLinks = false
|
||||
var disableInputAccessoryView = false
|
||||
|
||||
override init(){
|
||||
super.init()
|
||||
}
|
||||
|
||||
override func parse(options: [String: Any?]) -> InAppWebViewOptions {
|
||||
let _ = super.parse(options: options)
|
||||
if #available(iOS 13.0, *) {} else {
|
||||
applePayAPIEnabled = false
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
override func getRealOptions(obj: InAppWebView?) -> [String: Any?] {
|
||||
var realOptions: [String: Any?] = toMap()
|
||||
if let webView = obj {
|
||||
let configuration = webView.configuration
|
||||
if #available(iOS 9.0, *) {
|
||||
realOptions["userAgent"] = webView.customUserAgent
|
||||
realOptions["applicationNameForUserAgent"] = configuration.applicationNameForUserAgent
|
||||
realOptions["allowsAirPlayForMediaPlayback"] = configuration.allowsAirPlayForMediaPlayback
|
||||
realOptions["allowsLinkPreview"] = webView.allowsLinkPreview
|
||||
realOptions["allowsPictureInPictureMediaPlayback"] = configuration.allowsPictureInPictureMediaPlayback
|
||||
}
|
||||
realOptions["javaScriptCanOpenWindowsAutomatically"] = configuration.preferences.javaScriptCanOpenWindowsAutomatically
|
||||
if #available(iOS 10.0, *) {
|
||||
realOptions["mediaPlaybackRequiresUserGesture"] = configuration.mediaTypesRequiringUserActionForPlayback == .all
|
||||
realOptions["ignoresViewportScaleLimits"] = configuration.ignoresViewportScaleLimits
|
||||
realOptions["dataDetectorTypes"] = Util.getDataDetectorTypeString(type: configuration.dataDetectorTypes)
|
||||
} else {
|
||||
realOptions["mediaPlaybackRequiresUserGesture"] = configuration.mediaPlaybackRequiresUserAction
|
||||
}
|
||||
realOptions["minimumFontSize"] = configuration.preferences.minimumFontSize
|
||||
realOptions["suppressesIncrementalRendering"] = configuration.suppressesIncrementalRendering
|
||||
realOptions["allowsBackForwardNavigationGestures"] = webView.allowsBackForwardNavigationGestures
|
||||
realOptions["allowsInlineMediaPlayback"] = configuration.allowsInlineMediaPlayback
|
||||
if #available(iOS 13.0, *) {
|
||||
realOptions["isFraudulentWebsiteWarningEnabled"] = configuration.preferences.isFraudulentWebsiteWarningEnabled
|
||||
realOptions["preferredContentMode"] = configuration.defaultWebpagePreferences.preferredContentMode.rawValue
|
||||
realOptions["automaticallyAdjustsScrollIndicatorInsets"] = webView.scrollView.automaticallyAdjustsScrollIndicatorInsets
|
||||
}
|
||||
realOptions["selectionGranularity"] = configuration.selectionGranularity.rawValue
|
||||
if #available(iOS 11.0, *) {
|
||||
realOptions["accessibilityIgnoresInvertColors"] = webView.accessibilityIgnoresInvertColors
|
||||
realOptions["contentInsetAdjustmentBehavior"] = webView.scrollView.contentInsetAdjustmentBehavior.rawValue
|
||||
}
|
||||
realOptions["decelerationRate"] = Util.getDecelerationRateString(type: webView.scrollView.decelerationRate)
|
||||
realOptions["alwaysBounceVertical"] = webView.scrollView.alwaysBounceVertical
|
||||
realOptions["alwaysBounceHorizontal"] = webView.scrollView.alwaysBounceHorizontal
|
||||
realOptions["scrollsToTop"] = webView.scrollView.scrollsToTop
|
||||
realOptions["isPagingEnabled"] = webView.scrollView.isPagingEnabled
|
||||
realOptions["maximumZoomScale"] = webView.scrollView.maximumZoomScale
|
||||
realOptions["minimumZoomScale"] = webView.scrollView.minimumZoomScale
|
||||
realOptions["allowUniversalAccessFromFileURLs"] = configuration.value(forKey: "allowUniversalAccessFromFileURLs")
|
||||
realOptions["allowFileAccessFromFileURLs"] = configuration.preferences.value(forKey: "allowFileAccessFromFileURLs")
|
||||
realOptions["isDirectionalLockEnabled"] = webView.scrollView.isDirectionalLockEnabled
|
||||
realOptions["javaScriptEnabled"] = configuration.preferences.javaScriptEnabled
|
||||
if #available(iOS 14.0, *) {
|
||||
realOptions["mediaType"] = webView.mediaType
|
||||
realOptions["pageZoom"] = Float(webView.pageZoom)
|
||||
realOptions["limitsNavigationsToAppBoundDomains"] = configuration.limitsNavigationsToAppBoundDomains
|
||||
realOptions["javaScriptEnabled"] = configuration.defaultWebpagePreferences.allowsContentJavaScript
|
||||
}
|
||||
}
|
||||
return realOptions
|
||||
}
|
||||
}
|
139
ios/Classes/InAppWebView/InAppWebViewSettings.swift
Executable file
139
ios/Classes/InAppWebView/InAppWebViewSettings.swift
Executable file
@ -0,0 +1,139 @@
|
||||
//
|
||||
// InAppWebViewOptions.swift
|
||||
// flutter_inappwebview
|
||||
//
|
||||
// Created by Lorenzo on 21/10/18.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import WebKit
|
||||
|
||||
@objcMembers
|
||||
public class InAppWebViewSettings: IWebViewSettings<InAppWebView> {
|
||||
|
||||
var useShouldOverrideUrlLoading = false
|
||||
var useOnLoadResource = false
|
||||
var useOnDownloadStart = false
|
||||
var clearCache = false
|
||||
var userAgent = ""
|
||||
var applicationNameForUserAgent = ""
|
||||
var javaScriptEnabled = true
|
||||
var javaScriptCanOpenWindowsAutomatically = false
|
||||
var mediaPlaybackRequiresUserGesture = true
|
||||
var verticalScrollBarEnabled = true
|
||||
var horizontalScrollBarEnabled = true
|
||||
var resourceCustomSchemes: [String] = []
|
||||
var contentBlockers: [[String: [String : Any]]] = []
|
||||
var minimumFontSize = 0
|
||||
var useShouldInterceptAjaxRequest = false
|
||||
var useShouldInterceptFetchRequest = false
|
||||
var incognito = false
|
||||
var cacheEnabled = true
|
||||
var transparentBackground = false
|
||||
var disableVerticalScroll = false
|
||||
var disableHorizontalScroll = false
|
||||
var disableContextMenu = false
|
||||
var supportZoom = true
|
||||
var allowUniversalAccessFromFileURLs = false
|
||||
var allowFileAccessFromFileURLs = false
|
||||
|
||||
var disallowOverScroll = false
|
||||
var enableViewportScale = false
|
||||
var suppressesIncrementalRendering = false
|
||||
var allowsAirPlayForMediaPlayback = true
|
||||
var allowsBackForwardNavigationGestures = true
|
||||
var allowsLinkPreview = true
|
||||
var ignoresViewportScaleLimits = false
|
||||
var allowsInlineMediaPlayback = false
|
||||
var allowsPictureInPictureMediaPlayback = true
|
||||
var isFraudulentWebsiteWarningEnabled = true;
|
||||
var selectionGranularity = 0;
|
||||
var dataDetectorTypes: [String] = ["NONE"] // WKDataDetectorTypeNone
|
||||
var preferredContentMode = 0
|
||||
var sharedCookiesEnabled = false
|
||||
var automaticallyAdjustsScrollIndicatorInsets = false
|
||||
var accessibilityIgnoresInvertColors = false
|
||||
var decelerationRate = "NORMAL" // UIScrollView.DecelerationRate.normal
|
||||
var alwaysBounceVertical = false
|
||||
var alwaysBounceHorizontal = false
|
||||
var scrollsToTop = true
|
||||
var isPagingEnabled = false
|
||||
var maximumZoomScale = 1.0
|
||||
var minimumZoomScale = 1.0
|
||||
var contentInsetAdjustmentBehavior = 2 // UIScrollView.ContentInsetAdjustmentBehavior.never
|
||||
var isDirectionalLockEnabled = false
|
||||
var mediaType: String? = nil
|
||||
var pageZoom = 1.0
|
||||
var limitsNavigationsToAppBoundDomains = false
|
||||
var useOnNavigationResponse = false
|
||||
var applePayAPIEnabled = false
|
||||
var allowingReadAccessTo: String? = nil
|
||||
var disableLongPressContextMenuOnLinks = false
|
||||
var disableInputAccessoryView = false
|
||||
|
||||
override init(){
|
||||
super.init()
|
||||
}
|
||||
|
||||
override func parse(settings: [String: Any?]) -> InAppWebViewSettings {
|
||||
let _ = super.parse(settings: settings)
|
||||
if #available(iOS 13.0, *) {} else {
|
||||
applePayAPIEnabled = false
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
override func getRealSettings(obj: InAppWebView?) -> [String: Any?] {
|
||||
var realSettings: [String: Any?] = toMap()
|
||||
if let webView = obj {
|
||||
let configuration = webView.configuration
|
||||
if #available(iOS 9.0, *) {
|
||||
realSettings["userAgent"] = webView.customUserAgent
|
||||
realSettings["applicationNameForUserAgent"] = configuration.applicationNameForUserAgent
|
||||
realSettings["allowsAirPlayForMediaPlayback"] = configuration.allowsAirPlayForMediaPlayback
|
||||
realSettings["allowsLinkPreview"] = webView.allowsLinkPreview
|
||||
realSettings["allowsPictureInPictureMediaPlayback"] = configuration.allowsPictureInPictureMediaPlayback
|
||||
}
|
||||
realSettings["javaScriptCanOpenWindowsAutomatically"] = configuration.preferences.javaScriptCanOpenWindowsAutomatically
|
||||
if #available(iOS 10.0, *) {
|
||||
realSettings["mediaPlaybackRequiresUserGesture"] = configuration.mediaTypesRequiringUserActionForPlayback == .all
|
||||
realSettings["ignoresViewportScaleLimits"] = configuration.ignoresViewportScaleLimits
|
||||
realSettings["dataDetectorTypes"] = Util.getDataDetectorTypeString(type: configuration.dataDetectorTypes)
|
||||
} else {
|
||||
realSettings["mediaPlaybackRequiresUserGesture"] = configuration.mediaPlaybackRequiresUserAction
|
||||
}
|
||||
realSettings["minimumFontSize"] = configuration.preferences.minimumFontSize
|
||||
realSettings["suppressesIncrementalRendering"] = configuration.suppressesIncrementalRendering
|
||||
realSettings["allowsBackForwardNavigationGestures"] = webView.allowsBackForwardNavigationGestures
|
||||
realSettings["allowsInlineMediaPlayback"] = configuration.allowsInlineMediaPlayback
|
||||
if #available(iOS 13.0, *) {
|
||||
realSettings["isFraudulentWebsiteWarningEnabled"] = configuration.preferences.isFraudulentWebsiteWarningEnabled
|
||||
realSettings["preferredContentMode"] = configuration.defaultWebpagePreferences.preferredContentMode.rawValue
|
||||
realSettings["automaticallyAdjustsScrollIndicatorInsets"] = webView.scrollView.automaticallyAdjustsScrollIndicatorInsets
|
||||
}
|
||||
realSettings["selectionGranularity"] = configuration.selectionGranularity.rawValue
|
||||
if #available(iOS 11.0, *) {
|
||||
realSettings["accessibilityIgnoresInvertColors"] = webView.accessibilityIgnoresInvertColors
|
||||
realSettings["contentInsetAdjustmentBehavior"] = webView.scrollView.contentInsetAdjustmentBehavior.rawValue
|
||||
}
|
||||
realSettings["decelerationRate"] = Util.getDecelerationRateString(type: webView.scrollView.decelerationRate)
|
||||
realSettings["alwaysBounceVertical"] = webView.scrollView.alwaysBounceVertical
|
||||
realSettings["alwaysBounceHorizontal"] = webView.scrollView.alwaysBounceHorizontal
|
||||
realSettings["scrollsToTop"] = webView.scrollView.scrollsToTop
|
||||
realSettings["isPagingEnabled"] = webView.scrollView.isPagingEnabled
|
||||
realSettings["maximumZoomScale"] = webView.scrollView.maximumZoomScale
|
||||
realSettings["minimumZoomScale"] = webView.scrollView.minimumZoomScale
|
||||
realSettings["allowUniversalAccessFromFileURLs"] = configuration.value(forKey: "allowUniversalAccessFromFileURLs")
|
||||
realSettings["allowFileAccessFromFileURLs"] = configuration.preferences.value(forKey: "allowFileAccessFromFileURLs")
|
||||
realSettings["isDirectionalLockEnabled"] = webView.scrollView.isDirectionalLockEnabled
|
||||
realSettings["javaScriptEnabled"] = configuration.preferences.javaScriptEnabled
|
||||
if #available(iOS 14.0, *) {
|
||||
realSettings["mediaType"] = webView.mediaType
|
||||
realSettings["pageZoom"] = Float(webView.pageZoom)
|
||||
realSettings["limitsNavigationsToAppBoundDomains"] = configuration.limitsNavigationsToAppBoundDomains
|
||||
realSettings["javaScriptEnabled"] = configuration.defaultWebpagePreferences.allowsContentJavaScript
|
||||
}
|
||||
}
|
||||
return realSettings
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public class PullToRefreshOptions : Options<PullToRefreshControl> {
|
||||
public class PullToRefreshSettings : IWebViewSettings<PullToRefreshControl> {
|
||||
|
||||
var enabled = true
|
||||
var color: String?
|
||||
@ -18,7 +18,7 @@ public class PullToRefreshOptions : Options<PullToRefreshControl> {
|
||||
super.init()
|
||||
}
|
||||
|
||||
override func parse(options: [String: Any?]) -> PullToRefreshOptions {
|
||||
override func parse(options: [String: Any?]) -> PullToRefreshSettings {
|
||||
let _ = super.parse(options: options)
|
||||
if let attributedTitle = options["attributedTitle"] as? [String: Any?] {
|
||||
self.attributedTitle = attributedTitle
|
||||
@ -26,7 +26,7 @@ public class PullToRefreshOptions : Options<PullToRefreshControl> {
|
||||
return self
|
||||
}
|
||||
|
||||
override func getRealOptions(obj: PullToRefreshControl?) -> [String: Any?] {
|
||||
override func getRealSettings(obj: PullToRefreshControl?) -> [String: Any?] {
|
||||
let realOptions: [String: Any?] = toMap()
|
||||
return realOptions
|
||||
}
|
@ -1,9 +1,11 @@
|
||||
import '../../in_app_webview/android/in_app_webview_options.dart';
|
||||
|
||||
import '../in_app_browser_options.dart';
|
||||
import '../in_app_browser_settings.dart';
|
||||
import '../in_app_browser.dart';
|
||||
|
||||
///This class represents all the Android-only [InAppBrowser] options available.
|
||||
///Use [InAppBrowserSettings] instead.
|
||||
@Deprecated('Use InAppBrowserSettings instead')
|
||||
class AndroidInAppBrowserOptions implements BrowserOptions, AndroidOptions {
|
||||
///Set to `true` if you want the title should be displayed. The default value is `false`.
|
||||
bool hideTitleBar;
|
||||
@ -39,14 +41,14 @@ class AndroidInAppBrowserOptions implements BrowserOptions, AndroidOptions {
|
||||
}
|
||||
|
||||
static AndroidInAppBrowserOptions fromMap(Map<String, dynamic> map) {
|
||||
AndroidInAppBrowserOptions options = AndroidInAppBrowserOptions();
|
||||
options.hideTitleBar = map["hideTitleBar"];
|
||||
options.toolbarTopFixedTitle = map["toolbarTopFixedTitle"];
|
||||
options.closeOnCannotGoBack = map["closeOnCannotGoBack"];
|
||||
options.allowGoBackWithBackButton = map["allowGoBackWithBackButton"];
|
||||
options.shouldCloseOnBackButtonPressed =
|
||||
var instance = AndroidInAppBrowserOptions();
|
||||
instance.hideTitleBar = map["hideTitleBar"];
|
||||
instance.toolbarTopFixedTitle = map["toolbarTopFixedTitle"];
|
||||
instance.closeOnCannotGoBack = map["closeOnCannotGoBack"];
|
||||
instance.allowGoBackWithBackButton = map["allowGoBackWithBackButton"];
|
||||
instance.shouldCloseOnBackButtonPressed =
|
||||
map["shouldCloseOnBackButtonPressed"];
|
||||
return options;
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1,24 +1,29 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_inappwebview/src/types.dart';
|
||||
|
||||
import '../util.dart';
|
||||
|
||||
import '../in_app_webview/in_app_webview_options.dart';
|
||||
import '../in_app_webview/in_app_webview_settings.dart';
|
||||
|
||||
import 'android/in_app_browser_options.dart';
|
||||
import '../in_app_webview/android/in_app_webview_options.dart';
|
||||
import '../in_app_webview/android/in_app_webview_settings.dart';
|
||||
|
||||
import 'ios/in_app_browser_options.dart';
|
||||
import '../in_app_webview/ios/in_app_webview_options.dart';
|
||||
import 'ios/in_app_browser_settings.dart';
|
||||
import '../in_app_webview/ios/in_app_webview_settings.dart';
|
||||
|
||||
class BrowserOptions {
|
||||
Map<String, dynamic> toMap() {
|
||||
return {};
|
||||
}
|
||||
|
||||
static BrowserOptions fromMap(Map<String, dynamic> map) {
|
||||
return new BrowserOptions();
|
||||
static BrowserOptions fromMap(Map<String, dynamic> map, {BrowserOptions? instance}) {
|
||||
return BrowserOptions();
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(BrowserOptions options) {
|
||||
return options.toMap();
|
||||
}
|
||||
|
||||
BrowserOptions copy() {
|
||||
@ -35,7 +40,153 @@ class BrowserOptions {
|
||||
}
|
||||
}
|
||||
|
||||
///Class that represents the settings that can be used for an [InAppBrowser] WebView.
|
||||
class InAppBrowserClassSettings {
|
||||
///Browser settings.
|
||||
late InAppBrowserSettings settings;
|
||||
|
||||
///WebView settings.
|
||||
late InAppWebViewSettings webViewSettings;
|
||||
|
||||
InAppBrowserClassSettings(
|
||||
{InAppBrowserSettings? settings,
|
||||
InAppWebViewSettings? webViewSettings}) {
|
||||
this.settings = settings ?? InAppBrowserSettings();
|
||||
this.webViewSettings = webViewSettings ?? InAppWebViewSettings();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
Map<String, dynamic> options = {};
|
||||
|
||||
options.addAll(this.settings.toMap());
|
||||
options.addAll(this.webViewSettings.toMap());
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(InAppBrowserClassSettings settings) {
|
||||
return settings.toMap();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
static InAppBrowserClassSettings fromMap(Map<String, dynamic> options, {InAppBrowserClassSettings? instance}) {
|
||||
if (instance == null) {
|
||||
instance = InAppBrowserClassSettings();
|
||||
}
|
||||
instance.settings = InAppBrowserSettings.fromMap(options);
|
||||
instance.webViewSettings = InAppWebViewSettings.fromMap(options);
|
||||
return instance;
|
||||
}
|
||||
|
||||
InAppBrowserClassSettings copy() {
|
||||
return InAppBrowserClassSettings.fromMap(this.toMap());
|
||||
}
|
||||
}
|
||||
|
||||
class InAppBrowserSettings extends InAppBrowserOptions implements AndroidInAppBrowserOptions, IOSInAppBrowserOptions {
|
||||
@override
|
||||
bool allowGoBackWithBackButton;
|
||||
|
||||
@override
|
||||
String? closeButtonCaption;
|
||||
|
||||
@override
|
||||
Color? closeButtonColor;
|
||||
|
||||
@override
|
||||
bool closeOnCannotGoBack;
|
||||
|
||||
@override
|
||||
bool hideTitleBar;
|
||||
|
||||
@override
|
||||
bool hideToolbarBottom;
|
||||
|
||||
@override
|
||||
IOSUIModalPresentationStyle presentationStyle;
|
||||
|
||||
@override
|
||||
bool shouldCloseOnBackButtonPressed;
|
||||
|
||||
@override
|
||||
Color? toolbarBottomBackgroundColor;
|
||||
|
||||
@override
|
||||
Color? toolbarBottomTintColor;
|
||||
|
||||
@override
|
||||
bool toolbarBottomTranslucent;
|
||||
|
||||
@override
|
||||
Color? toolbarTopBarTintColor;
|
||||
|
||||
@override
|
||||
String? toolbarTopFixedTitle;
|
||||
|
||||
@override
|
||||
Color? toolbarTopTintColor;
|
||||
|
||||
@override
|
||||
bool toolbarTopTranslucent;
|
||||
|
||||
@override
|
||||
IOSUIModalTransitionStyle transitionStyle;
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
Map<String, dynamic> options = {};
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
options.addAll(InAppBrowserOptions.instanceToMap(this));
|
||||
options.addAll(AndroidInAppBrowserSettings.instanceToMap(this));
|
||||
options.addAll(IOSInAppBrowserSettings.instanceToMap(this));
|
||||
return options;
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(InAppBrowserSettings settings) {
|
||||
return settings.toMap();
|
||||
}
|
||||
|
||||
static InAppBrowserSettings fromMap(Map<String, dynamic> options, {InAppBrowserSettings? instance}) {
|
||||
if (instance == null) {
|
||||
instance = InAppBrowserSettings();
|
||||
}
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
InAppBrowserOptions.fromMap(options, instance: instance);
|
||||
if (defaultTargetPlatform == TargetPlatform.android) {
|
||||
AndroidInAppBrowserSettings.fromMap(options, instance: instance);
|
||||
}
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS) {
|
||||
IOSInAppBrowserSettings.fromMap(options, instance: instance);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
@override
|
||||
InAppBrowserSettings copy() {
|
||||
return InAppBrowserSettings.fromMap(this.toMap());
|
||||
}
|
||||
}
|
||||
|
||||
///Class that represents the options that can be used for an [InAppBrowser] WebView.
|
||||
///Use [InAppBrowserClassSettings] instead.
|
||||
@Deprecated('Use InAppBrowserClassSettings instead')
|
||||
class InAppBrowserClassOptions {
|
||||
///Cross-platform options.
|
||||
late InAppBrowserOptions crossPlatform;
|
@ -2,13 +2,15 @@ import 'dart:ui';
|
||||
|
||||
import '../../in_app_webview/ios/in_app_webview_options.dart';
|
||||
|
||||
import '../in_app_browser_options.dart';
|
||||
import '../in_app_browser_settings.dart';
|
||||
import '../in_app_browser.dart';
|
||||
|
||||
import '../../types.dart';
|
||||
import '../../util.dart';
|
||||
|
||||
///This class represents all the iOS-only [InAppBrowser] options available.
|
||||
///Use [InAppBrowserSettings] instead.
|
||||
@Deprecated('Use InAppBrowserSettings instead')
|
||||
class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
|
||||
///Set to `true` to set the toolbar at the top translucent. The default value is `true`.
|
||||
bool toolbarTopTranslucent;
|
||||
@ -72,22 +74,22 @@ class IOSInAppBrowserOptions implements BrowserOptions, IosOptions {
|
||||
}
|
||||
|
||||
static IOSInAppBrowserOptions fromMap(Map<String, dynamic> map) {
|
||||
IOSInAppBrowserOptions options = IOSInAppBrowserOptions();
|
||||
options.toolbarTopTranslucent = map["toolbarTopTranslucent"];
|
||||
options.toolbarTopTintColor = UtilColor.fromHex(map["toolbarTopTintColor"]);
|
||||
options.hideToolbarBottom = map["hideToolbarBottom"];
|
||||
options.toolbarBottomBackgroundColor =
|
||||
var instance = IOSInAppBrowserOptions();
|
||||
instance.toolbarTopTranslucent = map["toolbarTopTranslucent"];
|
||||
instance.toolbarTopTintColor = UtilColor.fromHex(map["toolbarTopTintColor"]);
|
||||
instance.hideToolbarBottom = map["hideToolbarBottom"];
|
||||
instance.toolbarBottomBackgroundColor =
|
||||
UtilColor.fromHex(map["toolbarBottomBackgroundColor"]);
|
||||
options.toolbarBottomTintColor =
|
||||
instance.toolbarBottomTintColor =
|
||||
UtilColor.fromHex(map["toolbarBottomTintColor"]);
|
||||
options.toolbarBottomTranslucent = map["toolbarBottomTranslucent"];
|
||||
options.closeButtonCaption = map["closeButtonCaption"];
|
||||
options.closeButtonColor = UtilColor.fromHex(map["closeButtonColor"]);
|
||||
options.presentationStyle =
|
||||
instance.toolbarBottomTranslucent = map["toolbarBottomTranslucent"];
|
||||
instance.closeButtonCaption = map["closeButtonCaption"];
|
||||
instance.closeButtonColor = UtilColor.fromHex(map["closeButtonColor"]);
|
||||
instance.presentationStyle =
|
||||
IOSUIModalPresentationStyle.fromValue(map["presentationStyle"])!;
|
||||
options.transitionStyle =
|
||||
instance.transitionStyle =
|
||||
IOSUIModalTransitionStyle.fromValue(map["transitionStyle"])!;
|
||||
return options;
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1,17 +1,15 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter_inappwebview/src/util.dart';
|
||||
|
||||
import '../../util.dart';
|
||||
import '../../types.dart';
|
||||
|
||||
import '../../in_app_browser/in_app_browser_options.dart';
|
||||
|
||||
import '../in_app_webview_options.dart';
|
||||
import '../../in_app_browser/in_app_browser_settings.dart';
|
||||
import '../in_app_webview_settings.dart';
|
||||
import '../webview.dart';
|
||||
|
||||
class AndroidOptions {}
|
||||
|
||||
///This class represents all the Android-only WebView options available.
|
||||
///Use [InAppWebViewSettings] instead.
|
||||
@Deprecated('Use InAppWebViewSettings instead')
|
||||
class AndroidInAppWebViewOptions
|
||||
implements WebViewOptions, BrowserOptions, AndroidOptions {
|
||||
///Sets the text zoom of the page in percent. The default value is `100`.
|
||||
@ -360,77 +358,77 @@ class AndroidInAppWebViewOptions
|
||||
}
|
||||
|
||||
static AndroidInAppWebViewOptions fromMap(Map<String, dynamic> map) {
|
||||
AndroidInAppWebViewOptions options = AndroidInAppWebViewOptions();
|
||||
options.textZoom = map["textZoom"];
|
||||
options.clearSessionCache = map["clearSessionCache"];
|
||||
options.builtInZoomControls = map["builtInZoomControls"];
|
||||
options.displayZoomControls = map["displayZoomControls"];
|
||||
options.databaseEnabled = map["databaseEnabled"];
|
||||
options.domStorageEnabled = map["domStorageEnabled"];
|
||||
options.useWideViewPort = map["useWideViewPort"];
|
||||
options.safeBrowsingEnabled = map["safeBrowsingEnabled"];
|
||||
options.mixedContentMode =
|
||||
var instance = AndroidInAppWebViewOptions();
|
||||
instance.textZoom = map["textZoom"];
|
||||
instance.clearSessionCache = map["clearSessionCache"];
|
||||
instance.builtInZoomControls = map["builtInZoomControls"];
|
||||
instance.displayZoomControls = map["displayZoomControls"];
|
||||
instance.databaseEnabled = map["databaseEnabled"];
|
||||
instance.domStorageEnabled = map["domStorageEnabled"];
|
||||
instance.useWideViewPort = map["useWideViewPort"];
|
||||
instance.safeBrowsingEnabled = map["safeBrowsingEnabled"];
|
||||
instance.mixedContentMode =
|
||||
AndroidMixedContentMode.fromValue(map["mixedContentMode"]);
|
||||
options.allowContentAccess = map["allowContentAccess"];
|
||||
options.allowFileAccess = map["allowFileAccess"];
|
||||
options.appCachePath = map["appCachePath"];
|
||||
options.blockNetworkImage = map["blockNetworkImage"];
|
||||
options.blockNetworkLoads = map["blockNetworkLoads"];
|
||||
options.cacheMode = AndroidCacheMode.fromValue(map["cacheMode"]);
|
||||
options.cursiveFontFamily = map["cursiveFontFamily"];
|
||||
options.defaultFixedFontSize = map["defaultFixedFontSize"];
|
||||
options.defaultFontSize = map["defaultFontSize"];
|
||||
options.defaultTextEncodingName = map["defaultTextEncodingName"];
|
||||
options.disabledActionModeMenuItems =
|
||||
instance.allowContentAccess = map["allowContentAccess"];
|
||||
instance.allowFileAccess = map["allowFileAccess"];
|
||||
instance.appCachePath = map["appCachePath"];
|
||||
instance.blockNetworkImage = map["blockNetworkImage"];
|
||||
instance.blockNetworkLoads = map["blockNetworkLoads"];
|
||||
instance.cacheMode = AndroidCacheMode.fromValue(map["cacheMode"]);
|
||||
instance.cursiveFontFamily = map["cursiveFontFamily"];
|
||||
instance.defaultFixedFontSize = map["defaultFixedFontSize"];
|
||||
instance.defaultFontSize = map["defaultFontSize"];
|
||||
instance.defaultTextEncodingName = map["defaultTextEncodingName"];
|
||||
instance.disabledActionModeMenuItems =
|
||||
AndroidActionModeMenuItem.fromValue(map["disabledActionModeMenuItems"]);
|
||||
options.fantasyFontFamily = map["fantasyFontFamily"];
|
||||
options.fixedFontFamily = map["fixedFontFamily"];
|
||||
options.forceDark = AndroidForceDark.fromValue(map["forceDark"]);
|
||||
options.geolocationEnabled = map["geolocationEnabled"];
|
||||
options.layoutAlgorithm =
|
||||
instance.fantasyFontFamily = map["fantasyFontFamily"];
|
||||
instance.fixedFontFamily = map["fixedFontFamily"];
|
||||
instance.forceDark = AndroidForceDark.fromValue(map["forceDark"]);
|
||||
instance.geolocationEnabled = map["geolocationEnabled"];
|
||||
instance.layoutAlgorithm =
|
||||
AndroidLayoutAlgorithm.fromValue(map["layoutAlgorithm"]);
|
||||
options.loadWithOverviewMode = map["loadWithOverviewMode"];
|
||||
options.loadsImagesAutomatically = map["loadsImagesAutomatically"];
|
||||
options.minimumLogicalFontSize = map["minimumLogicalFontSize"];
|
||||
options.initialScale = map["initialScale"];
|
||||
options.needInitialFocus = map["needInitialFocus"];
|
||||
options.offscreenPreRaster = map["offscreenPreRaster"];
|
||||
options.sansSerifFontFamily = map["sansSerifFontFamily"];
|
||||
options.serifFontFamily = map["serifFontFamily"];
|
||||
options.standardFontFamily = map["standardFontFamily"];
|
||||
options.saveFormData = map["saveFormData"];
|
||||
options.thirdPartyCookiesEnabled = map["thirdPartyCookiesEnabled"];
|
||||
options.hardwareAcceleration = map["hardwareAcceleration"];
|
||||
options.supportMultipleWindows = map["supportMultipleWindows"];
|
||||
options.regexToCancelSubFramesLoading =
|
||||
instance.loadWithOverviewMode = map["loadWithOverviewMode"];
|
||||
instance.loadsImagesAutomatically = map["loadsImagesAutomatically"];
|
||||
instance.minimumLogicalFontSize = map["minimumLogicalFontSize"];
|
||||
instance.initialScale = map["initialScale"];
|
||||
instance.needInitialFocus = map["needInitialFocus"];
|
||||
instance.offscreenPreRaster = map["offscreenPreRaster"];
|
||||
instance.sansSerifFontFamily = map["sansSerifFontFamily"];
|
||||
instance.serifFontFamily = map["serifFontFamily"];
|
||||
instance.standardFontFamily = map["standardFontFamily"];
|
||||
instance.saveFormData = map["saveFormData"];
|
||||
instance.thirdPartyCookiesEnabled = map["thirdPartyCookiesEnabled"];
|
||||
instance.hardwareAcceleration = map["hardwareAcceleration"];
|
||||
instance.supportMultipleWindows = map["supportMultipleWindows"];
|
||||
instance.regexToCancelSubFramesLoading =
|
||||
map["regexToCancelSubFramesLoading"];
|
||||
options.useHybridComposition = map["useHybridComposition"];
|
||||
options.useShouldInterceptRequest = map["useShouldInterceptRequest"];
|
||||
options.useOnRenderProcessGone = map["useOnRenderProcessGone"];
|
||||
options.overScrollMode =
|
||||
instance.useHybridComposition = map["useHybridComposition"];
|
||||
instance.useShouldInterceptRequest = map["useShouldInterceptRequest"];
|
||||
instance.useOnRenderProcessGone = map["useOnRenderProcessGone"];
|
||||
instance.overScrollMode =
|
||||
AndroidOverScrollMode.fromValue(map["overScrollMode"]);
|
||||
options.networkAvailable = map["networkAvailable"];
|
||||
options.scrollBarStyle =
|
||||
instance.networkAvailable = map["networkAvailable"];
|
||||
instance.scrollBarStyle =
|
||||
AndroidScrollBarStyle.fromValue(map["scrollBarStyle"]);
|
||||
options.verticalScrollbarPosition =
|
||||
instance.verticalScrollbarPosition =
|
||||
AndroidVerticalScrollbarPosition.fromValue(
|
||||
map["verticalScrollbarPosition"]);
|
||||
options.scrollBarDefaultDelayBeforeFade =
|
||||
instance.scrollBarDefaultDelayBeforeFade =
|
||||
map["scrollBarDefaultDelayBeforeFade"];
|
||||
options.scrollbarFadingEnabled = map["scrollbarFadingEnabled"];
|
||||
options.scrollBarFadeDuration = map["scrollBarFadeDuration"];
|
||||
options.rendererPriorityPolicy = RendererPriorityPolicy.fromMap(
|
||||
instance.scrollbarFadingEnabled = map["scrollbarFadingEnabled"];
|
||||
instance.scrollBarFadeDuration = map["scrollBarFadeDuration"];
|
||||
instance.rendererPriorityPolicy = RendererPriorityPolicy.fromMap(
|
||||
map["rendererPriorityPolicy"]?.cast<String, dynamic>());
|
||||
options.disableDefaultErrorPage = map["disableDefaultErrorPage"];
|
||||
options.verticalScrollbarThumbColor =
|
||||
instance.disableDefaultErrorPage = map["disableDefaultErrorPage"];
|
||||
instance.verticalScrollbarThumbColor =
|
||||
UtilColor.fromHex(map["verticalScrollbarThumbColor"]);
|
||||
options.verticalScrollbarTrackColor =
|
||||
instance.verticalScrollbarTrackColor =
|
||||
UtilColor.fromHex(map["verticalScrollbarTrackColor"]);
|
||||
options.horizontalScrollbarThumbColor =
|
||||
instance.horizontalScrollbarThumbColor =
|
||||
UtilColor.fromHex(map["horizontalScrollbarThumbColor"]);
|
||||
options.horizontalScrollbarTrackColor =
|
||||
instance.horizontalScrollbarTrackColor =
|
||||
UtilColor.fromHex(map["horizontalScrollbarTrackColor"]);
|
||||
return options;
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -1,340 +0,0 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import 'android/in_app_webview_options.dart';
|
||||
import 'ios/in_app_webview_options.dart';
|
||||
import '../content_blocker.dart';
|
||||
import '../types.dart';
|
||||
import '../in_app_browser/in_app_browser_options.dart';
|
||||
import 'webview.dart';
|
||||
|
||||
class WebViewOptions {
|
||||
Map<String, dynamic> toMap() {
|
||||
return {};
|
||||
}
|
||||
|
||||
static WebViewOptions fromMap(Map<String, dynamic> map) {
|
||||
return new WebViewOptions();
|
||||
}
|
||||
|
||||
WebViewOptions copy() {
|
||||
return WebViewOptions.fromMap(this.toMap());
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
}
|
||||
|
||||
///Class that represents the options that can be used for a [WebView].
|
||||
class InAppWebViewGroupOptions {
|
||||
///Cross-platform options.
|
||||
late InAppWebViewOptions crossPlatform;
|
||||
|
||||
///Android-specific options.
|
||||
late AndroidInAppWebViewOptions android;
|
||||
|
||||
///iOS-specific options.
|
||||
late IOSInAppWebViewOptions ios;
|
||||
|
||||
InAppWebViewGroupOptions(
|
||||
{InAppWebViewOptions? crossPlatform,
|
||||
AndroidInAppWebViewOptions? android,
|
||||
IOSInAppWebViewOptions? ios}) {
|
||||
this.crossPlatform = crossPlatform ?? InAppWebViewOptions();
|
||||
this.android = android ?? AndroidInAppWebViewOptions();
|
||||
this.ios = ios ?? IOSInAppWebViewOptions();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
Map<String, dynamic> options = {};
|
||||
options.addAll(this.crossPlatform.toMap());
|
||||
if (defaultTargetPlatform == TargetPlatform.android)
|
||||
options.addAll(this.android.toMap());
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS)
|
||||
options.addAll(this.ios.toMap());
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
static InAppWebViewGroupOptions fromMap(Map<String, dynamic> options) {
|
||||
InAppWebViewGroupOptions inAppWebViewGroupOptions =
|
||||
InAppWebViewGroupOptions();
|
||||
|
||||
inAppWebViewGroupOptions.crossPlatform =
|
||||
InAppWebViewOptions.fromMap(options);
|
||||
if (defaultTargetPlatform == TargetPlatform.android)
|
||||
inAppWebViewGroupOptions.android =
|
||||
AndroidInAppWebViewOptions.fromMap(options);
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS)
|
||||
inAppWebViewGroupOptions.ios = IOSInAppWebViewOptions.fromMap(options);
|
||||
|
||||
return inAppWebViewGroupOptions;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
InAppWebViewGroupOptions copy() {
|
||||
return InAppWebViewGroupOptions.fromMap(this.toMap());
|
||||
}
|
||||
}
|
||||
|
||||
///This class represents all the cross-platform WebView options available.
|
||||
class InAppWebViewOptions
|
||||
implements WebViewOptions, BrowserOptions, AndroidOptions, IosOptions {
|
||||
///Set to `true` to be able to listen at the [WebView.shouldOverrideUrlLoading] event. The default value is `false`.
|
||||
bool useShouldOverrideUrlLoading;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.onLoadResource] event. The default value is `false`.
|
||||
bool useOnLoadResource;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.onDownloadStart] event. The default value is `false`.
|
||||
bool useOnDownloadStart;
|
||||
|
||||
///Set to `true` to have all the browser's cache cleared before the new WebView is opened. The default value is `false`.
|
||||
bool clearCache;
|
||||
|
||||
///Sets the user-agent for the WebView.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
String userAgent;
|
||||
|
||||
///Append to the existing user-agent. Setting userAgent will override this.
|
||||
///
|
||||
///**NOTE**: available on Android 17+ and on iOS 9.0+.
|
||||
String applicationNameForUserAgent;
|
||||
|
||||
///Set to `true` to enable JavaScript. The default value is `true`.
|
||||
bool javaScriptEnabled;
|
||||
|
||||
///Set to `true` to allow JavaScript open windows without user interaction. The default value is `false`.
|
||||
bool javaScriptCanOpenWindowsAutomatically;
|
||||
|
||||
///Set to `true` to prevent HTML5 audio or video from autoplaying. The default value is `true`.
|
||||
///
|
||||
///**NOTE**: available on iOS 10.0+.
|
||||
bool mediaPlaybackRequiresUserGesture;
|
||||
|
||||
///Sets the minimum font size. The default value is `8` for Android, `0` for iOS.
|
||||
int? minimumFontSize;
|
||||
|
||||
///Define whether the vertical scrollbar should be drawn or not. The default value is `true`.
|
||||
bool verticalScrollBarEnabled;
|
||||
|
||||
///Define whether the horizontal scrollbar should be drawn or not. The default value is `true`.
|
||||
bool horizontalScrollBarEnabled;
|
||||
|
||||
///List of custom schemes that the WebView must handle. Use the [WebView.onLoadResourceCustomScheme] event to intercept resource requests with custom scheme.
|
||||
///
|
||||
///**NOTE**: available on iOS 11.0+.
|
||||
List<String> resourceCustomSchemes;
|
||||
|
||||
///List of [ContentBlocker] that are a set of rules used to block content in the browser window.
|
||||
///
|
||||
///**NOTE**: available on iOS 11.0+.
|
||||
List<ContentBlocker> contentBlockers;
|
||||
|
||||
///Sets the content mode that the WebView needs to use when loading and rendering a webpage. The default value is [UserPreferredContentMode.RECOMMENDED].
|
||||
///
|
||||
///**NOTE**: available on iOS 13.0+.
|
||||
UserPreferredContentMode? preferredContentMode;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.shouldInterceptAjaxRequest] event. The default value is `false`.
|
||||
bool useShouldInterceptAjaxRequest;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.shouldInterceptFetchRequest] event. The default value is `false`.
|
||||
bool useShouldInterceptFetchRequest;
|
||||
|
||||
///Set to `true` to open a browser window with incognito mode. The default value is `false`.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
///On Android, by setting this option to `true`, it will clear all the cookies of all WebView instances,
|
||||
///because there isn't any way to make the website data store non-persistent for the specific WebView instance such as on iOS.
|
||||
bool incognito;
|
||||
|
||||
///Sets whether WebView should use browser caching. The default value is `true`.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
bool cacheEnabled;
|
||||
|
||||
///Set to `true` to make the background of the WebView transparent. If your app has a dark theme, this can prevent a white flash on initialization. The default value is `false`.
|
||||
bool transparentBackground;
|
||||
|
||||
///Set to `true` to disable vertical scroll. The default value is `false`.
|
||||
bool disableVerticalScroll;
|
||||
|
||||
///Set to `true` to disable horizontal scroll. The default value is `false`.
|
||||
bool disableHorizontalScroll;
|
||||
|
||||
///Set to `true` to disable context menu. The default value is `false`.
|
||||
bool disableContextMenu;
|
||||
|
||||
///Set to `false` if the WebView should not support zooming using its on-screen zoom controls and gestures. The default value is `true`.
|
||||
bool supportZoom;
|
||||
|
||||
///Sets whether cross-origin requests in the context of a file scheme URL should be allowed to access content from other file scheme URLs.
|
||||
///Note that some accesses such as image HTML elements don't follow same-origin rules and aren't affected by this setting.
|
||||
///
|
||||
///Don't enable this setting if you open files that may be created or altered by external sources.
|
||||
///Enabling this setting allows malicious scripts loaded in a `file://` context to access arbitrary local files including WebView cookies and app private data.
|
||||
///
|
||||
///Note that the value of this setting is ignored if the value of [allowUniversalAccessFromFileURLs] is `true`.
|
||||
///
|
||||
///The default value is `false`.
|
||||
bool allowFileAccessFromFileURLs;
|
||||
|
||||
///Sets whether cross-origin requests in the context of a file scheme URL should be allowed to access content from any origin.
|
||||
///This includes access to content from other file scheme URLs or web contexts.
|
||||
///Note that some access such as image HTML elements doesn't follow same-origin rules and isn't affected by this setting.
|
||||
///
|
||||
///Don't enable this setting if you open files that may be created or altered by external sources.
|
||||
///Enabling this setting allows malicious scripts loaded in a `file://` context to launch cross-site scripting attacks,
|
||||
///either accessing arbitrary local files including WebView cookies, app private data or even credentials used on arbitrary web sites.
|
||||
///
|
||||
///The default value is `false`.
|
||||
bool allowUniversalAccessFromFileURLs;
|
||||
|
||||
InAppWebViewOptions(
|
||||
{this.useShouldOverrideUrlLoading = false,
|
||||
this.useOnLoadResource = false,
|
||||
this.useOnDownloadStart = false,
|
||||
this.clearCache = false,
|
||||
this.userAgent = "",
|
||||
this.applicationNameForUserAgent = "",
|
||||
this.javaScriptEnabled = true,
|
||||
this.javaScriptCanOpenWindowsAutomatically = false,
|
||||
this.mediaPlaybackRequiresUserGesture = true,
|
||||
this.minimumFontSize,
|
||||
this.verticalScrollBarEnabled = true,
|
||||
this.horizontalScrollBarEnabled = true,
|
||||
this.resourceCustomSchemes = const [],
|
||||
this.contentBlockers = const [],
|
||||
this.preferredContentMode = UserPreferredContentMode.RECOMMENDED,
|
||||
this.useShouldInterceptAjaxRequest = false,
|
||||
this.useShouldInterceptFetchRequest = false,
|
||||
this.incognito = false,
|
||||
this.cacheEnabled = true,
|
||||
this.transparentBackground = false,
|
||||
this.disableVerticalScroll = false,
|
||||
this.disableHorizontalScroll = false,
|
||||
this.disableContextMenu = false,
|
||||
this.supportZoom = true,
|
||||
this.allowFileAccessFromFileURLs = false,
|
||||
this.allowUniversalAccessFromFileURLs = false}) {
|
||||
if (this.minimumFontSize == null)
|
||||
this.minimumFontSize =
|
||||
defaultTargetPlatform == TargetPlatform.android ? 8 : 0;
|
||||
assert(!this.resourceCustomSchemes.contains("http") &&
|
||||
!this.resourceCustomSchemes.contains("https"));
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toMap() {
|
||||
List<Map<String, Map<String, dynamic>>> contentBlockersMapList = [];
|
||||
contentBlockers.forEach((contentBlocker) {
|
||||
contentBlockersMapList.add(contentBlocker.toMap());
|
||||
});
|
||||
|
||||
return {
|
||||
"useShouldOverrideUrlLoading": useShouldOverrideUrlLoading,
|
||||
"useOnLoadResource": useOnLoadResource,
|
||||
"useOnDownloadStart": useOnDownloadStart,
|
||||
"clearCache": clearCache,
|
||||
"userAgent": userAgent,
|
||||
"applicationNameForUserAgent": applicationNameForUserAgent,
|
||||
"javaScriptEnabled": javaScriptEnabled,
|
||||
"javaScriptCanOpenWindowsAutomatically":
|
||||
javaScriptCanOpenWindowsAutomatically,
|
||||
"mediaPlaybackRequiresUserGesture": mediaPlaybackRequiresUserGesture,
|
||||
"verticalScrollBarEnabled": verticalScrollBarEnabled,
|
||||
"horizontalScrollBarEnabled": horizontalScrollBarEnabled,
|
||||
"resourceCustomSchemes": resourceCustomSchemes,
|
||||
"contentBlockers": contentBlockersMapList,
|
||||
"preferredContentMode": preferredContentMode?.toValue(),
|
||||
"useShouldInterceptAjaxRequest": useShouldInterceptAjaxRequest,
|
||||
"useShouldInterceptFetchRequest": useShouldInterceptFetchRequest,
|
||||
"incognito": incognito,
|
||||
"cacheEnabled": cacheEnabled,
|
||||
"transparentBackground": transparentBackground,
|
||||
"disableVerticalScroll": disableVerticalScroll,
|
||||
"disableHorizontalScroll": disableHorizontalScroll,
|
||||
"disableContextMenu": disableContextMenu,
|
||||
"supportZoom": supportZoom,
|
||||
"allowFileAccessFromFileURLs": allowFileAccessFromFileURLs,
|
||||
"allowUniversalAccessFromFileURLs": allowUniversalAccessFromFileURLs
|
||||
};
|
||||
}
|
||||
|
||||
static InAppWebViewOptions fromMap(Map<String, dynamic> map) {
|
||||
List<ContentBlocker> contentBlockers = [];
|
||||
List<dynamic>? contentBlockersMapList = map["contentBlockers"];
|
||||
if (contentBlockersMapList != null) {
|
||||
contentBlockersMapList.forEach((contentBlocker) {
|
||||
contentBlockers.add(ContentBlocker.fromMap(
|
||||
Map<dynamic, Map<dynamic, dynamic>>.from(
|
||||
Map<dynamic, dynamic>.from(contentBlocker))));
|
||||
});
|
||||
}
|
||||
|
||||
InAppWebViewOptions options = InAppWebViewOptions();
|
||||
options.useShouldOverrideUrlLoading = map["useShouldOverrideUrlLoading"];
|
||||
options.useOnLoadResource = map["useOnLoadResource"];
|
||||
options.useOnDownloadStart = map["useOnDownloadStart"];
|
||||
options.clearCache = map["clearCache"];
|
||||
options.userAgent = map["userAgent"];
|
||||
options.applicationNameForUserAgent = map["applicationNameForUserAgent"];
|
||||
options.javaScriptEnabled = map["javaScriptEnabled"];
|
||||
options.javaScriptCanOpenWindowsAutomatically =
|
||||
map["javaScriptCanOpenWindowsAutomatically"];
|
||||
options.mediaPlaybackRequiresUserGesture =
|
||||
map["mediaPlaybackRequiresUserGesture"];
|
||||
options.verticalScrollBarEnabled = map["verticalScrollBarEnabled"];
|
||||
options.horizontalScrollBarEnabled = map["horizontalScrollBarEnabled"];
|
||||
options.resourceCustomSchemes =
|
||||
List<String>.from(map["resourceCustomSchemes"] ?? []);
|
||||
options.contentBlockers = contentBlockers;
|
||||
options.preferredContentMode =
|
||||
UserPreferredContentMode.fromValue(map["preferredContentMode"]);
|
||||
options.useShouldInterceptAjaxRequest =
|
||||
map["useShouldInterceptAjaxRequest"];
|
||||
options.useShouldInterceptFetchRequest =
|
||||
map["useShouldInterceptFetchRequest"];
|
||||
options.incognito = map["incognito"];
|
||||
options.cacheEnabled = map["cacheEnabled"];
|
||||
options.transparentBackground = map["transparentBackground"];
|
||||
options.disableVerticalScroll = map["disableVerticalScroll"];
|
||||
options.disableHorizontalScroll = map["disableHorizontalScroll"];
|
||||
options.disableContextMenu = map["disableContextMenu"];
|
||||
options.supportZoom = map["supportZoom"];
|
||||
options.allowFileAccessFromFileURLs = map["allowFileAccessFromFileURLs"];
|
||||
options.allowUniversalAccessFromFileURLs =
|
||||
map["allowUniversalAccessFromFileURLs"];
|
||||
return options;
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
@override
|
||||
InAppWebViewOptions copy() {
|
||||
return InAppWebViewOptions.fromMap(this.toMap());
|
||||
}
|
||||
}
|
867
lib/src/in_app_webview/in_app_webview_settings.dart
Executable file
867
lib/src/in_app_webview/in_app_webview_settings.dart
Executable file
@ -0,0 +1,867 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import 'android/in_app_webview_settings.dart';
|
||||
import 'ios/in_app_webview_settings.dart';
|
||||
import '../content_blocker.dart';
|
||||
import '../types.dart';
|
||||
import '../in_app_browser/in_app_browser_options.dart';
|
||||
import 'webview.dart';
|
||||
|
||||
class WebViewOptions {
|
||||
Map<String, dynamic> toMap() {
|
||||
return {};
|
||||
}
|
||||
|
||||
static WebViewOptions fromMap(Map<String, dynamic> map, {WebViewOptions? instance}) {
|
||||
return WebViewOptions();
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(WebViewOptions webViewOptions) {
|
||||
return webViewOptions.toMap();
|
||||
}
|
||||
|
||||
WebViewOptions copy() {
|
||||
return WebViewOptions.fromMap(this.toMap());
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///This class represents all the WebView settings available.
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
class InAppWebViewSettings extends InAppWebViewOptions implements AndroidInAppWebViewSettings, IOSInAppWebViewSettings {
|
||||
@override
|
||||
bool accessibilityIgnoresInvertColors;
|
||||
|
||||
@override
|
||||
bool allowContentAccess;
|
||||
|
||||
@override
|
||||
bool allowFileAccess;
|
||||
|
||||
@override
|
||||
bool allowFileAccessFromFileURLs;
|
||||
|
||||
@override
|
||||
bool allowUniversalAccessFromFileURLs;
|
||||
|
||||
@override
|
||||
Uri? allowingReadAccessTo;
|
||||
|
||||
@override
|
||||
bool allowsAirPlayForMediaPlayback;
|
||||
|
||||
@override
|
||||
bool allowsBackForwardNavigationGestures;
|
||||
|
||||
@override
|
||||
bool allowsInlineMediaPlayback;
|
||||
|
||||
@override
|
||||
bool allowsLinkPreview;
|
||||
|
||||
@override
|
||||
bool allowsPictureInPictureMediaPlayback;
|
||||
|
||||
@override
|
||||
bool alwaysBounceHorizontal;
|
||||
|
||||
@override
|
||||
bool alwaysBounceVertical;
|
||||
|
||||
@override
|
||||
String? appCachePath;
|
||||
|
||||
@override
|
||||
bool applePayAPIEnabled;
|
||||
|
||||
@override
|
||||
String applicationNameForUserAgent;
|
||||
|
||||
@override
|
||||
bool automaticallyAdjustsScrollIndicatorInsets;
|
||||
|
||||
@override
|
||||
bool blockNetworkImage;
|
||||
|
||||
@override
|
||||
bool blockNetworkLoads;
|
||||
|
||||
@override
|
||||
bool builtInZoomControls;
|
||||
|
||||
@override
|
||||
bool cacheEnabled;
|
||||
|
||||
@override
|
||||
AndroidCacheMode? cacheMode;
|
||||
|
||||
@override
|
||||
bool clearCache;
|
||||
|
||||
@override
|
||||
bool clearSessionCache;
|
||||
|
||||
@override
|
||||
List<ContentBlocker> contentBlockers;
|
||||
|
||||
@override
|
||||
IOSUIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior;
|
||||
|
||||
@override
|
||||
String cursiveFontFamily;
|
||||
|
||||
@override
|
||||
List<IOSWKDataDetectorTypes> dataDetectorTypes;
|
||||
|
||||
@override
|
||||
bool databaseEnabled;
|
||||
|
||||
@override
|
||||
IOSUIScrollViewDecelerationRate decelerationRate;
|
||||
|
||||
@override
|
||||
int defaultFixedFontSize;
|
||||
|
||||
@override
|
||||
int defaultFontSize;
|
||||
|
||||
@override
|
||||
String defaultTextEncodingName;
|
||||
|
||||
@override
|
||||
bool disableContextMenu;
|
||||
|
||||
@override
|
||||
bool disableDefaultErrorPage;
|
||||
|
||||
@override
|
||||
bool disableHorizontalScroll;
|
||||
|
||||
@override
|
||||
bool disableInputAccessoryView;
|
||||
|
||||
@override
|
||||
bool disableLongPressContextMenuOnLinks;
|
||||
|
||||
@override
|
||||
bool disableVerticalScroll;
|
||||
|
||||
@override
|
||||
AndroidActionModeMenuItem? disabledActionModeMenuItems;
|
||||
|
||||
@override
|
||||
bool disallowOverScroll;
|
||||
|
||||
@override
|
||||
bool displayZoomControls;
|
||||
|
||||
@override
|
||||
bool domStorageEnabled;
|
||||
|
||||
@override
|
||||
bool enableViewportScale;
|
||||
|
||||
@override
|
||||
String fantasyFontFamily;
|
||||
|
||||
@override
|
||||
String fixedFontFamily;
|
||||
|
||||
@override
|
||||
AndroidForceDark? forceDark;
|
||||
|
||||
@override
|
||||
bool geolocationEnabled;
|
||||
|
||||
@override
|
||||
bool hardwareAcceleration;
|
||||
|
||||
@override
|
||||
bool horizontalScrollBarEnabled;
|
||||
|
||||
@override
|
||||
Color? horizontalScrollbarThumbColor;
|
||||
|
||||
@override
|
||||
Color? horizontalScrollbarTrackColor;
|
||||
|
||||
@override
|
||||
bool ignoresViewportScaleLimits;
|
||||
|
||||
@override
|
||||
bool incognito;
|
||||
|
||||
@override
|
||||
int initialScale;
|
||||
|
||||
@override
|
||||
bool isDirectionalLockEnabled;
|
||||
|
||||
@override
|
||||
bool isFraudulentWebsiteWarningEnabled;
|
||||
|
||||
@override
|
||||
bool isPagingEnabled;
|
||||
|
||||
@override
|
||||
bool javaScriptCanOpenWindowsAutomatically;
|
||||
|
||||
@override
|
||||
bool javaScriptEnabled;
|
||||
|
||||
@override
|
||||
AndroidLayoutAlgorithm? layoutAlgorithm;
|
||||
|
||||
@override
|
||||
bool limitsNavigationsToAppBoundDomains;
|
||||
|
||||
@override
|
||||
bool loadWithOverviewMode;
|
||||
|
||||
@override
|
||||
bool loadsImagesAutomatically;
|
||||
|
||||
@override
|
||||
double maximumZoomScale;
|
||||
|
||||
@override
|
||||
bool mediaPlaybackRequiresUserGesture;
|
||||
|
||||
@override
|
||||
String? mediaType;
|
||||
|
||||
@override
|
||||
int? minimumFontSize;
|
||||
|
||||
@override
|
||||
int minimumLogicalFontSize;
|
||||
|
||||
@override
|
||||
double minimumZoomScale;
|
||||
|
||||
@override
|
||||
AndroidMixedContentMode? mixedContentMode;
|
||||
|
||||
@override
|
||||
bool needInitialFocus;
|
||||
|
||||
@override
|
||||
bool? networkAvailable;
|
||||
|
||||
@override
|
||||
bool offscreenPreRaster;
|
||||
|
||||
@override
|
||||
AndroidOverScrollMode? overScrollMode;
|
||||
|
||||
@override
|
||||
double pageZoom;
|
||||
|
||||
@override
|
||||
UserPreferredContentMode? preferredContentMode;
|
||||
|
||||
@override
|
||||
String? regexToCancelSubFramesLoading;
|
||||
|
||||
@override
|
||||
RendererPriorityPolicy? rendererPriorityPolicy;
|
||||
|
||||
@override
|
||||
List<String> resourceCustomSchemes;
|
||||
|
||||
@override
|
||||
bool safeBrowsingEnabled;
|
||||
|
||||
@override
|
||||
String sansSerifFontFamily;
|
||||
|
||||
@override
|
||||
bool saveFormData;
|
||||
|
||||
@override
|
||||
int? scrollBarDefaultDelayBeforeFade;
|
||||
|
||||
@override
|
||||
int? scrollBarFadeDuration;
|
||||
|
||||
@override
|
||||
AndroidScrollBarStyle? scrollBarStyle;
|
||||
|
||||
@override
|
||||
bool scrollbarFadingEnabled;
|
||||
|
||||
@override
|
||||
bool scrollsToTop;
|
||||
|
||||
@override
|
||||
IOSWKSelectionGranularity selectionGranularity;
|
||||
|
||||
@override
|
||||
String serifFontFamily;
|
||||
|
||||
@override
|
||||
bool sharedCookiesEnabled;
|
||||
|
||||
@override
|
||||
String standardFontFamily;
|
||||
|
||||
@override
|
||||
bool supportMultipleWindows;
|
||||
|
||||
@override
|
||||
bool supportZoom;
|
||||
|
||||
@override
|
||||
bool suppressesIncrementalRendering;
|
||||
|
||||
@override
|
||||
int textZoom;
|
||||
|
||||
@override
|
||||
bool thirdPartyCookiesEnabled;
|
||||
|
||||
@override
|
||||
bool transparentBackground;
|
||||
|
||||
@override
|
||||
bool useHybridComposition;
|
||||
|
||||
@override
|
||||
bool useOnDownloadStart;
|
||||
|
||||
@override
|
||||
bool useOnLoadResource;
|
||||
|
||||
@override
|
||||
bool useOnNavigationResponse;
|
||||
|
||||
@override
|
||||
bool useOnRenderProcessGone;
|
||||
|
||||
@override
|
||||
bool useShouldInterceptAjaxRequest;
|
||||
|
||||
@override
|
||||
bool useShouldInterceptFetchRequest;
|
||||
|
||||
@override
|
||||
bool useShouldInterceptRequest;
|
||||
|
||||
@override
|
||||
bool useShouldOverrideUrlLoading;
|
||||
|
||||
@override
|
||||
bool useWideViewPort;
|
||||
|
||||
@override
|
||||
String userAgent;
|
||||
|
||||
@override
|
||||
bool verticalScrollBarEnabled;
|
||||
|
||||
@override
|
||||
AndroidVerticalScrollbarPosition? verticalScrollbarPosition;
|
||||
|
||||
@override
|
||||
Color? verticalScrollbarThumbColor;
|
||||
|
||||
@override
|
||||
Color? verticalScrollbarTrackColor;
|
||||
|
||||
InAppWebViewSettings(
|
||||
{this.useShouldOverrideUrlLoading = false,
|
||||
this.useOnLoadResource = false,
|
||||
this.useOnDownloadStart = false,
|
||||
this.clearCache = false,
|
||||
this.userAgent = "",
|
||||
this.applicationNameForUserAgent = "",
|
||||
this.javaScriptEnabled = true,
|
||||
this.javaScriptCanOpenWindowsAutomatically = false,
|
||||
this.mediaPlaybackRequiresUserGesture = true,
|
||||
this.minimumFontSize,
|
||||
this.verticalScrollBarEnabled = true,
|
||||
this.horizontalScrollBarEnabled = true,
|
||||
this.resourceCustomSchemes = const [],
|
||||
this.contentBlockers = const [],
|
||||
this.preferredContentMode = UserPreferredContentMode.RECOMMENDED,
|
||||
this.useShouldInterceptAjaxRequest = false,
|
||||
this.useShouldInterceptFetchRequest = false,
|
||||
this.incognito = false,
|
||||
this.cacheEnabled = true,
|
||||
this.transparentBackground = false,
|
||||
this.disableVerticalScroll = false,
|
||||
this.disableHorizontalScroll = false,
|
||||
this.disableContextMenu = false,
|
||||
this.supportZoom = true,
|
||||
this.allowFileAccessFromFileURLs = false,
|
||||
this.allowUniversalAccessFromFileURLs = false,
|
||||
this.textZoom = 100,
|
||||
this.clearSessionCache = false,
|
||||
this.builtInZoomControls = true,
|
||||
this.displayZoomControls = false,
|
||||
this.databaseEnabled = true,
|
||||
this.domStorageEnabled = true,
|
||||
this.useWideViewPort = true,
|
||||
this.safeBrowsingEnabled = true,
|
||||
this.mixedContentMode,
|
||||
this.allowContentAccess = true,
|
||||
this.allowFileAccess = true,
|
||||
this.appCachePath,
|
||||
this.blockNetworkImage = false,
|
||||
this.blockNetworkLoads = false,
|
||||
this.cacheMode = AndroidCacheMode.LOAD_DEFAULT,
|
||||
this.cursiveFontFamily = "cursive",
|
||||
this.defaultFixedFontSize = 16,
|
||||
this.defaultFontSize = 16,
|
||||
this.defaultTextEncodingName = "UTF-8",
|
||||
this.disabledActionModeMenuItems,
|
||||
this.fantasyFontFamily = "fantasy",
|
||||
this.fixedFontFamily = "monospace",
|
||||
this.forceDark = AndroidForceDark.FORCE_DARK_OFF,
|
||||
this.geolocationEnabled = true,
|
||||
this.layoutAlgorithm,
|
||||
this.loadWithOverviewMode = true,
|
||||
this.loadsImagesAutomatically = true,
|
||||
this.minimumLogicalFontSize = 8,
|
||||
this.needInitialFocus = true,
|
||||
this.offscreenPreRaster = false,
|
||||
this.sansSerifFontFamily = "sans-serif",
|
||||
this.serifFontFamily = "sans-serif",
|
||||
this.standardFontFamily = "sans-serif",
|
||||
this.saveFormData = true,
|
||||
this.thirdPartyCookiesEnabled = true,
|
||||
this.hardwareAcceleration = true,
|
||||
this.initialScale = 0,
|
||||
this.supportMultipleWindows = false,
|
||||
this.regexToCancelSubFramesLoading,
|
||||
this.useHybridComposition = false,
|
||||
this.useShouldInterceptRequest = false,
|
||||
this.useOnRenderProcessGone = false,
|
||||
this.overScrollMode = AndroidOverScrollMode.OVER_SCROLL_IF_CONTENT_SCROLLS,
|
||||
this.networkAvailable,
|
||||
this.scrollBarStyle = AndroidScrollBarStyle.SCROLLBARS_INSIDE_OVERLAY,
|
||||
this.verticalScrollbarPosition =
|
||||
AndroidVerticalScrollbarPosition.SCROLLBAR_POSITION_DEFAULT,
|
||||
this.scrollBarDefaultDelayBeforeFade,
|
||||
this.scrollbarFadingEnabled = true,
|
||||
this.scrollBarFadeDuration,
|
||||
this.rendererPriorityPolicy,
|
||||
this.disableDefaultErrorPage = false,
|
||||
this.verticalScrollbarThumbColor,
|
||||
this.verticalScrollbarTrackColor,
|
||||
this.horizontalScrollbarThumbColor,
|
||||
this.horizontalScrollbarTrackColor,
|
||||
this.disallowOverScroll = false,
|
||||
this.enableViewportScale = false,
|
||||
this.suppressesIncrementalRendering = false,
|
||||
this.allowsAirPlayForMediaPlayback = true,
|
||||
this.allowsBackForwardNavigationGestures = true,
|
||||
this.allowsLinkPreview = true,
|
||||
this.ignoresViewportScaleLimits = false,
|
||||
this.allowsInlineMediaPlayback = false,
|
||||
this.allowsPictureInPictureMediaPlayback = true,
|
||||
this.isFraudulentWebsiteWarningEnabled = true,
|
||||
this.selectionGranularity = IOSWKSelectionGranularity.DYNAMIC,
|
||||
this.dataDetectorTypes = const [IOSWKDataDetectorTypes.NONE],
|
||||
this.sharedCookiesEnabled = false,
|
||||
this.automaticallyAdjustsScrollIndicatorInsets = false,
|
||||
this.accessibilityIgnoresInvertColors = false,
|
||||
this.decelerationRate = IOSUIScrollViewDecelerationRate.NORMAL,
|
||||
this.alwaysBounceVertical = false,
|
||||
this.alwaysBounceHorizontal = false,
|
||||
this.scrollsToTop = true,
|
||||
this.isPagingEnabled = false,
|
||||
this.maximumZoomScale = 1.0,
|
||||
this.minimumZoomScale = 1.0,
|
||||
this.contentInsetAdjustmentBehavior =
|
||||
IOSUIScrollViewContentInsetAdjustmentBehavior.NEVER,
|
||||
this.isDirectionalLockEnabled = false,
|
||||
this.mediaType,
|
||||
this.pageZoom = 1.0,
|
||||
this.limitsNavigationsToAppBoundDomains = false,
|
||||
this.useOnNavigationResponse = false,
|
||||
this.applePayAPIEnabled = false,
|
||||
this.allowingReadAccessTo,
|
||||
this.disableLongPressContextMenuOnLinks = false,
|
||||
this.disableInputAccessoryView = false}) {
|
||||
if (this.minimumFontSize == null)
|
||||
this.minimumFontSize =
|
||||
defaultTargetPlatform == TargetPlatform.android ? 8 : 0;
|
||||
assert(!this.resourceCustomSchemes.contains("http") &&
|
||||
!this.resourceCustomSchemes.contains("https"));
|
||||
assert(allowingReadAccessTo == null || allowingReadAccessTo!.isScheme("file"));
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
Map<String, dynamic> options = {};
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
options.addAll(InAppWebViewOptions.instanceToMap(this));
|
||||
options.addAll(AndroidInAppWebViewSettings.instanceToMap(this));
|
||||
options.addAll(IOSInAppWebViewSettings.instanceToMap(this));
|
||||
return options;
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(InAppWebViewSettings settings) {
|
||||
return settings.toMap();
|
||||
}
|
||||
|
||||
static InAppWebViewSettings fromMap(Map<String, dynamic> options, {InAppWebViewSettings? instance}) {
|
||||
if (instance == null) {
|
||||
instance = InAppWebViewSettings();
|
||||
}
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
InAppWebViewOptions.fromMap(options, instance: instance);
|
||||
if (defaultTargetPlatform == TargetPlatform.android) {
|
||||
AndroidInAppWebViewSettings.fromMap(options, instance: instance);
|
||||
}
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS) {
|
||||
IOSInAppWebViewSettings.fromMap(options, instance: instance);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
@override
|
||||
InAppWebViewSettings copy() {
|
||||
return InAppWebViewSettings.fromMap(this.toMap());
|
||||
}
|
||||
}
|
||||
|
||||
///Class that represents the options that can be used for a [WebView].
|
||||
///Use [InAppWebViewSettings] instead.
|
||||
@Deprecated('Use InAppWebViewSettings instead')
|
||||
class InAppWebViewGroupOptions {
|
||||
///Cross-platform options.
|
||||
late InAppWebViewOptions crossPlatform;
|
||||
|
||||
///Android-specific options.
|
||||
late AndroidInAppWebViewOptions android;
|
||||
|
||||
///iOS-specific options.
|
||||
late IOSInAppWebViewOptions ios;
|
||||
|
||||
InAppWebViewGroupOptions(
|
||||
{InAppWebViewOptions? crossPlatform,
|
||||
AndroidInAppWebViewOptions? android,
|
||||
IOSInAppWebViewOptions? ios}) {
|
||||
this.crossPlatform = crossPlatform ?? InAppWebViewOptions();
|
||||
this.android = android ?? AndroidInAppWebViewOptions();
|
||||
this.ios = ios ?? IOSInAppWebViewOptions();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
Map<String, dynamic> options = {};
|
||||
options.addAll(this.crossPlatform.toMap());
|
||||
if (defaultTargetPlatform == TargetPlatform.android)
|
||||
options.addAll(this.android.toMap());
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS)
|
||||
options.addAll(this.ios.toMap());
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
static InAppWebViewGroupOptions fromMap(Map<String, dynamic> options) {
|
||||
InAppWebViewGroupOptions inAppWebViewGroupOptions =
|
||||
InAppWebViewGroupOptions();
|
||||
|
||||
inAppWebViewGroupOptions.crossPlatform =
|
||||
InAppWebViewOptions.fromMap(options);
|
||||
if (defaultTargetPlatform == TargetPlatform.android)
|
||||
inAppWebViewGroupOptions.android =
|
||||
AndroidInAppWebViewOptions.fromMap(options);
|
||||
else if (defaultTargetPlatform == TargetPlatform.iOS)
|
||||
inAppWebViewGroupOptions.ios = IOSInAppWebViewOptions.fromMap(options);
|
||||
|
||||
return inAppWebViewGroupOptions;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
InAppWebViewGroupOptions copy() {
|
||||
return InAppWebViewGroupOptions.fromMap(this.toMap());
|
||||
}
|
||||
}
|
||||
|
||||
///Use [InAppWebViewSettings] instead.
|
||||
@Deprecated('Use InAppWebViewSettings instead')
|
||||
class InAppWebViewOptions
|
||||
implements WebViewOptions, BrowserOptions, AndroidOptions, IosOptions {
|
||||
///Set to `true` to be able to listen at the [WebView.shouldOverrideUrlLoading] event. The default value is `false`.
|
||||
bool useShouldOverrideUrlLoading;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.onLoadResource] event. The default value is `false`.
|
||||
bool useOnLoadResource;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.onDownloadStart] event. The default value is `false`.
|
||||
bool useOnDownloadStart;
|
||||
|
||||
///Set to `true` to have all the browser's cache cleared before the new WebView is opened. The default value is `false`.
|
||||
bool clearCache;
|
||||
|
||||
///Sets the user-agent for the WebView.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
String userAgent;
|
||||
|
||||
///Append to the existing user-agent. Setting userAgent will override this.
|
||||
///
|
||||
///**NOTE**: available on Android 17+ and on iOS 9.0+.
|
||||
String applicationNameForUserAgent;
|
||||
|
||||
///Set to `true` to enable JavaScript. The default value is `true`.
|
||||
bool javaScriptEnabled;
|
||||
|
||||
///Set to `true` to allow JavaScript open windows without user interaction. The default value is `false`.
|
||||
bool javaScriptCanOpenWindowsAutomatically;
|
||||
|
||||
///Set to `true` to prevent HTML5 audio or video from autoplaying. The default value is `true`.
|
||||
///
|
||||
///**NOTE**: available on iOS 10.0+.
|
||||
bool mediaPlaybackRequiresUserGesture;
|
||||
|
||||
///Sets the minimum font size. The default value is `8` for Android, `0` for iOS.
|
||||
int? minimumFontSize;
|
||||
|
||||
///Define whether the vertical scrollbar should be drawn or not. The default value is `true`.
|
||||
bool verticalScrollBarEnabled;
|
||||
|
||||
///Define whether the horizontal scrollbar should be drawn or not. The default value is `true`.
|
||||
bool horizontalScrollBarEnabled;
|
||||
|
||||
///List of custom schemes that the WebView must handle. Use the [WebView.onLoadResourceCustomScheme] event to intercept resource requests with custom scheme.
|
||||
///
|
||||
///**NOTE**: available on iOS 11.0+.
|
||||
List<String> resourceCustomSchemes;
|
||||
|
||||
///List of [ContentBlocker] that are a set of rules used to block content in the browser window.
|
||||
///
|
||||
///**NOTE**: available on iOS 11.0+.
|
||||
List<ContentBlocker> contentBlockers;
|
||||
|
||||
///Sets the content mode that the WebView needs to use when loading and rendering a webpage. The default value is [UserPreferredContentMode.RECOMMENDED].
|
||||
///
|
||||
///**NOTE**: available on iOS 13.0+.
|
||||
UserPreferredContentMode? preferredContentMode;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.shouldInterceptAjaxRequest] event. The default value is `false`.
|
||||
bool useShouldInterceptAjaxRequest;
|
||||
|
||||
///Set to `true` to be able to listen at the [WebView.shouldInterceptFetchRequest] event. The default value is `false`.
|
||||
bool useShouldInterceptFetchRequest;
|
||||
|
||||
///Set to `true` to open a browser window with incognito mode. The default value is `false`.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
///On Android, by setting this option to `true`, it will clear all the cookies of all WebView instances,
|
||||
///because there isn't any way to make the website data store non-persistent for the specific WebView instance such as on iOS.
|
||||
bool incognito;
|
||||
|
||||
///Sets whether WebView should use browser caching. The default value is `true`.
|
||||
///
|
||||
///**NOTE**: available on iOS 9.0+.
|
||||
bool cacheEnabled;
|
||||
|
||||
///Set to `true` to make the background of the WebView transparent. If your app has a dark theme, this can prevent a white flash on initialization. The default value is `false`.
|
||||
bool transparentBackground;
|
||||
|
||||
///Set to `true` to disable vertical scroll. The default value is `false`.
|
||||
bool disableVerticalScroll;
|
||||
|
||||
///Set to `true` to disable horizontal scroll. The default value is `false`.
|
||||
bool disableHorizontalScroll;
|
||||
|
||||
///Set to `true` to disable context menu. The default value is `false`.
|
||||
bool disableContextMenu;
|
||||
|
||||
///Set to `false` if the WebView should not support zooming using its on-screen zoom controls and gestures. The default value is `true`.
|
||||
bool supportZoom;
|
||||
|
||||
///Sets whether cross-origin requests in the context of a file scheme URL should be allowed to access content from other file scheme URLs.
|
||||
///Note that some accesses such as image HTML elements don't follow same-origin rules and aren't affected by this setting.
|
||||
///
|
||||
///Don't enable this setting if you open files that may be created or altered by external sources.
|
||||
///Enabling this setting allows malicious scripts loaded in a `file://` context to access arbitrary local files including WebView cookies and app private data.
|
||||
///
|
||||
///Note that the value of this setting is ignored if the value of [allowUniversalAccessFromFileURLs] is `true`.
|
||||
///
|
||||
///The default value is `false`.
|
||||
bool allowFileAccessFromFileURLs;
|
||||
|
||||
///Sets whether cross-origin requests in the context of a file scheme URL should be allowed to access content from any origin.
|
||||
///This includes access to content from other file scheme URLs or web contexts.
|
||||
///Note that some access such as image HTML elements doesn't follow same-origin rules and isn't affected by this setting.
|
||||
///
|
||||
///Don't enable this setting if you open files that may be created or altered by external sources.
|
||||
///Enabling this setting allows malicious scripts loaded in a `file://` context to launch cross-site scripting attacks,
|
||||
///either accessing arbitrary local files including WebView cookies, app private data or even credentials used on arbitrary web sites.
|
||||
///
|
||||
///The default value is `false`.
|
||||
bool allowUniversalAccessFromFileURLs;
|
||||
|
||||
InAppWebViewOptions(
|
||||
{this.useShouldOverrideUrlLoading = false,
|
||||
this.useOnLoadResource = false,
|
||||
this.useOnDownloadStart = false,
|
||||
this.clearCache = false,
|
||||
this.userAgent = "",
|
||||
this.applicationNameForUserAgent = "",
|
||||
this.javaScriptEnabled = true,
|
||||
this.javaScriptCanOpenWindowsAutomatically = false,
|
||||
this.mediaPlaybackRequiresUserGesture = true,
|
||||
this.minimumFontSize,
|
||||
this.verticalScrollBarEnabled = true,
|
||||
this.horizontalScrollBarEnabled = true,
|
||||
this.resourceCustomSchemes = const [],
|
||||
this.contentBlockers = const [],
|
||||
this.preferredContentMode = UserPreferredContentMode.RECOMMENDED,
|
||||
this.useShouldInterceptAjaxRequest = false,
|
||||
this.useShouldInterceptFetchRequest = false,
|
||||
this.incognito = false,
|
||||
this.cacheEnabled = true,
|
||||
this.transparentBackground = false,
|
||||
this.disableVerticalScroll = false,
|
||||
this.disableHorizontalScroll = false,
|
||||
this.disableContextMenu = false,
|
||||
this.supportZoom = true,
|
||||
this.allowFileAccessFromFileURLs = false,
|
||||
this.allowUniversalAccessFromFileURLs = false}) {
|
||||
if (this.minimumFontSize == null)
|
||||
this.minimumFontSize =
|
||||
defaultTargetPlatform == TargetPlatform.android ? 8 : 0;
|
||||
assert(!this.resourceCustomSchemes.contains("http") &&
|
||||
!this.resourceCustomSchemes.contains("https"));
|
||||
}
|
||||
|
||||
static Map<String, dynamic> instanceToMap(InAppWebViewOptions options) {
|
||||
return options.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toMap() {
|
||||
List<Map<String, Map<String, dynamic>>> contentBlockersMapList = [];
|
||||
contentBlockers.forEach((contentBlocker) {
|
||||
contentBlockersMapList.add(contentBlocker.toMap());
|
||||
});
|
||||
|
||||
return {
|
||||
"useShouldOverrideUrlLoading": useShouldOverrideUrlLoading,
|
||||
"useOnLoadResource": useOnLoadResource,
|
||||
"useOnDownloadStart": useOnDownloadStart,
|
||||
"clearCache": clearCache,
|
||||
"userAgent": userAgent,
|
||||
"applicationNameForUserAgent": applicationNameForUserAgent,
|
||||
"javaScriptEnabled": javaScriptEnabled,
|
||||
"javaScriptCanOpenWindowsAutomatically":
|
||||
javaScriptCanOpenWindowsAutomatically,
|
||||
"mediaPlaybackRequiresUserGesture": mediaPlaybackRequiresUserGesture,
|
||||
"verticalScrollBarEnabled": verticalScrollBarEnabled,
|
||||
"horizontalScrollBarEnabled": horizontalScrollBarEnabled,
|
||||
"resourceCustomSchemes": resourceCustomSchemes,
|
||||
"contentBlockers": contentBlockersMapList,
|
||||
"preferredContentMode": preferredContentMode?.toValue(),
|
||||
"useShouldInterceptAjaxRequest": useShouldInterceptAjaxRequest,
|
||||
"useShouldInterceptFetchRequest": useShouldInterceptFetchRequest,
|
||||
"incognito": incognito,
|
||||
"cacheEnabled": cacheEnabled,
|
||||
"transparentBackground": transparentBackground,
|
||||
"disableVerticalScroll": disableVerticalScroll,
|
||||
"disableHorizontalScroll": disableHorizontalScroll,
|
||||
"disableContextMenu": disableContextMenu,
|
||||
"supportZoom": supportZoom,
|
||||
"allowFileAccessFromFileURLs": allowFileAccessFromFileURLs,
|
||||
"allowUniversalAccessFromFileURLs": allowUniversalAccessFromFileURLs
|
||||
};
|
||||
}
|
||||
|
||||
static InAppWebViewOptions fromMap(Map<String, dynamic> map, {InAppWebViewOptions? instance}) {
|
||||
List<ContentBlocker> contentBlockers = [];
|
||||
List<dynamic>? contentBlockersMapList = map["contentBlockers"];
|
||||
if (contentBlockersMapList != null) {
|
||||
contentBlockersMapList.forEach((contentBlocker) {
|
||||
contentBlockers.add(ContentBlocker.fromMap(
|
||||
Map<dynamic, Map<dynamic, dynamic>>.from(
|
||||
Map<dynamic, dynamic>.from(contentBlocker))));
|
||||
});
|
||||
}
|
||||
|
||||
if (instance == null) {
|
||||
instance = InAppWebViewOptions();
|
||||
}
|
||||
|
||||
instance.useShouldOverrideUrlLoading = map["useShouldOverrideUrlLoading"];
|
||||
instance.useOnLoadResource = map["useOnLoadResource"];
|
||||
instance.useOnDownloadStart = map["useOnDownloadStart"];
|
||||
instance.clearCache = map["clearCache"];
|
||||
instance.userAgent = map["userAgent"];
|
||||
instance.applicationNameForUserAgent = map["applicationNameForUserAgent"];
|
||||
instance.javaScriptEnabled = map["javaScriptEnabled"];
|
||||
instance.javaScriptCanOpenWindowsAutomatically =
|
||||
map["javaScriptCanOpenWindowsAutomatically"];
|
||||
instance.mediaPlaybackRequiresUserGesture =
|
||||
map["mediaPlaybackRequiresUserGesture"];
|
||||
instance.verticalScrollBarEnabled = map["verticalScrollBarEnabled"];
|
||||
instance.horizontalScrollBarEnabled = map["horizontalScrollBarEnabled"];
|
||||
instance.resourceCustomSchemes =
|
||||
List<String>.from(map["resourceCustomSchemes"] ?? []);
|
||||
instance.contentBlockers = contentBlockers;
|
||||
instance.preferredContentMode =
|
||||
UserPreferredContentMode.fromValue(map["preferredContentMode"]);
|
||||
instance.useShouldInterceptAjaxRequest =
|
||||
map["useShouldInterceptAjaxRequest"];
|
||||
instance.useShouldInterceptFetchRequest =
|
||||
map["useShouldInterceptFetchRequest"];
|
||||
instance.incognito = map["incognito"];
|
||||
instance.cacheEnabled = map["cacheEnabled"];
|
||||
instance.transparentBackground = map["transparentBackground"];
|
||||
instance.disableVerticalScroll = map["disableVerticalScroll"];
|
||||
instance.disableHorizontalScroll = map["disableHorizontalScroll"];
|
||||
instance.disableContextMenu = map["disableContextMenu"];
|
||||
instance.supportZoom = map["supportZoom"];
|
||||
instance.allowFileAccessFromFileURLs = map["allowFileAccessFromFileURLs"];
|
||||
instance.allowUniversalAccessFromFileURLs =
|
||||
map["allowUniversalAccessFromFileURLs"];
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return this.toMap();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return toMap().toString();
|
||||
}
|
||||
|
||||
@override
|
||||
InAppWebViewOptions copy() {
|
||||
return InAppWebViewOptions.fromMap(this.toMap());
|
||||
}
|
||||
}
|
@ -1,14 +1,15 @@
|
||||
import '../../types.dart';
|
||||
|
||||
import '../../in_app_browser/in_app_browser_options.dart';
|
||||
import '../../in_app_browser/in_app_browser_settings.dart';
|
||||
|
||||
import '../in_app_webview_options.dart';
|
||||
import '../in_app_webview_settings.dart';
|
||||
import '../webview.dart';
|
||||
import '../in_app_webview_controller.dart';
|
||||
|
||||
class IosOptions {}
|
||||
|
||||
///This class represents all the iOS-only WebView options available.
|
||||
///Use [InAppWebViewSettings] instead.
|
||||
@Deprecated('Use InAppWebViewSettings instead')
|
||||
class IOSInAppWebViewOptions
|
||||
implements WebViewOptions, BrowserOptions, IosOptions {
|
||||
///Set to `true` to disable the bouncing of the WebView when the scrolling has reached an edge of the content. The default value is `false`.
|
||||
@ -324,55 +325,55 @@ class IOSInAppWebViewOptions
|
||||
}
|
||||
});
|
||||
|
||||
IOSInAppWebViewOptions options = IOSInAppWebViewOptions();
|
||||
options.disallowOverScroll = map["disallowOverScroll"];
|
||||
options.enableViewportScale = map["enableViewportScale"];
|
||||
options.suppressesIncrementalRendering =
|
||||
var instance = IOSInAppWebViewOptions();
|
||||
instance.disallowOverScroll = map["disallowOverScroll"];
|
||||
instance.enableViewportScale = map["enableViewportScale"];
|
||||
instance.suppressesIncrementalRendering =
|
||||
map["suppressesIncrementalRendering"];
|
||||
options.allowsAirPlayForMediaPlayback =
|
||||
instance.allowsAirPlayForMediaPlayback =
|
||||
map["allowsAirPlayForMediaPlayback"];
|
||||
options.allowsBackForwardNavigationGestures =
|
||||
instance.allowsBackForwardNavigationGestures =
|
||||
map["allowsBackForwardNavigationGestures"];
|
||||
options.allowsLinkPreview = map["allowsLinkPreview"];
|
||||
options.ignoresViewportScaleLimits = map["ignoresViewportScaleLimits"];
|
||||
options.allowsInlineMediaPlayback = map["allowsInlineMediaPlayback"];
|
||||
options.allowsPictureInPictureMediaPlayback =
|
||||
instance.allowsLinkPreview = map["allowsLinkPreview"];
|
||||
instance.ignoresViewportScaleLimits = map["ignoresViewportScaleLimits"];
|
||||
instance.allowsInlineMediaPlayback = map["allowsInlineMediaPlayback"];
|
||||
instance.allowsPictureInPictureMediaPlayback =
|
||||
map["allowsPictureInPictureMediaPlayback"];
|
||||
options.isFraudulentWebsiteWarningEnabled =
|
||||
instance.isFraudulentWebsiteWarningEnabled =
|
||||
map["isFraudulentWebsiteWarningEnabled"];
|
||||
options.selectionGranularity =
|
||||
instance.selectionGranularity =
|
||||
IOSWKSelectionGranularity.fromValue(map["selectionGranularity"])!;
|
||||
options.dataDetectorTypes = dataDetectorTypes;
|
||||
options.sharedCookiesEnabled = map["sharedCookiesEnabled"];
|
||||
options.automaticallyAdjustsScrollIndicatorInsets =
|
||||
instance.dataDetectorTypes = dataDetectorTypes;
|
||||
instance.sharedCookiesEnabled = map["sharedCookiesEnabled"];
|
||||
instance.automaticallyAdjustsScrollIndicatorInsets =
|
||||
map["automaticallyAdjustsScrollIndicatorInsets"];
|
||||
options.accessibilityIgnoresInvertColors =
|
||||
instance.accessibilityIgnoresInvertColors =
|
||||
map["accessibilityIgnoresInvertColors"];
|
||||
options.decelerationRate =
|
||||
instance.decelerationRate =
|
||||
IOSUIScrollViewDecelerationRate.fromValue(map["decelerationRate"])!;
|
||||
options.alwaysBounceVertical = map["alwaysBounceVertical"];
|
||||
options.alwaysBounceHorizontal = map["alwaysBounceHorizontal"];
|
||||
options.scrollsToTop = map["scrollsToTop"];
|
||||
options.isPagingEnabled = map["isPagingEnabled"];
|
||||
options.maximumZoomScale = map["maximumZoomScale"];
|
||||
options.minimumZoomScale = map["minimumZoomScale"];
|
||||
options.contentInsetAdjustmentBehavior =
|
||||
instance.alwaysBounceVertical = map["alwaysBounceVertical"];
|
||||
instance.alwaysBounceHorizontal = map["alwaysBounceHorizontal"];
|
||||
instance.scrollsToTop = map["scrollsToTop"];
|
||||
instance.isPagingEnabled = map["isPagingEnabled"];
|
||||
instance.maximumZoomScale = map["maximumZoomScale"];
|
||||
instance.minimumZoomScale = map["minimumZoomScale"];
|
||||
instance.contentInsetAdjustmentBehavior =
|
||||
IOSUIScrollViewContentInsetAdjustmentBehavior.fromValue(
|
||||
map["contentInsetAdjustmentBehavior"])!;
|
||||
options.isDirectionalLockEnabled = map["isDirectionalLockEnabled"];
|
||||
options.mediaType = map["mediaType"];
|
||||
options.pageZoom = map["pageZoom"];
|
||||
options.limitsNavigationsToAppBoundDomains =
|
||||
instance.isDirectionalLockEnabled = map["isDirectionalLockEnabled"];
|
||||
instance.mediaType = map["mediaType"];
|
||||
instance.pageZoom = map["pageZoom"];
|
||||
instance.limitsNavigationsToAppBoundDomains =
|
||||
map["limitsNavigationsToAppBoundDomains"];
|
||||
options.useOnNavigationResponse = map["useOnNavigationResponse"];
|
||||
options.applePayAPIEnabled = map["applePayAPIEnabled"];
|
||||
options.allowingReadAccessTo = map["allowingReadAccessTo"] != null
|
||||
instance.useOnNavigationResponse = map["useOnNavigationResponse"];
|
||||
instance.applePayAPIEnabled = map["applePayAPIEnabled"];
|
||||
instance.allowingReadAccessTo = map["allowingReadAccessTo"] != null
|
||||
? Uri.parse(map["allowingReadAccessTo"])
|
||||
: null;
|
||||
options.disableLongPressContextMenuOnLinks =
|
||||
instance.disableLongPressContextMenuOnLinks =
|
||||
map["disableLongPressContextMenuOnLinks"];
|
||||
options.disableInputAccessoryView = map["disableInputAccessoryView"];
|
||||
return options;
|
||||
instance.disableInputAccessoryView = map["disableInputAccessoryView"];
|
||||
return instance;
|
||||
}
|
||||
|
||||
@override
|
||||
|
Loading…
x
Reference in New Issue
Block a user