zoukankan      html  css  js  c++  java
  • Flutter

    @、BasicMessageChannel<T>

    BasicMessageChannel<T>

      Future<T> send(T message) async

      void setMessageHandler(Future<T>handler(T message))

      

    MessageCodec<T>:

      ByteData encodeMessage(T message);

      T decodeMessage(ByteData message);

    BinaryMessenger

      Future<void> handlePlatformMessage(String channel, ByteData data, ui.PlatformMessageResponseCallback callback);

        处理platform的调用,具体调用channel对应的setMessageHandler设置的handler

      Future<ByteData> send(String channel, ByteData message);

        调用platform

      void setMessageHandler(String channel, MessageHandler handler);

        设置处理platform调用的处理器

    @、MethodChannel

    MethodChannel

      Future<T> invokeMethod<T>(String method, [ dynamic arguments ])

        内部调用的是binaryMessenger.send

      void setMethodCallHandler(Future<dynamic> handler(MethodCall call))

         内部调用的是binaryMessenger.setMessageHandler

    MethodCodec

      StandardMethodCodec

        内部使用StandardMessageCodec,对MethodCall的method和arguments两个参数进行处理

      ByteData encodeMethodCall(MethodCall methodCall);

        调用平台时将MethodCall转ByteData

      MethodCall decodeMethodCall(ByteData methodCall);

        被平台调用时将ByteData转MethodCall

      dynamic decodeEnvelope(ByteData envelope);
        将调用平台方法返回的数据转成对象

      ByteData encodeSuccessEnvelope(dynamic result);
        被平台调用成功,将结果转成ByteData
     
      ByteData encodeErrorEnvelope({ @required String code, String message, dynamic details });
        被平台调用失败,将错误信息转成ByteData

    MethodCall

      finalString method;

      finaldynamic arguments;

     

    BinaryMessenger

    @、EventChannel

    EventChannel

      Stream<dynamic>receiveBroadcastStream([ dynamic arguments ])  

      里面是通过MethodChannel调用listen和cancel方法。

    MethodCodec

    BinaryMessenger

    @、总结

    flutter 调用平台:XXXChannel ----codec.encodeXXX将dart对象转成ByteData--->BinaryMessenger.send----------------->android/ios... ------codec.decodeXXX将平台返回的ByteData转成dart对象

    平台调用flutter:

      首先:XXXChannel.setMessageHandler(handler);

      然后:android/ios... ----->BinaryMessenger.handlePlatformMessage--------->handler-----codec将对象ByteData转成dart对象---->成功返回结果或者失败返回错误信息 

     
    Stream<dynamic> receiveBroadcastStream([ dynamic arguments ])
  • 相关阅读:
    ajax基础
    Linux经常使用命令大全
    基于Proxy思想的Android插件框架
    linux date -d 的一些使用方法
    Mac电脑没有声音,苹果电脑没有声音怎么办
    通用PE u盘装Ghost Win7系统
    通用PE u盘启动盘制作
    Qt for iOS,Qt 与Objective C混合编程
    苹果开发工具:Xcode和Interface Builder
    IOS 使用Interface Builder开发界面入门与技巧
  • 原文地址:https://www.cnblogs.com/yarightok/p/13776943.html
Copyright © 2011-2022 走看看