¿我如何在Flutter中迭代快照?

问题描述

我正在构建一个Flutter应用程序,并且试图基于使用计算器获得的值来创建时间表,因此我使用sqflite创建了一个数据库,并且数据库中的每个元素都有一个ID,一个日期,和一个值。

import 'package:bezier_chart/bezier_chart.dart';
import 'package:Flutter/material.dart';
import 'package:mi_working_app/components/bmi_chart.dart';
import 'package:mi_working_app/services/statistics_bmi_dbhelper.dart';

class StatisticsWidget extends StatefulWidget {
  @override
  _StatisticsWidgetState createState() => _StatisticsWidgetState();
}

class _StatisticsWidgetState extends State<StatisticsWidget> {
  BMIDbHelper bmihelper;

  @override
  void initState() {
    super.initState();
    bmihelper = BMIDbHelper();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        FutureBuilder(
            future: bmihelper.getBMIs(),builder: (BuildContext context,AsyncSnapshot bmisnapshot) {
              if (bmisnapshot.hasData) {
                print(bmisnapshot.data);
                print(bmisnapshot.data.length);
                return Container(
                    child: BMITimeChart(
                  data: data(bmisnapshot),));
              } else {
                return Center(
                  child: CircularProgressIndicator(),);
              }
            }),],);
  }

}

现在要创建图表,我需要从每个元素中提取日期和值,为此,我这样做了:

List<DataPoint<dynamic>> data(rawData) {
    List bmiDataList;

    for (Map m in rawData) {
      bmiDataList.add(DataPoint<DateTime>(
          value: double.parse(rawData.value['value']),xAxis: DateTime.parse(rawData.value['date'])));
    }

    print(bmiDataList);
    return bmiDataList;
  }

现在,我得到“类型'AsyncSnapshot '不是'可迭代'类型的子类型”。我了解错误,无法迭代快照,但是不知道该如何检索数据

解决方法

我相信传递,bmisnapshot.data应该解决您的错误,而不是传递bmisnapshot,

 return Container(
                    child: BMITimeChart(
                  data: data(bmisnapshot.data),),);

如果要使用列表方法,也要始终初始化列表,否则将得到NoSuchMethodError,因为它是在null上调用的;

List bmiDataList = [];

我不确定这是否正确,

    value: double.parse(rawData.value['value']),xAxis: DateTime.parse(rawData.value['date'])));

因为AynscSnapshot没有值属性,并且由于您已经在传递数据, 您应该能够提取出这样的值

    value: double.parse(rawData['value']),xAxis: DateTime.parse(rawData['date'])));
,

您应该使用AsyncSnapshot.data.data来获取地图。

>>> from wand.image import Image
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/wand/api.py",line 151,in <module>
    libraries = load_library()
  File "/usr/local/lib/python3.8/site-packages/wand/api.py",line 140,in load_library
    raise IOError('cannot find library; tried paths: ' + repr(tried_paths))
OSError: cannot find library; tried paths: []

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/usr/local/lib/python3.8/site-packages/wand/image.py",line 18,in <module>
    from . import assertions
  File "/usr/local/lib/python3.8/site-packages/wand/assertions.py",line 155,in <module>
    from .color import Color  # noqa: E402
  File "/usr/local/lib/python3.8/site-packages/wand/color.py",line 10,in <module>
    from .api import library
  File "/usr/local/lib/python3.8/site-packages/wand/api.py",line 175,in <module>
    raise ImportError('MagickWand shared library not found.\n'
ImportError: MagickWand shared library not found.
You probably had not installed ImageMagick library.
Try to install:
  http://docs.wand-py.org/en/latest/guide/install.html