目前,这是我使用 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/