【发布时间】: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 值。
- 如何让 Flutter 做我想做的事?
- 从本地存储加载 csv 数据是否需要异步?
- 是否有更好的方法可以使用 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 替换为类或输入您希望得到的内容