当前位置: 首页 > article >正文

Flutter中Get.snackbar避免重复显示的实现

  1. 在pubspec.yaml中引入依赖框架。
  #GetX依赖注解
  get: ^4.6.5
  1. 创建一个SnackBarManager管理类去管理每个提示框。
import 'package:get/get.dart';
import 'package:flutter/material.dart';

class SnackBarManager {
  factory SnackBarManager() => instance;

  static final SnackBarManager instance = SnackBarManager._internal();

  SnackBarManager._internal();


  String _lastMessage = '';

  int _lastDuration = 0;

  int _lastTime = 0;
  
  void showSnackBar(String title, String message, {Color? backgroundColor, Duration? duration}) {
    var currentTime = DateTime.now().millisecondsSinceEpoch;
    // 相同消息持续时间内重复提交时,返回
    if (currentTime - _lastTime < _lastDuration * 1000 && _lastMessage == message) {
      return;
    }

    dismissSnackBar();

    Get.snackbar(
      title,
      message,
      backgroundColor: backgroundColor ?? Colors.black12,
      duration: duration ?? Duration(seconds: 2), // 提示框持续时间
      animationDuration: Duration(milliseconds: 0), // 过渡动画的时间,这里设置为0是为了在使用Get.dialog时避免关闭冲突
    );

    _lastDuration = duration?.inSeconds ?? 2;
    _lastTime = DateTime.now().millisecondsSinceEpoch;
    _lastMessage = message;
  }

  void dismissSnackBar() {
    Get.closeCurrentSnackbar();
  }
}

  1. 在任意想要的地方,直接调用即可。
SnackBarManager.instance.showSnackBar("蓝牙未开启", "请打开蓝牙");
  1. 效果展示
    在这里插入图片描述

http://www.kler.cn/a/500805.html

相关文章:

  • 51单片机 AT24C02(I2C总线)
  • WPF系列八:图形控件Path
  • Gitlab-Runner配置
  • ModbusTCP转CCLINKIE在机器人中的革命性应用!
  • ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders论文解读
  • SUTD:偏好优化提升文本到音频效果
  • 理解 SQL 中NULL值对IN操作符的影响
  • 蓝桥杯历届真题 # 封闭图形个数(C++,Java)
  • Win32汇编学习笔记10.OD插件
  • Vue.js组件开发-如何使用day.js、luxon或date-fns处理日期时间
  • 【经管数据】ZF数字采购采购明细数据(2015.3-2024.3)
  • Mybatis——Mybatis开发经验总结
  • Vue 常用指令详解(附代码实例)
  • C++(10)—类和对象(上) ③this指针的详解
  • RAG技术:是将知识库的文档和问题共同输入到LLM中
  • 多媒体技术学习笔记
  • 饭搭难点亮点
  • 25/1/12 算法笔记 剖析Yolov8底层逻辑
  • 【2024年华为OD机试】(C卷,100分)- 单词加密(Java JS PythonC/C++)
  • 【学习笔记】理解深度学习的基础:机器学习
  • webpack打包要义
  • 什么是MVCC