Flutter CSV只返回Future的实例,而不返回值



我正在构建一个语言应用程序,我有我所有的类材料存储在CSVs在资产文件夹。我试图得到颤振加载数据从CSV单元到应用程序,但颤振只是返回未来的一个实例,而不是存储在CSV

的值从下面的代码来看,在getData() async {}方法中,当flutter运行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?(我正在用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()))
]),
);
}
}

Dart的默认返回类型为" void ";你的异步函数需要返回一个类型的Future。例如,因为dataList<List<dynamic>>,所以返回"动态";在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
}

最新更新