【问题标题】:how to load csv file in flutter?如何在颤动中加载csv文件?
【发布时间】:2019-09-06 20:16:44
【问题描述】:

我想在我的颤振应用程序中使用 csv 文件,但我有一个例外。请问怎么解决?

my data.csv 

id,symbol,open,high,low,close,volume,exchange,timestamp,date,update_date_time
33668191,C,16.2,16.3042,16.2,16.3042,477600,NYSE,221115600,1977-01-03,8/26/2013 19:35:35
33668192,C,16.3042,16.3542,16.25,16.3542,340800,NYSE,221202000,1977-01-04,8/26/2013 19:35:35
33668670,C,15.3667,15.5208,15.3667,15.4708,76800,NYSE,280731600,1978-11-24,8/26/2013 19:35:36

我在 pubspec.yaml 中添加了资产

资产: - 资产/同义词库En.csv - 资产/数据.csv

List<List<dynamic>> data =[];

loadAsset() async{

  final myData = await  rootBundle.loadString('asset/data.csv');
  print(myData);

}

发生了异常。 FlutterError(无法加载资产: 资产/数据.csv)

【问题讨论】:

  • 不一样我想用rootBundle加载csv文件
  • 该链接中的答案不使用rootBundle吗?
  • 什么剂量意味着我的错误以及如何解决它
  • 不,不是答案

标签: csv flutter


【解决方案1】:

您可以使用包import 'package:csv/csv.dart';
在里面你有一个名为CsvToListConverter()的方法,使用它你可以将你的CSV数据转换成一个漂亮的列表。

import 'package:csv/csv.dart';
...
List<List<dynamic>> rowsAsListOfValues = const CsvToListConverter().convert(data);

数据将位于[[],[],[],[]]

【讨论】:

    【解决方案2】:

    您的代码应该可以正常工作。我已经检查过了,它工作正常。

    这是输出:

    我已尝试复制您的问题,它需要对您的“asset”文件夹的命名约定、pubspec 中 asset/ 的声明做一些事情.yaml 文件,最后在您的代码中final myData = await rootBundle.loadString('asset/data.csv');

    如果您在其中任何一个中拼写错误,将会发生以下情况。

    场景 1:

    创建的文件夹是“assets”

    pubspec.yaml

    assets:
     - assets/
    

    main.dart

    final myData = await rootBundle.loadString("asset/data.csv");
    

    场景 2:

    创建的文件夹是“assets”

    pubspec.yaml

    assets:
     - asset/
    

    main.dart

    final myData = await rootBundle.loadString("assets/data.csv");
    

    在您保存 pubspec.yaml 的那一刻,您将收到如下错误:

    但这仍然是可执行的,如果你运行应用程序,这是输出:

    场景 3:

    创建的文件夹是“资产”

    pubspec.yaml

    assets:
     - assets/
    

    main.dart

    final myData = await rootBundle.loadString("assets/data.csv");
    

    场景 1 和 2 的错误相同:

    由于您遇到错误:

    发生了异常。 FlutterError(无法加载资产: 资产/数据.csv)

    检查您的文件夹,并检查 pubspec.yaml 是否正确命名(“asset”)。

    我建议将其全部设置为“assets”,因为它在 documentation 的示例中定义。

    【讨论】:

      【解决方案3】:

      尝试一个简单的方法是在您的 IDE 上完全停止应用程序,然后再次运行它,而不是使用热重启/重新加载。在我这样做之前,我无法加载我的 CSV 文件。哎呀!

      【讨论】:

        【解决方案4】:

        您是否尝试将数据加载到main() 函数中,您调用runApp() 之前?

        在这种情况下,请确保在尝试读取数据之前调用WidgetsFlutterBinding.ensureInitialized()

        这是一个例子:

        void main() async {
            WidgetsFlutterBinding.ensureInitialized(); // <---- Crucial
            final csvData = await readCsvData();
            runApp(MyApp(csvData));
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多