当前知识库站点已不再维护。请移步新版知识库:https://help.rongcloud.cn/

新版本 onDataReceived 在新版本如何实现

发布时间: 2023-03-14 18:28

回答:

因为 onDataReceived 不属于 SDK 标准功能,所以新版本 SDK 不再提供此功能,开发者如需要使用可以参考旧版本 SDK 实现, 步骤如下:

1. 在 Dart 插件层定义 onDataReceived 方法

```

///收到原生数据的回调

///

///[data] 传递的数据内容

///

/// 如果传送的是push内容 建议在 main.dart 使用

static Function(Map? data)? onDataReceived;

```


2. 在 setMethodCallHandler 中处理channel回调



  static void _addNativeMethodCallHandler() {

    _channel.setMethodCallHandler(_methodCallHandler);

  }


  static Future<dynamic> _methodCallHandler(MethodCall call) async {

    switch (call.method) {

     case "SendDataToFlutterCallBack":

        if (onDataReceived != null) {

          Map? map = call.arguments;

          onDataReceived!(map);

        }

        break;

    }

  }

 ```


 3. ios/android 层调用方法。


 ```


  // 可通过该接口向Flutter传递数据

public void sendDataToFlutter(final Map map) {

    if (map == null) {

        return;

    }

    RCLog.i("sendDataToFlutter start param:" + map.toString());

    mMainHandler.post(new Runnable() {

        @Override

        public void run() {

            mChannel.invokeMethod("SendDataToFlutterCallBack", map);

        }

    });

}


```

```


- (void)sendDataToFlutter:(NSDictionary *)userInfo {

NSString *LOG_TAG =  @"sendDataToFlutter";

[RCLog i:[NSString stringWithFormat:@"%@,start param:%@",LOG_TAG,userInfo]];

[self.channel invokeMethod:@"SendDataToFlutterCallBack" arguments:userInfo];

}

 ```