美文网首页
flutter和android原生通信的理解(2)

flutter和android原生通信的理解(2)

作者: only_run | 来源:发表于2020-09-10 14:30 被阅读0次

    flutter和android原生通信的理解(1)
    flutter和android原生通信的理解(2)

    Flutter层 的Plugin注册

    创建 _channel对象

    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 的构造方法中

    • 传入 通道名字
    • 获取一个BinaryMessenger binaryMessenger 对象;
      binaryMessenger 用来发送消息的接口,只不过是 Flutter层的;

    binaryMessenger 对象,由ServicesBinding 在初始化时 创建

    mixin ServicesBinding on BindingBase {
      @override
      void initInstances() {
        super.initInstances();
        _instance = this;
        _defaultBinaryMessenger = createBinaryMessenger();
        //...
      }
    

    Flutter 中 BinaryMessenger是一个接口,实现类是_DefaultBinaryMessenger,
    具体功能 是通过 Flutter中的 单例对象 window实现

    相关文章

      网友评论

          本文标题:flutter和android原生通信的理解(2)

          本文链接:https://www.haomeiwen.com/subject/razuektx.html