首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在颤振TimeSeriesChart上显示数据值

在颤振TimeSeriesChart上显示数据值
EN

Stack Overflow用户
提问于 2022-04-15 12:07:02
回答 2查看 141关注 0票数 0

我想显示图表中选定点的值。

多亏了这个答案here,我已经完成了90%的工作。

代码语言:javascript
复制
class GraphEvolution extends StatelessWidget {
  const GraphEvolution ({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Graph')),
        body: BlocBuilder<DataBloc, DataState>(
          builder: (context, state) {
            return Padding(
              padding: const EdgeInsets.all(10),
              child: AspectRatio(
                aspectRatio: 1,
                child: Container(
                  padding: const EdgeInsets.all(10),
                  child: charts.TimeSeriesChart(
                    state.series!,
                    animate: false,
                    defaultRenderer:
                        new charts.LineRendererConfig(includePoints: true),
                    behaviors: [
                      charts.LinePointHighlighter(
                        ////////////////////// notice ////////////////////////////
                        symbolRenderer: TextSymbolRenderer(() => 'test'),
                        ////////////////////// notice ////////////////////////////
                      ),
                    ],
                    dateTimeFactory: const charts.LocalDateTimeFactory(),
                    domainAxis: charts.DateTimeAxisSpec(
                      tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec(
                        day: charts.TimeFormatterSpec(
                          format: 'dd',
                          transitionFormat: 'dd MMM',
                      ),
                    ),
                  ),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

因此,现在我可以在单击图表时显示文本,但我想不出如何检索所选点的

我应该通过什么来改变() => 'test'以显示实际值?

以下是该系列的模型:

代码语言:javascript
复制
class DataSeries {
  final DateTime date;
  final double value;

  DataSeries(
      {required this.date, required this.value,});
}

希望我的问题足够清楚,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-19 10:44:52

所以我终于展示了我想要的。

我已经更改了我的TextSymbolRenderer类:转换成字符串(值和日期)是静态的,而不是函数。

关键是将selectionModels: []添加到TimeSerieChart中,并在其中设置值和日期。

下面是我的代码,如果它对未来的任何人有帮助的话:

代码语言:javascript
复制
class DataEvolution extends StatelessWidget {
      const DataEvolution({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Graph')),
          body: BlocBuilder<DataBloc, DataState>(
            builder: (context, state) {
              return Padding(
                padding: const EdgeInsets.all(10),
                child: AspectRatio(
                  aspectRatio: 1,
                  child: Container(
                    padding: const EdgeInsets.all(10),
                    child: charts.TimeSeriesChart(
                      state.series!,
                      animate: false,
                      defaultRenderer:
                          new charts.LineRendererConfig(includePoints: true),//////////////////// NOTICE CHANGE ////////////////////
                      selectionModels: [
                        SelectionModelConfig(
                            changedListener: (SelectionModel model) {
                          if (model.hasDatumSelection) {
                            final value = model.selectedSeries[0]
                                .measureFn(model.selectedDatum[0].index);
                            final DateTime datetime = model.selectedSeries[0]
                                .domainFn(model.selectedDatum[0].index);
                            var day = datetime.day.toInt() < 10
                                ? "0${datetime.day}"
                                : "${datetime.day}";
                            var month = datetime.month.toInt() < 10
                                ? "0${datetime.month}"
                                : "${datetime.month}";
                            TextSymbolRenderer.value = value.toString();
                            TextSymbolRenderer.date =
                                "$day/$month/${datetime.year}";
                          }
                        })
                      ]///////////////////// NOTICE CHANGE //////////////////,
                      behaviors: [
                        charts.LinePointHighlighter(
                          ////////////////////// NOTICE CHANGE ////////////////////////////
                          symbolRenderer: TextSymbolRenderer(),
                          ////////////////////// NOTICE CHANGE ////////////////////////////
                        ),
                      ],
                      dateTimeFactory: const charts.LocalDateTimeFactory(),
                      domainAxis: charts.DateTimeAxisSpec(
                        tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec(
                          day: charts.TimeFormatterSpec(
                            format: 'dd',
                            transitionFormat: 'dd MMM',
                          ),
                        ),
                      ),
                    ),
                  ),
                ),
              );
            },
          ),
        );
      }
    }
票数 0
EN

Stack Overflow用户

发布于 2022-04-15 19:24:21

用GestureDeteector Widget包装容器,它具有onTap函数。

onTap(){}函数中编写您的功能

通过使用该方法,可以检索所选点的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71883846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档