75 lines
2.7 KiB
Swift
Executable File
75 lines
2.7 KiB
Swift
Executable File
//
|
|
// FlutterWebViewFactory.swift
|
|
// flutter_inappwebview
|
|
//
|
|
// Created by Lorenzo on 13/11/18.
|
|
//
|
|
|
|
import Flutter
|
|
import Foundation
|
|
|
|
public class FlutterWebViewFactory: NSObject, FlutterPlatformViewFactory {
|
|
static let VIEW_TYPE_ID = "com.pichillilorenzo/flutter_inappwebview"
|
|
|
|
private var plugin: SwiftFlutterPlugin
|
|
|
|
init(plugin: SwiftFlutterPlugin) {
|
|
self.plugin = plugin
|
|
super.init()
|
|
}
|
|
|
|
public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
|
|
return FlutterStandardMessageCodec.sharedInstance()
|
|
}
|
|
|
|
public func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) -> FlutterPlatformView {
|
|
let arguments = args as? NSDictionary
|
|
var flutterWebView: FlutterWebViewController?
|
|
var id: Any = viewId
|
|
|
|
let keepAliveId = arguments?["keepAliveId"] as? String
|
|
let headlessWebViewId = arguments?["headlessWebViewId"] as? String
|
|
let preventGestureDelay = arguments?["preventGestureDelay"] as? Bool ?? false
|
|
|
|
if let headlessWebViewId = headlessWebViewId,
|
|
let headlessWebView = plugin.headlessInAppWebViewManager?.webViews[headlessWebViewId],
|
|
let platformView = headlessWebView?.disposeAndGetFlutterWebView(withFrame: frame) {
|
|
flutterWebView = platformView
|
|
flutterWebView?.keepAliveId = keepAliveId
|
|
}
|
|
|
|
if let keepAliveId = keepAliveId,
|
|
flutterWebView == nil,
|
|
let keepAliveWebView = plugin.inAppWebViewManager?.keepAliveWebViews[keepAliveId] {
|
|
flutterWebView = keepAliveWebView
|
|
if let view = flutterWebView?.view() {
|
|
// remove from parent
|
|
view.removeFromSuperview()
|
|
}
|
|
}
|
|
|
|
let shouldMakeInitialLoad = flutterWebView == nil
|
|
if flutterWebView == nil {
|
|
if let keepAliveId = keepAliveId {
|
|
id = keepAliveId
|
|
}
|
|
flutterWebView = FlutterWebViewController(plugin: plugin,
|
|
withFrame: frame,
|
|
viewIdentifier: id,
|
|
params: arguments!)
|
|
}
|
|
|
|
if let keepAliveId = keepAliveId {
|
|
plugin.inAppWebViewManager?.keepAliveWebViews[keepAliveId] = flutterWebView!
|
|
}
|
|
|
|
flutterWebView?.webView()?.preventGestureDelay = preventGestureDelay
|
|
|
|
if shouldMakeInitialLoad {
|
|
flutterWebView?.makeInitialLoad(params: arguments!)
|
|
}
|
|
|
|
return flutterWebView!
|
|
}
|
|
}
|