iosWebViewFix/flutter_inappwebview_macos/macos/Classes/WebAuthenticationSession/WebAuthenticationSessionCha...

77 lines
2.4 KiB
Swift

//
// WebAuthenticationSessionChannelDelegate.swift
// flutter_inappwebview
//
// Created by Lorenzo Pichilli on 08/05/22.
//
import Foundation
import FlutterMacOS
public class WebAuthenticationSessionChannelDelegate: ChannelDelegate {
private weak var webAuthenticationSession: WebAuthenticationSession?
public init(webAuthenticationSession: WebAuthenticationSession, channel: FlutterMethodChannel) {
super.init(channel: channel)
self.webAuthenticationSession = webAuthenticationSession
}
public override func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// let arguments = call.arguments as? NSDictionary
switch call.method {
case "canStart":
if let webAuthenticationSession = webAuthenticationSession {
result(webAuthenticationSession.canStart())
} else {
result(false)
}
break
case "start":
if let webAuthenticationSession = webAuthenticationSession {
result(webAuthenticationSession.start())
} else {
result(false)
}
break
case "cancel":
if let webAuthenticationSession = webAuthenticationSession {
webAuthenticationSession.cancel()
result(true)
} else {
result(false)
}
break
case "dispose":
if let webAuthenticationSession = webAuthenticationSession {
webAuthenticationSession.dispose()
result(true)
} else {
result(false)
}
break
default:
result(FlutterMethodNotImplemented)
break
}
}
public func onComplete(url: URL?, errorCode: Int?) {
let arguments: [String: Any?] = [
"url": url?.absoluteString,
"errorCode": errorCode
]
DispatchQueue.main.async { [weak self] in
self?.channel?.invokeMethod("onComplete", arguments: arguments)
}
}
public override func dispose() {
super.dispose()
webAuthenticationSession = nil
}
deinit {
dispose()
}
}