【Flutter】graphic图表实现tooltip一段时间后自动隐藏

news2025/1/18 3:28:22

概述

graphic图表中提供了自定义tooltip的事件,可通过selectionsonclear配置手势选项和可识别设备,默认情况下tooltip需要双击隐藏,但这并不符合我们的需求。通过调研发现,若想实现tooltip隔几秒后隐藏,可通过StreamController向chart发送订阅流事件隐藏,这感觉更像是局部刷新
在这里插入图片描述

实现

import 'dart:async';
import 'package:flutter/material.dart';

class ChartWidget extends StatefulWidget {
  const ChartWidget({super.key});

  @override
  State<ChartWidget> createState() => _ChartWidgetState();
}

class _ChartWidgetState extends State<ChartWidget> {
  LineChart? callBackValue;

  //流Stream 控制器
  final StreamController<LineChart?> _streamController = StreamController();

  @override
  void dispose() {
    //销毁
    _streamController.close();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
    //发送消息
    _streamController.add(初始化数据);
  }

  Timer? _timer;
  // tooltip几秒后自动消失
  void _hideTooltip(value) {
    // 如果已经有一个计时器在运行,取消它
    _timer?.cancel();
    // 启动一个新的计时器
    _timer = Timer(const Duration(seconds: 3), () {
      print('3秒后自动消失');
      _streamController.add(value);
    });
  }
  // 自定义tooltip
  List<MarkElement> simpleTooltip(
    Size size,
    Offset anchor,
    Map<int, Tuple> selectedTuples,
  ) {
    _hideTooltip(图表数据);
    // 自定义处理....
  }

  @override
  Widget build(BuildContext context) {
    // //接收消息
    return StreamBuilder<LineChart?>(
      //绑定Stream
      stream: _streamController.stream,
      builder: (BuildContext context, AsyncSnapshot<LineChart?> snapshot) {
        if (snapshot.data == null) {
          return const Center(
            child: CircularProgressIndicator(),
          );
        }
        // 返回chart组件
        return SingleChildScrollView(
            child: Center(
              child: Column(
                children: <Widget>[
                  Container(
                    padding: const EdgeInsets.fromLTRB(20, 40, 20, 5),
                    child: const Text(
                      'Group interactions',
                      style: TextStyle(fontSize: 20),
                    ),
                  ),
                  Container(
                    margin: const EdgeInsets.only(top: 10),
                    width: 450,
                    height: 200,
                    child: Chart(
                      // 手势事件交互流
                      gestureStream: StreamController<GestureEvent>.broadcast(),
                      // 将接收到的数据赋值给图表data
                      data: snapshot.data!,
                      // 其他配置....
                      tooltip: TooltipGuide(
                          renderer: simpleTooltip,
                      ),
                    )
                  ),
                ],
              ),
            ),
          );
      },
    );
  }
}

效果

在这里插入图片描述

溯源

  1. github作者回复issues/64
  2. 作者文章Graphic 开发笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1269729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始学习JavaScript--JavaScript 中 `let` 和 `const` 的区别及最佳实践

在JavaScript中&#xff0c;let 和 const 是两个用于声明变量的关键字。尽管它们看起来很相似&#xff0c;但它们之间有一些重要的区别。本篇博客将深入探讨 let 和 const 的用法、区别&#xff0c;并提供一些最佳实践&#xff0c;以确保在代码中正确使用它们。 let 和 const …

36 - 电商系统表设计优化案例分析

如果在业务架构设计初期&#xff0c;表结构没有设计好&#xff0c;那么后期随着业务以及数据量的增多&#xff0c;系统就很容易出现瓶颈。如果表结构扩展性差&#xff0c;业务耦合度将会越来越高&#xff0c;系统的复杂度也将随之增加。这一讲我将以电商系统中的表结构设计为例…

iOS NSDate的常用API

目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…

网络相关-面试高频

网络 当前的应用系统主要分两大类&#xff0c;一类是C/S&#xff08;Client/Server&#xff09;客户端/服务器架构的&#xff0c;一类是B/S&#xff08;Browser/Server&#xff09;浏览器/服务器架构的[3]&#xff0c;例如&#xff1a;PC上安装的QQ程序是典型的C/S架构中的客户…

C# Onnx 阿里达摩院开源DAMO-YOLO目标检测

