添加数据后如何自动更新条形图?

问题描述

我想在用户提交新数据时自动更新条形图。我不想使用Refreshindicator,因为在这种情况下,用户应拉动直到数据更新。我想更新条形图而无需上拉,我想在用户添加新数据时自动使它。请找到我的以下代码

Widget build(BuildContext context) {
    print('build() Chart');
    return AspectRatio(
      aspectRatio: 1,child: Card(
        elevation: 6,margin: EdgeInsets.all(10),child: Container(
          padding: EdgeInsets.all(8),child: Stack(
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(10),child: Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,mainAxisAlignment: MainAxisAlignment.start,mainAxisSize: MainAxisSize.max,children: <Widget>[
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 8.0),child: BarChart(
                          isPlaying ? randomData() : mainBarData(),swapAnimationDuration: animDuration,),const SizedBox(
                      height: 12,],Padding(
                padding: const EdgeInsets.all(8.0),child: Align(
                  alignment: Alignment.topRight,child: IconButton(
                    icon: Icon(
                      isPlaying ? Icons.pause : Icons.play_arrow,color: const Color(0xff0f4a3c),onpressed: () {
                      setState(() {
                        isPlaying = !isPlaying;
                        if (isPlaying) {
                          refreshState();
                        }
                      });
                    },)
            ],);
  }  

List<BarChartGroupData> showingGroups() => List.generate(7,(i) {
        print("Switchhhhhh");
        switch (i) {
          case 0:
            return makeGroupData(0,total_Monday,isTouched: i == touchedindex);
          case 1:
            return makeGroupData(1,total_Tuesday,isTouched: i == touchedindex);
          case 2:
            return makeGroupData(2,total_Wednesday,isTouched: i == touchedindex);
          case 3:
            return makeGroupData(3,total_Thursday,isTouched: i == touchedindex);
          case 4:
            return makeGroupData(4,total_Friday,isTouched: i == touchedindex);
          case 5:
            return makeGroupData(5,total_Saturday,isTouched: i == touchedindex);
          case 6:
            return makeGroupData(6,total_Sunday,isTouched: i == touchedindex);
          default:
            return null;
        }
      });

解决方法

没有所有代码,很难说出某些函数的功能以及使用无状态小部件还是有状态小部件,但是我猜测#include <iostream> extern char **environ; void dump_env() { for(char **var = environ; *var; var++) { std::cout << *var << std::endl; } } int main(int argc,char **argv) { dump_env(); return 0; } randomData会生成您的条形图图。

要实现所需的动态行为,您需要使基础数据保持状态。这可以通过多种方法来实现,但是最简单的内置方法是使用StatefulWidget更改数据源。然后,确保用于从基础数据生成图形的函数在build方法中,以便在基础数据发生更改时更新这些函数的结果。

Here is an example of a StatefulWidget in action,而不是用于将项目添加到列表。这些概念应适用于您的情况。

相关:how to make dynamic chart in flutter?