代码之家  ›  专栏  ›  技术社区  ›  El Hombre Sin Nombre

带JSON的颤振迭代图

  •  0
  • El Hombre Sin Nombre  · 技术社区  · 7 年前

    我试图用API JSON数据显示一个图表。我做了一些迭代并将结果保存在一个全局变量上,然后将这个变量放在图表中,但变量返回空值,没有任何数据。如果我在foreach中打印列表有数据,但如果我在widget中打印,则为空。我读 this 但代码看起来很不一样,所以我无法理解。

    变量

      List<charts.Series<TimeSeriesSales, DateTime>> seriesList;
      List<TimeSeriesSales> data = [];
    

    获取数据

    final String url = 'URL';
    
    class TimeSeriesSales {
      final DateTime fecha;
      final double valor;
    
      TimeSeriesSales(this.fecha, this.valor);
    }
    
    
     Future<Null> getUserDetails() async {
        final response = await http.get(
          url,
          headers: {
            HttpHeaders.authorizationHeader:
                "HEADER "
          },
        );
        final responseJson = json.decode(response.body);   
          setState(() {
          for (Map user in responseJson) {
              var fecha= new DateTime.fromMillisecondsSinceEpoch(user['fecha']).toLocal();
              data.add(TimeSeriesSales(new DateTime(fecha.year, fecha.month,fecha.day), user['valor']));
              print (data.toString());
          }
        });
      }
    

    初始状态

    void initState() {
        super.initState();
        getUserDetails();
        seriesList = _createSampleData();
        animate = false;
         }
    

    填充时间

     List<charts.Series<TimeSeriesSales, DateTime>> _createSampleData() {
        return [
          new charts.Series<TimeSeriesSales, DateTime>(
            id: 'Sales',
            colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
            domainFn: (TimeSeriesSales valor, _) => valor.fecha,
            measureFn: (TimeSeriesSales valor, _) => valor.valor,
            data: data,
          )
        ];
      }
    }
    

    小装置

     Widget build(BuildContext context) {
        return new Scaffold(
       new Expanded(
              child: new charts.TimeSeriesChart(
                seriesList,
                animate: animate,
                defaultRenderer: new charts.BarRendererConfig<DateTime>(),
                domainAxis: new charts.DateTimeAxisSpec(usingBarRenderer: true),
                defaultInteractions: false,
                behaviors: [
                  new charts.SelectNearest(),
                  new charts.DomainHighlighter()
                ],
              ),
            ),
    
    )
    

    有人知道为什么列表在widget中没有数据吗?有人知道在init上迭代图表的正确方法是什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Richard Heap    7 年前

    在获取和分析数据后,您不会创建序列。呼叫 seriesList = _createSampleData(); 在迭代 responseData 里面 setState .