颤振CSV只返回Future的实例而不是值

2022-01-30 00:57:58 标签 androidfluttercsvdart

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

在下面的代码中,getData() async{}方法在flutter运行打印行(await data[1][1])时打印存储在单元格[1][1]的正确值;但是return下面的return行等待数据[1][1];只返回Future<dynamic>'的实例而不是值。

总之,它打印csv值,但不返回csv值。

我怎么能让它做我想做的事呢?

从本地存储加载csv数据是否需要异步?

有没有更好的方法加载数据到颤振使用CSV?(我用Python构建了这个应用程序,这是非常容易完成的,但我不得不切换到颤振)

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类型。例如,因为data is a List<List<dynamic>> you're returning "dynamic" in getData():

是一个List<List<dynamic>> you'r你在getData()中返回"dynamic":

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
}
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码