Это должно делать то, что вы хотите
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
(используя, например, * 1014).* / await
) чтобы получить значение, когда оно станет доступным.
Используйте его как
bar() async {
...
var input = await foo(proc);
print(input);
}