flutter和android原生通信的理解(1)
flutter和android原生通信的理解(2)
Flutter層 的Plugin注冊(cè)
創(chuàng)建 _channel對(duì)象
static const _channel = const MethodChannel('vn.hunghd/downloader');
class MethodChannel {
//...
const MethodChannel(this.name, [this.codec = const StandardMethodCodec(), BinaryMessenger binaryMessenger ])
: assert(name != null),
assert(codec != null),
_binaryMessenger = binaryMessenger;
//..
Future<T> _invokeMethod<T>(String method, { bool missingOk, dynamic arguments }) async {
final ByteData result = await binaryMessenger.send(
name,
codec.encodeMethodCall(MethodCall(method, arguments)),
);
if (result == null) {
if (missingOk) {
return null;
}
throw MissingPluginException('No implementation found for method $method on channel $name');
}
return codec.decodeEnvelope(result) as T;
}
MethodChannel 的構(gòu)造方法中
- 傳入 通道名字
- 獲取一個(gè)BinaryMessenger binaryMessenger 對(duì)象;
binaryMessenger 用來(lái)發(fā)送消息的接口七咧,只不過(guò)是 Flutter層的厘惦;
binaryMessenger 對(duì)象链瓦,由ServicesBinding 在初始化時(shí) 創(chuàng)建
mixin ServicesBinding on BindingBase {
@override
void initInstances() {
super.initInstances();
_instance = this;
_defaultBinaryMessenger = createBinaryMessenger();
//...
}
Flutter 中 BinaryMessenger是一個(gè)接口,實(shí)現(xiàn)類是_DefaultBinaryMessenger仰担,
具體功能 是通過(guò) Flutter中的 單例對(duì)象 window實(shí)現(xiàn)