【问题标题】:flutter Using flutter csv package with rootBundleflutter 使用带有 rootBundle 的 flutter csv 包
【发布时间】:2021-05-09 23:37:19
【问题描述】:

我正在尝试从 assets 文件夹中加载一个 csv 文件,该文件夹在使用 csv 包的 YAML 文件中正确设置,但出现此错误。

参数类型“Future”不能分配给参数 type 'String?'.dartargument_type_not_assignable 实例成员 无法在初始化程序中访问“csvFile”。尝试更换 用不同的表达式引用实例成员

我知道 CsvToListConverter 将字符串作为参数而不是 Future<String>.

  final csvFile = rootBundle.loadString('assets/csv_file.txt');
  final csvToLIst = CsvToListConverter(eol: '\n\r', fieldDelimiter: '\t')
  .convert(csvFile);

我能够使用来自 dart:io 的文件读取 csv 文件。但是当我构建应用程序时,它有点失去了 csv 文件的相对路径。我猜这就是使用 rootBundle 的全部意义所在。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    AssetBundle#loadString 返回一个Future<String>,所以你必须await 它:

    final csvFile = await rootBundle.loadString('assets/csv_file.txt');
    final csvToLIst = CsvToListConverter(eol: '\n\r', fieldDelimiter: '\t').convert(csvFile);
    

    请注意,await 只能在 async 环境中调用。你可以阅读更多here

    【讨论】:

      【解决方案2】:

      rootBundle.loadString 返回一个 Future,所以你必须等待它:

      你应该先用 async 包装你的函数,并在将来的返回方法中添加 await

        getWorkDone() async{
          final csvFile = await rootBundle.loadString('assets/csv_file.txt');
          final csvToLIst = CsvToListConverter(eol: '\n\r', fieldDelimiter: '\t')
              .convert(csvFile);
        }
      

      【讨论】:

        猜你喜欢
        • 2019-01-07
        • 1970-01-01
        • 2020-08-18
        • 2019-10-28
        • 2020-03-24
        • 2020-04-01
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        相关资源
        最近更新 更多