【问题标题】:Flutter CSV does only returns an instance of Future and not the valueFlutter CSV 仅返回 Future 的实例而不是值
【发布时间】:2021-09-20 05:43:31
【问题描述】:

我正在构建一个语言应用程序,我的所有课程资料都以 CSV 格式存储在 assets 文件夹中。我试图让颤动将数据从 CSV 单元格加载到应用程序中,但颤动只返回未来的一个实例,而不是存储在 CSV 中的值

从下面的代码中,在getData() async {} 方法中,当颤动运行print(await data[1][1]); 行时,在cell [1][1] 方法中打印存储的正确值,但return await data[1][1]; 下方的返回行仅返回Instance of Future<dynamic>' 而不是值。

总而言之,它正在打印 csv 值,但不返回 csv 值。

  1. 如何让 Flutter 做我想做的事?
  2. 从本地存储加载 csv 数据是否需要异步?
  3. 是否有更好的方法可以使用 CSV 将数据加载到 Flutter 中? (我在 python 中使用 kivy 构建了这个精确的应用程序,这很容易完成,但我不得不切换到 Flutter)

import 'package:csv/csv.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

// ignore: must_be_immutable
class ClassContent extends StatelessWidget {
  ClassContent();

  List<List<dynamic>> data = [];
  loadAsset() async {
    final myData = await rootBundle.loadString("assets/class01.csv");
    List<List<dynamic>> csvTable = CsvToListConverter().convert(myData);
    data = csvTable;
  }

  getData() async {
    await loadAsset();
    print(await data[1][1]); // PRINTS THE CORRECT VALUE STORED IN THE CSV
    return await data[1][1]; // DOES NOT RETURN THE VALUE
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Phonica"), elevation: 0),
      body: ListView(children: [
        for (var i = 0; i < 5; i++) ListTile(title: Text(getData().toString()))
      ]),
    );
  }
}

【问题讨论】:

  • 但你并没有告诉 getData() 返回任何东西......你需要指定类型。如果您不指定,则假定为 void。
  • 如何以及在哪里指定类型?我来自 python,所以这一切对我来说都是新的。
  • 这里是 Dart 的完整教程:dart.dev/guides/language/language-tour 但就像任何其他 OOP 语言(类似于 C++、Java 等)一样,它将类似于 String getData() 异步或将 String 替换为类或输入您希望得到的内容

标签: android flutter csv dart


【解决方案1】:

Dart 中的默认返回类型是“void”。您的异步函数需要返回一个类型的 Future。例如,因为 dataList&lt;List&lt;dynamic&gt;&gt;,所以您在 getData() 中返回“动态”:

Future<dynamic> getData() async {
    await loadAsset(); //should return Future<void>
    print(data[1][1]); //no await here because List lookup isn't async
    return data[1][1]; //no await here either
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2020-09-11
    • 2023-02-11
    • 1970-01-01
    相关资源
    最近更新 更多