如何从正在dart中侦听某个流的函数返回字符串?

如何从正在dart中侦听某个流的函数返回字符串?,dart,stdout,Dart,Stdout,我有一个名为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")) {

我有一个名为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返回到调用函数

这应该是您想要的

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;
}

这里有一个回调函数来实现这个技巧

 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);})

我认为每个人都希望这样:

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();


我明白你的意思,但以后只返回一次,但只要数据可用,我就返回到调用的函数。嗯,我得到了一个解决方案,我现在正在分享它,顺便说一句,感谢您的响应。请先删除
。首先将返回类型固定为
Stream
,并在调用站点上使用
。请收听(…)
等待(foo(proc)的var输入){…}
获取这个
类“\u Future”没有实例方法“listen”。
听起来好像你没有删除
。首先
对不起,我的返回类型不好,做得很好,谢谢你的修复。老实说,这很难看。这正是Dart通过提供流来避免的
someStream.listen(callback)
允许您以一种通用和可组合的方式使用它,并提供诸如
where
等操作符来处理事件。有关更多详细信息,请参见我答案下面的最后一条评论。
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();