最近初学Flutter,在练习使用BasicMessageChannel与原生端交互的时候,遇到了一个奇怪的问题。Flutter端与iOS端交互的时候,app会闪退。
经过排查,发现问题出现在codec上。
当在Flutter端,使用
static const _channel = BasicMessageChannel("messageChannel", StringCodec());
对应在iOS端应该使用
let channel = FlutterBasicMessageChannel(name:"messageChannel", binaryMessenger: controller.binaryMessenger, codec: FlutterStringCodec())
只有Flutter端使用的是StandardMessageCodec,iOS中的codec才可以不传值。
即:
static const _channel = BasicMessageChannel("messageChannel", StandardMessageCodec());
let channel = FlutterBasicMessageChannel(name:"messageChannel", binaryMessenger: controller.binaryMessenger)
综合来说,BasicMessageChannel的使用就是注意两点,一个是Channel中name的名字要一致,另外一个就是codec也得一致。如此才能正常通信。
网友评论