需要帮助,每x秒更新一次波动中的图表数据

时间:2019-08-01 14:03:12

标签: flutter

因此,我正在使用Sparkline库进行抖动来创建折线图,当我使用静态列表Eg时,它可以工作。 ([0,10,20,20,30])。但是我想做到这一点,以便每说10秒就会增加一个值,现在可以是任何东西,但是以后我想从firebase中提取该值。

我已经看过其他人尝试多次运行函数的其他示例,但是它不起作用。我知道我需要重新绘制小部件,但是我认为我做的不正确,或者我遗漏了一些东西。

class BikeState extends State<BikeScreen> {
  Timer timer;
  List<double> speedList = new List();
  Sparkline speedChart1 = Sparkline(data: [0],);


void updateChart(Timer timer){
  speedChart1 = Sparkline(data: speedList,);
  speedList.add(10);
  speedChart1 = Sparkline(data: speedList,);
}

@override
void initState() {
  super.initState();
  timer = Timer.periodic(Duration(seconds: 15), updateChart);
}


@override
void dispose() {
  timer?.cancel();
  super.dispose();
}

运行它时发生的所有事情就是,我得到的图形只有在声明它时就将值传递给它,而没有任何改变。

1 个答案:

答案 0 :(得分:0)

Flutter不会自行为您重新绘制或重建任何小部件。在您的情况下,您已经有一个有状态的小部件,这是正确的方法,但是您还需要告诉flutter您的状态已更改。这是通过使用setState这样的方法完成的:

void updateChart(Timer timer) {
  setState(() {
    speedChart1 = Sparkline(data: speedList,);
    speedList.add(10);
    speedChart1 = Sparkline(data: speedList,);
  });
}

另外,根据您的build方法的外观,我认为您应该从状态中删除Sparkline窗口小部件,并纯粹在构建过程中使用它,如下所示:

class BikeState extends State<BikeScreen> {
  Timer timer;
  List<double> speedList = new List();


  void updateChart(Timer timer){
    setState(() {
      speedList.add(10);
    });
  }

  @override
  void initState() {
    super.initState();
    timer = Timer.periodic(Duration(seconds: 15), updateChart);
  }

  @override
  void dipose() {
    timer?.dipose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Sparkline(data: speedList);
  }
}