75 lines
2.4 KiB
Swift
75 lines
2.4 KiB
Swift
//
|
|
// File.swift
|
|
// flutter_inappwebview
|
|
//
|
|
// Created by Lorenzo Pichilli on 03/03/21.
|
|
//
|
|
|
|
import Foundation
|
|
import Flutter
|
|
|
|
public class PullToRefreshControl: UIRefreshControl, Disposable {
|
|
static let METHOD_CHANNEL_NAME_PREFIX = "com.pichillilorenzo/flutter_inappwebview_pull_to_refresh_"
|
|
|
|
var plugin: SwiftFlutterPlugin?
|
|
var channelDelegate: PullToRefreshChannelDelegate?
|
|
var settings: PullToRefreshSettings?
|
|
var shouldCallOnRefresh = false
|
|
var delegate: PullToRefreshDelegate?
|
|
|
|
public init(plugin: SwiftFlutterPlugin, id: Any, settings: PullToRefreshSettings?) {
|
|
super.init()
|
|
self.plugin = plugin
|
|
self.settings = settings
|
|
if let registrar = plugin.registrar {
|
|
let channel = FlutterMethodChannel(name: PullToRefreshControl.METHOD_CHANNEL_NAME_PREFIX + String(describing: id),
|
|
binaryMessenger: registrar.messenger())
|
|
self.channelDelegate = PullToRefreshChannelDelegate(pullToRefreshControl: self, channel: channel)
|
|
}
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
}
|
|
|
|
public func prepare() {
|
|
if let settings = settings {
|
|
if settings.enabled {
|
|
delegate?.enablePullToRefresh()
|
|
}
|
|
if let color = settings.color, !color.isEmpty {
|
|
tintColor = UIColor(hexString: color)
|
|
}
|
|
if let backgroundTintColor = settings.backgroundColor, !backgroundTintColor.isEmpty {
|
|
backgroundColor = UIColor(hexString: backgroundTintColor)
|
|
}
|
|
if let attributedTitleMap = settings.attributedTitle {
|
|
attributedTitle = NSAttributedString.fromMap(map: attributedTitleMap)
|
|
}
|
|
}
|
|
addTarget(self, action: #selector(updateShouldCallOnRefresh), for: .valueChanged)
|
|
}
|
|
|
|
public func onRefresh() {
|
|
shouldCallOnRefresh = false
|
|
channelDelegate?.onRefresh()
|
|
}
|
|
|
|
@objc public func updateShouldCallOnRefresh() {
|
|
shouldCallOnRefresh = true
|
|
}
|
|
|
|
public func dispose() {
|
|
channelDelegate?.dispose()
|
|
channelDelegate = nil
|
|
removeTarget(self, action: #selector(updateShouldCallOnRefresh), for: .valueChanged)
|
|
delegate = nil
|
|
plugin = nil
|
|
}
|
|
|
|
deinit {
|
|
debugPrint("PullToRefreshControl - dealloc")
|
|
dispose()
|
|
}
|
|
}
|