【发布时间】:2021-09-10 21:13:20
【问题描述】:
我正在构建一个 Android 独有的 Flutter 插件,该插件将严重依赖其 Android 端的异步任务。为此,我正在尝试构建一个简单的示例,该示例使用 Java 中的 CompletableFutures 以模拟延迟测试这种通信。我用
flutter create --org org.example --template=plugin --platforms=android -a java zcspos
我的示例代码只是延迟回显:
ZcsposPlugin.java
private CompletableFuture<Void> waitAsync(int milliseconds) {
return CompletableFuture.runAsync(() -> {
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) {
switch (call.method) {
case "echo": {
final String value = call.argument("value");
this.waitAsync(1000).thenRunAsync(() -> { // wait 1 second
Log.d(this.TAG, "Echoing '" + value + "'");
result.success(value);
});
break;
}
default:
result.notImplemented();
}
}
zcspos.dart
static Future<String?> echo(String value) async {
return await _channel.invokeMethod<String>('echo', <String, dynamic>{'value': value});
}
main.dart
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Container(
margin: EdgeInsets.all(8),
child: Center(
child: Column(
children: [
RawMaterialButton(
padding: EdgeInsets.all(8),
fillColor: Colors.blue,
highlightColor: Colors.blueAccent,
child: Text(
"ECHO TEST",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
onPressed: () async {
try {
print(await Zcspos.echo("Echo 1"));
print(await Zcspos.echo("Echo 2"));
print(await Zcspos.echo("Echo 3"));
} catch (e) {
print(e.toString());
}
}),
],
),
),
),
),
);
}
输出只有:
Echoing 'Echo 1'
但应该是:
Echoing 'Echo 1'
Echo 1
Echoing 'Echo 2'
Echo 2
Echoing 'Echo 3'
Echo 3
我调试了 Android 代码,它正确地调用了result.success:
我该如何解决这个问题?
【问题讨论】:
标签: android dart flutter-plugin