如何使用 dart/flutter 中的文件流?

how do I work with file streams in dart/flutter?

我是 dart/flutter 编程新手。我一直在尝试分析文件的内容和 return 结果,但我做不到。该代码在 main 函数中实际上可以工作,但是一旦我将其取出,它就不再工作了。我已经阅读了关于 futures、async、await 和 streams 的 dart 教程以及观看了 YouTube 视频,但仍然无法解决问题。我相信我的问题围绕着这些概念。这是我的代码:

Future<String> r(String name) async {
  var f = File(name);
  var lines = f.readAsLines();

  await lines
      .then((line) => line.forEach((element) {
            if (element.contains(RegExp(r'^hello'))) {
              return element;
            }
          }))
      .onError((error, stackTrace) => 'An error occured');
}

我遇到了 2 个错误:

  1. 函数名称 'r' 有下划线:
The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type.
Try adding either a return or a throw statement at the end.
  1. 变量 'element' 有下划线:
The return type 'String' isn't a 'void', as required by the closure's context.

谢谢。

您的第一个错误是“无论发生什么,您都必须 return 一个字符串”

你的第二个错误表明你正试图 return void 函数中的字符串,如你所见 List。 Foreach 是一个 void 函数,你不能只 return 里面的东西,因为 return 语句与最接近的 Function

相匹配

所以我重写了你的代码如下

Future<String> r(String name) async {
  try {
    var f = File(name);
    var lines = await f.readAsLines();
    for (var element in lines)
      if (element.contains(RegExp(r'^hello'))) {
        return element;
      }
    return "not found";
  } catch (e) {
    return 'An error occurred: $e';
  }
}

由于您使用的是 File 和 File.readAsLines 我认为最好将所有内容都包装在 try catch 块中。