1

语境

我正在构建一个 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,但我不会使用它,因为它不稳定。

4

0 回答 0