pd_cooldown 0.2.1 copy "pd_cooldown: ^0.2.1" to clipboard
pd_cooldown: ^0.2.1 copied to clipboard

A professional Flutter debounce and throttle plugin providing complete debounce/throttle solutions with built-in UI components.

example/lib/main.dart

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

import 'package:pd_cooldown/pd_cooldown.dart';

void main() {
  runApp(const MaterialApp(
    title: '节流防抖示例',
    home: MyApp(),
  ));
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String _message = '点击按钮测试防抖节流功能';
  int _counter = 0;
  int _throttleClickCount = 0;
  int _debounceClickCount = 0;

  // 移除平台相关代码,现在是纯Dart包
  late final PDCooldown _cooldown;

  @override
  void initState() {
    super.initState();
    debugPrint('🚀 [示例应用] 初始化开始');
    debugPrint('📦 [插件信息] PD Cooldown Plugin - 防抖节流功能演示');
    initPlatformState();
    _cooldown = PDCooldown.withDefaults(
      cooldownDuration: const Duration(seconds: 3),
    );
    debugPrint('⚙️ [PDCooldown] 核心冷却组件初始化完成,冷却时间: 3秒');
    debugPrint('🎮 [功能说明] 核心功能:防止重复执行,UI组件:节流按钮、防抖按钮');
  }

  // 初始化平台状态(纯Dart包版本)
  Future<void> initPlatformState() async {
    debugPrint('📱 [纯Dart包] PD Cooldown 纯Dart包版本');

    if (!mounted) {
      debugPrint('⚠️ [生命周期] Widget已卸载,跳过状态更新');
      return;
    }

    setState(() {
      _platformVersion = 'Pure Dart Package v0.1.0';
    });
    debugPrint('🔄 [状态更新] 包版本信息已更新到UI');
  }

  Future<void> _handleCooldownAction() async {
    debugPrint('🎯 [冷却测试] 用户点击冷却功能按钮');

    final result = await _cooldown.execute<String>(() async {
      debugPrint('⚡ [业务逻辑] 开始执行异步操作...');
      // 模拟异步操作
      await Future.delayed(const Duration(milliseconds: 500));
      _counter++;
      final resultMsg = '操作成功执行 #$_counter';
      debugPrint('✅ [业务逻辑] 异步操作完成: $resultMsg');
      return resultMsg;
    }, onCooldown: (remaining) {
      final cooldownMsg = '冷却中,剩余时间: ${remaining.inSeconds}秒';
      debugPrint('❄️ [冷却状态] $cooldownMsg');
      setState(() {
        _message = cooldownMsg;
      });
    });

    if (result != null) {
      debugPrint('🎉 [执行结果] 操作成功完成: $result');
      setState(() {
        _message = result;
      });
    } else {
      debugPrint('🚫 [执行结果] 操作被冷却机制阻止');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('PD Cooldown 示例'),
        backgroundColor: Colors.blue,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              '运行平台: $_platformVersion',
              style: Theme.of(context).textTheme.titleMedium,
            ),
            const SizedBox(height: 32),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  children: [
                    Text(
                      '防抖节流核心功能测试',
                      style: Theme.of(context).textTheme.titleLarge,
                    ),
                    const SizedBox(height: 16),
                    Text(
                      _message,
                      style: Theme.of(context).textTheme.bodyLarge,
                      textAlign: TextAlign.center,
                    ),
                    const SizedBox(height: 16),
                    ElevatedButton(
                      onPressed: () {
                        debugPrint('🎯 [用户交互] 用户准备测试核心冷却功能');
                        _handleCooldownAction();
                      },
                      child: const Text('测试冷却功能 (3秒冷却)'),
                    ),
                  ],
                ),
              ),
            ),
            const SizedBox(height: 32),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  children: [
                    Text(
                      '防抖按钮组件测试',
                      style: Theme.of(context).textTheme.titleLarge,
                    ),
                    const SizedBox(height: 16),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        GestureDetector(
                          onTap: () {
                            setState(() {
                              _throttleClickCount++;
                            });
                            final now = DateTime.now();
                            debugPrint(
                                '👆 [节流按钮] 检测到点击 #$_throttleClickCount,时间: ${now.toString().substring(11, 23)}');
                          },
                          child: PDThrottleButton(
                            buttonType: PDButtonType.elevated,
                            debounceDuration: const Duration(seconds: 2),
                            onPressed: () {
                              final now = DateTime.now();
                              debugPrint(
                                  '🔥 [节流按钮] 按钮被点击,时间: ${now.toString().substring(11, 23)},节流时间: 2秒');
                              debugPrint(
                                  '💡 [节流说明] 节流模式:立即执行第一次点击,后续点击在冷却期内被忽略');
                              ScaffoldMessenger.of(context).showSnackBar(
                                SnackBar(
                                  content: Text(
                                      '节流按钮被点击 #$_throttleClickCount - 2秒内再次点击将被忽略'),
                                  duration: const Duration(seconds: 2),
                                ),
                              );
                            },
                            onCooldown: (remaining) {
                              debugPrint(
                                  '🧊 [节流按钮] 冷却中,剩余时间: ${remaining.inMilliseconds}ms');
                            },
                            logger: DefaultCooldownLogger(),
                            child: const Text('节流按钮'),
                          ),
                        ),
                        GestureDetector(
                          onTap: () {
                            setState(() {
                              _debounceClickCount++;
                            });
                            final now = DateTime.now();
                            debugPrint(
                                '👆 [防抖按钮] 检测到点击 #$_debounceClickCount,时间: ${now.toString().substring(11, 23)}');
                          },
                          child: PDDebounceButton(
                            buttonType: PDButtonType.elevated,
                            debounceDuration: const Duration(milliseconds: 800),
                            onPressed: () {
                              final now = DateTime.now();
                              debugPrint(
                                  '⚡ [防抖按钮] 防抖延迟结束,执行按钮操作,时间: ${now.toString().substring(11, 23)}');
                              debugPrint(
                                  '💡 [防抖说明] 防抖模式:延迟执行,连续点击会重置计时器,只执行最后一次');
                              debugPrint(
                                  '📊 [防抖统计] 总点击次数: $_debounceClickCount,实际执行次数: 1');
                              ScaffoldMessenger.of(context).showSnackBar(
                                SnackBar(
                                  content: Text(
                                      '防抖按钮被点击 - 合并了$_debounceClickCount次点击'),
                                  duration: const Duration(seconds: 2),
                                ),
                              );
                              // 重置计数器
                              setState(() {
                                _debounceClickCount = 0;
                              });
                            },
                            logger: DefaultCooldownLogger(),
                            child: const Text('防抖按钮'),
                          ),
                        ),
                      ],
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
0
likes
150
points
20
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A professional Flutter debounce and throttle plugin providing complete debounce/throttle solutions with built-in UI components.

Repository
View/report issues

License

MIT (license)

Dependencies

flutter, synchronized

More

Packages that depend on pd_cooldown