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

  1. 在pubspec.yaml中引入依赖框架。

    #GetX依赖注解
    get: ^4.6.5

  2. 创建一个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();
    }
    }

  3. 在任意想要的地方,直接调用即可。

    SnackBarManager.instance.showSnackBar("蓝牙未开启", "请打开蓝牙");

  4. 效果展示

相关推荐
Lanren的编程日记9 小时前
Flutter鸿蒙应用开发:生物识别(指纹/面容)功能集成实战
flutter·华为·harmonyos
Lanren的编程日记13 小时前
Flutter鸿蒙应用开发:基础UI组件库设计与实现实战
flutter·ui·harmonyos
西西学代码13 小时前
Flutter---波形动画
flutter
于慨16 小时前
flutter基础组件用法
开发语言·javascript·flutter
恋猫de小郭18 小时前
Android CLI ,谷歌为 Android 开发者专研的 AI Agent,提速三倍
android·前端·flutter
火柴就是我19 小时前
flutter pushAndRemoveUntil 的一次小疑惑
flutter
于慨20 小时前
flutter doctor问题解决
flutter
唔6620 小时前
flutter 图片加载类 图片的安全使用
安全·flutter
Nathan2024061621 小时前
Flutter - InheritedWidget
flutter·dart
恋猫de小郭21 小时前
JetBrains Amper 0.10 ,期待它未来替代 Gradle
android·前端·flutter