c++ - Flutter 的 invokeMethod 上有没有异步等待 C++ 数据的解决方案?

标签 c++ flutter dart

目前,这是我使用 Flutter 从 C++ 中读取的方式:

final Uint8List result = await platform.invokeMethod(Common.MESSAGE_METHOD, {"message": buffer});
Kotlin 是这样处理的:
    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
        if (call.method == MESSAGE_METHOD) {
            val message: ByteArray? = call.argument<ByteArray>("message")
            //... //response = Read something FROM C++
            result.success(response)
由于这发生在主线程中,如果我花太多时间来回答,我会使 Flutter 的 UI 变慢。
是否有以异步方式获取 C++ 数据的解决方案?
我知道 Flutter 支持事件 channel 将数据从 C++ 发送回 Flutter。但是如果只是在 Flutter 端请求数据并等待它到达 Future 呢,这样我就可以在 FutureBuilder 里面有很多小部件了。准备好后会解决什么问题?

最佳答案

希望这会奏效

import 'dart:async';

Future<Uint8List> fetchData(buffer) async {
  
  final Uint8List result = await platform.invokeMethod(Common.MESSAGE_METHOD, {"message": buffer});
    
  return result;
}
就这样称呼它
fetchData(buffer).then((result) => {
    print(result)
}).catchError(print);
证明它的工作原理:
import 'dart:async';

Future<String> fetchUserOrder() async {
      
  await Future.delayed(Duration(seconds: 5));
    
  return 'Callback!';
}

Future<void> main() async {
    
  fetchUserOrder().then((result) => {
    print(result)
  }).catchError(print);
  
  
  while(true){
    print('main_thread_running');
    await Future.delayed(Duration(seconds: 1));
  }
  
}
输出:
main_thread_running
main_thread_running
main_thread_running
main_thread_running
main_thread_running
Callback!
main_thread_running
main_thread_running
...

关于c++ - Flutter 的 invokeMethod 上有没有异步等待 C++ 数据的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67038680/

相关文章:

c++ - 我应该在 C++ 中使用 int 还是 long?

c++ - Windows 上的 Emacs 标签/导航?

dart - 使用 BLoC 处理导航的正确方法

dart - 如何简单地同步获取 url 主体作为字符串

flutter - 在 Flutter 中重叠 SliverList 子项

c++ - 如何在 C++ 中通过引用传递 "literal"整数(新手)

c++ - 在 C++ 中初始化模板时将函数传递给模板对象

android - Flutter 将 Uint8List 传递给 iOS Objective-c

dart - Flutter Globals 失去了值(value)

firebase - 在Flutter中从Firestore检索和转换单个文档