Flutter定时器管理插件flutter_timer_util的使用

Flutter定时器管理插件flutter_timer_util的使用

本插件是一个用于实现防抖(debounce)、节流(throttle)和重复执行(repeat)功能的定时器工具包。以下是详细的使用说明。


特性

  • 防抖(Debouncing)
  • 节流(Throttling)
  • 重复执行(Repeater)

开始使用

在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter_timer_util: <latest_version>

然后运行以下命令以安装依赖:

flutter pub get

使用示例

1. 防抖(Debouncing)

防抖是一种延迟执行回调的方法,只有在指定时间内没有再次触发时才执行。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TimerExamplePage(),
    );
  }
}

class TimerExamplePage extends StatefulWidget {
  [@override](/user/override)
  _TimerExamplePageState createState() => _TimerExamplePageState();
}

class _TimerExamplePageState extends State<TimerExamplePage> {
  late final debouncing;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 创建一个防抖定时器,间隔为1秒
    debouncing = FlutterTimerUtil.debouncing(
        interval: Duration(seconds: 1));

    // 设置回调方法
    // 当调用结束后,在指定的时间间隔后执行回调
    debouncing.call(() {
      print('print after 1 seconds');
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('防抖示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 模拟用户操作
            print('按钮被点击了');
          },
        ),
      ),
    );
  }
}

2. 节流(Throttling)

节流是限制回调执行频率的一种方式,无论触发多少次,只会在指定时间间隔内执行一次。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TimerExamplePage(),
    );
  }
}

class TimerExamplePage extends StatefulWidget {
  [@override](/user/override)
  _TimerExamplePageState createState() => _TimerExamplePageState();
}

class _TimerExamplePageState extends State<TimerExamplePage> {
  late final throttling;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 创建一个节流定时器,间隔为1秒
    throttling = FlutterTimerUtil.throttling(
        interval: Duration(seconds: 1));

    // 设置回调方法
    // 在指定的时间间隔内,无论触发多少次,只会执行一次
    throttling.call(() {
      print('print once every 1 second');
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('节流示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 模拟用户操作
            print('按钮被点击了');
          },
        ),
      ),
    );
  }
}

3. 重复执行(Repeater)

重复执行可以定期调用某个回调函数。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TimerExamplePage(),
    );
  }
}

class TimerExamplePage extends StatefulWidget {
  [@override](/user/override)
  _TimerExamplePageState createState() => _TimerExamplePageState();
}

class _TimerExamplePageState extends State<TimerExamplePage> {
  late final repeater;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 创建一个重复执行定时器,每2秒执行一次
    repeater = FlutterTimerUtil.repeater(
        interval: Duration(seconds: 2));

    // 设置回调方法
    // 每隔2秒执行一次
    repeater.call(() {
      print('repeat every 2 seconds');
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('重复执行示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 模拟用户操作
            print('按钮被点击了');
          },
        ),
      ),
    );
  }
}

更多关于Flutter定时器管理插件flutter_timer_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter定时器管理插件flutter_timer_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_timer_util 是一个用于管理定时器的 Flutter 插件,它提供了简单易用的 API 来创建、启动、暂停、恢复和取消定时器。这个插件非常适合需要在 Flutter 应用中处理定时任务的场景。

安装

首先,你需要在 pubspec.yaml 文件中添加 flutter_timer_util 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_timer_util: ^1.0.0

然后运行 flutter pub get 来安装依赖。

基本用法

1. 创建定时器

你可以使用 TimerUtil 类来创建和管理定时器。以下是一个简单的例子:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TimerExample(),
    );
  }
}

class TimerExample extends StatefulWidget {
  @override
  _TimerExampleState createState() => _TimerExampleState();
}

class _TimerExampleState extends State<TimerExample> {
  TimerUtil? _timerUtil;
  int _seconds = 0;

  @override
  void initState() {
    super.initState();
    _timerUtil = TimerUtil.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        _seconds++;
      });
    });
  }

  @override
  void dispose() {
    _timerUtil?.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Timer Example')),
      body: Center(
        child: Text('Seconds: $_seconds'),
      ),
    );
  }
}

在这个例子中,我们创建了一个每隔一秒触发一次的定时器,并在每次触发时更新 _seconds 的值。

2. 暂停和恢复定时器

你可以使用 pause()resume() 方法来暂停和恢复定时器:

class _TimerExampleState extends State<TimerExample> {
  TimerUtil? _timerUtil;
  int _seconds = 0;

  @override
  void initState() {
    super.initState();
    _timerUtil = TimerUtil.periodic(Duration(seconds: 1), (timer) {
      setState(() {
        _seconds++;
      });
    });
  }

  void _pauseTimer() {
    _timerUtil?.pause();
  }

  void _resumeTimer() {
    _timerUtil?.resume();
  }

  @override
  void dispose() {
    _timerUtil?.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Timer Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Seconds: $_seconds'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pauseTimer,
              child: Text('Pause'),
            ),
            ElevatedButton(
              onPressed: _resumeTimer,
              child: Text('Resume'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 取消定时器

你可以使用 cancel() 方法来取消定时器:

void _cancelTimer() {
  _timerUtil?.cancel();
}

4. 一次性定时器

如果你只需要一个一次性定时器,可以使用 TimerUtilonce 方法:

TimerUtil.once(Duration(seconds: 5), () {
  print('5 seconds have passed');
});
回到顶部