效果 模型信息 Inputs ------------------------- name&#xff1a;images tensor&#xff1a;Float[1, 3, 192, 320] --------------------------------------------------------------- Outputs ------------------------- name&#xff1a;output tensor&#xff1a;Float…

人工智能-优化算法之动量法

对于嘈杂的梯度&#xff0c;我们在选择学习率需要格外谨慎。 如果衰减速度太快&#xff0c;收敛就会停滞。 相反&#xff0c;如果太宽松&#xff0c;我们可能无法收敛到最优解。 泄漏平均值 小批量随机梯度下降作为加速计算的手段。 它也有很好的副作用&#xff0c;即平均梯度…

HMM(Hidden Markov Model)详解——语音信号处理学习(三)(选修一)

参考文献&#xff1a; Speech Recognition (Option) - HMM哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 HMM - 6 - 知乎 (zhihu.com) 隐马尔可夫&#xff08;HMM)的解码问题维特比算法 - 知乎 (zhihu.com) 本次省略所有引用论文 目录 一、介绍 二、建模单…

解决uview中uni-popup弹出层不能设置高度问题

开发场景&#xff1a;点击条件筛选按钮&#xff0c;在弹出的popup框中让用户选择条件进行筛选 但是在iphone12/13pro展示是正常&#xff0c;但是切换至其他手机型号就填充满了整个屏幕&#xff0c;需要给这个弹窗设置一个固定的高度 iphone12/13pro与其他型号手机对比 一开始…

关于使用若依,并不会自动分页的解决方式

关于使用若依,并不会自动分页的解决方式 如果只是单纯的使用一次查询list,并不会触发这个bug 例如: 但是我们如果对里面的数据进行调整修改的话就会触发这个bug 例如: 此时可以看到我对数据进行了转换!!!,这时如果超出数据10条,实际我们拿到的永远是10条,具体原因这里就不展…

ora.LISTENER.lsnr状态为Not All Endpoints Registered

客户的监控反馈有个监听无法连接&#xff0c;登录环境检查发现ora.LISTENER.lsnr的状态为Not All Endpoints Registered&#xff0c;如下 [rootdb2 ~]# crsctl status res -t -------------------------------------------------------------------------------- NAME …

什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback? 我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断&#xff0c;其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。 在 JavaScript 中&#xff0c;requestIdleCallback 是一个用于执行回调函…

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…

数据结构day6作业

初次进入len100;if(resuillen)不符合条件,执行resultcompetu_date(arr,--len),从此处开始递归. 直到len0: 此时len0; ---result0; ---return arr[0]1; 上一层len1; ---result1---执行语句return (result%2)?(result arr[len]):((result 1)*arr[len]);得到return 1arr[1]3 …

visionOS空间计算实战开发教程Day 10 照片墙

本例选择了《天空之城》的25张照片&#xff0c;组成5x5的照片墙&#xff09;。首先我们在setupContentEntity方法中构建了一个纹理数组&#xff0c;将这25张照片添加到数组images中。其中封装了setup方法&#xff0c;借助于visionOS对沉浸式空间的支持&#xff0c;我们创建了三…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决&#xff1a;ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错&…

基于asp.net 消防安全宣传网站设计与实现

目 录 1 绪论 1 1.&#xff11;课题背景 1 1.2 目的和意义 1 1.3主要研究内容 1 1.4 组织结构 2 2 可行性分析 3 2.1技术可行性 3 2.2经济可行性 3 2.3操作可行性 3 2.4系统开发环境 4 3 需求分析 7 3.1性能分析 7 3.2业务流程分析 7 3.3数据流程分析 9 4 系统设计 11 4.1系统…

drawio 流程图以图片保存

随笔记录 目录 1. drawio 介绍 2. 绘制流程图以白底图片保存 2.1 流程图原始图​编辑 2.2 修改配置 2.3 流程图以图片保存 2.4 图片保存后效果展示 1. drawio 介绍 是一款非常强大的开源在线的流程图编辑器&#xff0c;支持绘制各种形式的图表&#xff0c;提供了 Web…

Leetcode2336 无限集中的最小数字

题目&#xff1a; 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void addBack(int nu…

[node]Node.js事件

[node]Node.js事件 EventEmitter属性方法error 事件 实例应用简单实例onceremoveListenerlistenerCounterror 事件完整实例 继承 事件循环事件驱动程序 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 Node.js 里面的许多对象都会分发事件&#xff1a;一个 n…