我有一个名为foo的函数正在监听stdout,我想要的是返回一些我从stdout获得的字符串。这是我的功能;
dynamic foo(process) {
return (
process.stdout.transform(UTF8.decoder).listen((data) {
String s = data.toString();
// print(s);
if (s.contains("received event of")) {
var s1 = s.split(":");
print("${s1[1]}");
return s1[1];
}
}));
}
我想将s1返回给调用函数
答案 0 :(得分:1)
这里有一个回调函数来做技巧
foo(process, callback) {
process.stdout.transform(UTF8.decoder).listen((data) {
String s = data.toString();
if (s.contains("received event of")) {
String message = s.split(":")[1];
callback(message);
}
});
}
在这里我调用方法并打印从流中获取的数据。
foo(process,(data){print(data);})
答案 1 :(得分:0)
这应该做你想要的事情
Future<String> dynamic foo(process) {
return process.stdout.transform(UTF8.decoder).map((data) {
String s = data.toString();
// print(s);
if (s.contains("received event of")) {
var s1 = s.split(":");
print("${s1[1]}");
return s1[1];
} else {
return null;
}
}).where((val) => val != null).first;
}
您的自定义代码会返回有效值或null
。
我将listen
更改为map
,以便能够使用其他流方法。
where
过滤了无效值(null
)并返回第一个非null
值。
foo
方法的调用者需要处理返回的Future
(使用例如async
/ await
)以获取值可用时的值。
像
一样使用它bar() async {
...
var input = await foo(proc);
print(input);
}
答案 2 :(得分:-1)
我认为每个人都想要这个:
import 'dart:io';
import 'dart:convert';
// Using system encoding:
var outputStr = await process.stdout.transform(systemEncoding.decoder).join();
// Using UTF-8 encoding:
var outputStr = await process.stdout.transform(utf8.decoder).join();