如何使用 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 个错误:
- 函数名称 '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.
- 变量 '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 块中。
我是 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 个错误:
- 函数名称 '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.
- 变量 '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 块中。