[英]How to fix Flutter stream exiting whenever i try to listen to it
在flutter应用程序中,我试图通过在其上打开流来一次读取一个较大的csv文件。 问题是,当我尝试收听流时,执行仅跳过该代码块,程序结束。
我要打开的文件位于我的资产文件夹中,我已通过编程方式确认在打开流之前该文件确实存在。 更改打开流的文件无济于事,同样的问题仍然存在。 我还尝试按照Darts官方文档提供的不同方法(该代码已注释掉)来更改侦听流的方式,但结果仍然相同。 资产已在pubspec.yaml中声明 。 当我更改代码以将文件读取为String时,程序可以完美运行,但是我想使用流,因为文件太大,以至于创建String对象将花费大量时间和内存。
void trainDigitsStream() async{
List<List<List>> filters = createRandomFilter(4, 4, 1, -1, 1);
List flattened= new List<double>();
File file = new File("assets/digit_train_data.csv");
if(file.existsSync())print("EXISTS!");
Stream<List<int>> stream = file.openRead();
Stream lines = utf8.decoder.bind(stream).transform(LineSplitter());
/*
try{
await for (var line in lines){
print(line);
}
print("file ended");
}catch(e){
print(e);
}
*/
lines.listen((data){//code exits here, execution never reaches next line
String line = data.toString();
List<List> instance = new List<List<int>>();
List x = new List<int>();
int i = 0;
line.split(',').forEach((d){
x.add(int.parse(d));
i++;
if(i == 28){
instance.add(x);
x = new List<int>();
i = 0;
}
});
List<List<List>> kernels = new List<List<List<double>>>();
List<List> pools = new List<List>();
filters.forEach((f){kernels.add(convo.applyFilter(instance, f, 0));});
kernels.forEach((k){pools.add(pool.maxPool(k, 2));});
pools.forEach((p){flattened.addAll(p);});
});
}
没有更多信息很难,如果您可以发布更多信息会更好。
所以我想问题应该是,请检查以下两个步骤。
1.在pubspec.yaml中注册资产文件夹
flutter:
assets:
- assets/digit_train_data.csv
2.您需要使用rootBundle访问此csv文件,请参考文档https://flutter.dev/docs/development/ui/assets-and-images
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
return await rootBundle.loadString('assets/digit_train_data.csv');
}
类似的问题在这里Flutter-从资产读取文本文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.