语境
我正在构建一个 Flutter 应用程序,我需要在其中使用一些仅适用于本机平台的 3rd 方库。为此,我使用 en EventChannel 来获取重复信息。
由于 Flutter 和本机代码无法确保它们之间的通信类型(dynamic
为响应明确定义的通信方法),我正在尝试添加EventChannel.StreamHandler
类的包装器,我可以在其中限制该类的类型以仅匹配颤振允许的。
到目前为止我做了什么?
abstract class EventChannelHandler<T> : EventChannel.StreamHandler {
protected abstract val childClassname: String
private var eventSink: EventChannel.EventSink? = null
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink?) {
this.eventSink = eventSink
}
override fun onCancel(arguments: Any?) {
eventSink = null
}
fun add(value: Option<T>) {
val flutterValue = value.getOrElse { null }
eventSink?.success(flutterValue)
}
}
这是一些数据的基类,这些数据将通过以下方式使用上述类:
class SpecificData1EventChannelHandler : EventChannelHandler<Int>()
class SpecificData2EventChannelHandler : EventChannelHandler<Double>()
class SpecificData3EventChannelHandler : EventChannelHandler<String>()
问题
正如我们在上面看到的,使用泛型,它允许任何类型的类型,这并不能解决我的问题。
最后的问题
如何确保我的包装类只接受一组特定的预定义类型,以便我的add
函数只处理/传递 Flutter 可以理解的类型?
OBS:我知道Pigeon,但我不会使用它,因为它不稳定。