簡體   English   中英

¿如何在 Flutter 中迭代快照?

[英]¿How can I iterate a snapshot in 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<List>'不是'Iterable'類型的子類型”。 我理解錯誤,我無法迭代快照,但我不知道我還能如何檢索數據

我相信通過, 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 屬性,並且由於您已經傳入數據,因此您應該能夠像這樣提取值

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

您應該使用 AsyncSnapshot.data.data 來獲取地圖。

 if (bmisnapshot.hasData) { print(bmisnapshot.data); print(bmisnapshot.data.length); return Container( child: BMITimeChart( data: data(bmisnapshot.data.data), ));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM