每当我尝试收听时如何解决Flutter流退出

时间:2019-07-29 03:51:03

标签: flutter dart stream

在flutter应用程序中,我试图通过在其上打开流来一次读取一个较大的csv文件。问题是,当我尝试收听流时,该程序立即终止。没有引发任何错误,但控制台已打印“已退出”。

我要打开的文件位于我的资产文件夹中,并且在打开流之前,我已通过编程方式确认该文件确实存在。更改打开流的文件无济于事,同样的问题仍然存在。我还尝试按照Darts官方文档提供的不同方法(该代码已注释掉)来更改侦听流的方式,但结果仍然相同。

void trainDigits(){
  List<List<List>> filters = createRandomFilter(4, 4, 1, -1, 1);
  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());

  /* alternative method of listening to the stream that also fails
  try{
    await for (String line in lines){
      print(line);
    }
  }catch(e){
    print("problem "+e);
  }
  */
  lines.listen((data){  //this is where the program exits

我希望程序能够侦听流或至少在流失败时抛出错误,但程序只会退出。

1 个答案:

答案 0 :(得分:0)

没有更多信息很难,如果您可以发布更多信息会更好。
所以我想问题应该是,请检查以下两个步骤。
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 - Read text file from assets