Flutter计时器管理插件complete_timer的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter计时器管理插件complete_timer的使用

complete_timer 是一个可以配置为一次性或重复触发的计时器插件,支持启动、停止、暂停和取消等操作。本文将详细介绍如何使用 complete_timer 插件,并提供完整的示例代码。

Getting started

添加依赖

首先,在你的 pubspec.yaml 文件中添加 complete_timer 依赖:

dependencies:
  complete_timer: ^1.0.0

然后在需要使用的 Dart 文件中导入 complete_timer

import 'package:complete_timer/complete_timer.dart';

How to use?

创建一个 CompleteTimer 实例,并指定持续时间和回调函数。默认情况下,计时器会自动启动。

final CompleteTimer timer = CompleteTimer(
    duration: Duration(seconds: 5),
    callback: (timer) {
      print('timer finished');
    },
);

Params

以下是 CompleteTimer 的参数说明:

  • duration: 必须是非负的 Duration,表示计时器的持续时间。
  • periodic: 如果设置为 true,则计时器会以指定的时间间隔重复触发回调函数,直到调用 cancel() 方法取消。默认值为 false
  • autoStart: 如果设置为 true,计时器会自动启动,默认值为 true
  • callback: 在给定的持续时间后触发的回调函数。
final CompleteTimer normalTimer = CompleteTimer(
  duration: Duration(seconds: 5),
  periodic: false,
  autoStart: true,
  callback: (timer) {
    print('normal example');
    timer.stop();
    print('normal timer finished after: ${timer.elapsed}');
  },
);

CompleteTimer methods

CompleteTimer 提供了以下方法来控制计时器的行为:

  • start(): 启动计时器。如果 autoStart 设置为 true,则无需调用此方法。如果计时器已经启动,则调用此方法会恢复计时器。
  • stop(): 停止计时器。停止后,elapsedtick 不再增加。
  • cancel(): 取消计时器。取消后,elapsedtick 重置。
  • elapsed: 已经过的时间。
  • tick: 每次计时器事件发生时递增的值。
  • isRunning: 返回计时器是否正在运行。

示例代码

以下是一个完整的示例代码,展示了如何使用 complete_timer 插件:

import 'dart:async';

import 'package:complete_timer/complete_timer.dart';

void main() {
  normalTimerExample();
  periodic();
}

void normalTimerExample() {
  print('start normal timer');

  final CompleteTimer normalTimer = CompleteTimer(
    duration: Duration(seconds: 5),
    periodic: false,
    autoStart: true,
    callback: (timer) {
      print('normal example');
      timer.stop();
      print('normal timer finished after: ${timer.elapsedTime}');
    },
  );

  // After 2 seconds we stop timer and 2 second later we resume it
  Future.delayed(Duration(seconds: 2), () {
    print('stopped normal timer');
    normalTimer.stop();
  });

  Future.delayed(Duration(seconds: 4), () {
    print('resumed normal timer');
    normalTimer.start();
  });
}

void periodic() {
  print('periodic timer started');

  // Creates a periodic timer which fires callback every second
  final CompleteTimer periodicTimer = CompleteTimer(
    duration: Duration(seconds: 1),
    periodic: true,
    autoStart: true,
    callback: (timer) {
      print('periodic example');
      if (timer.tick == 5) {
        timer.stop();
        print('periodic timer finished after: ${timer.elapsedTime}');
        timer.cancel();
      }
    },
  );

  // After 2 seconds we stop timer and 2 second later we resume it
  Future.delayed(Duration(seconds: 2), () {
    print('stopped periodic timer');
    periodicTimer.stop();
  });

  Future.delayed(Duration(seconds: 4), () {
    print('resumed periodic timer');
    periodicTimer.start();
  });
}

以上代码展示了如何创建和控制普通计时器和周期性计时器。你可以根据自己的需求进行修改和扩展。希望这个示例能帮助你更好地理解和使用 complete_timer 插件。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用complete_timer插件来管理计时器的示例代码。complete_timer是一个Flutter插件,用于创建和管理计时器功能。

首先,确保你已经在pubspec.yaml文件中添加了complete_timer依赖:

dependencies:
  flutter:
    sdk: flutter
  complete_timer: ^最新版本号  # 请替换为最新的版本号

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

接下来,是一个简单的Flutter应用示例,展示了如何使用complete_timer插件来创建一个倒计时计时器:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Timer Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TimerScreen(),
    );
  }
}

class TimerScreen extends StatefulWidget {
  @override
  _TimerScreenState createState() => _TimerScreenState();
}

class _TimerScreenState extends State<TimerScreen> with SingleTickerProviderStateMixin {
  late CompleteTimer _timer;
  int _remainingTime = 60;  // 初始时间为60秒
  bool _isRunning = false;

  @override
  void initState() {
    super.initState();
    _timer = CompleteTimer(
      duration: Duration(seconds: _remainingTime),
      onTick: (remaining) {
        setState(() {
          _remainingTime = remaining.inSeconds;
        });
      },
      onComplete: () {
        setState(() {
          _isRunning = false;
          _remainingTime = 0;
        });
        print("Timer completed!");
      },
    );
  }

  @override
  void dispose() {
    _timer.dispose();
    super.dispose();
  }

  void _startTimer() {
    setState(() {
      _isRunning = true;
    });
    _timer.start();
  }

  void _pauseTimer() {
    _timer.pause();
  }

  void _resetTimer() {
    _timer.reset();
    setState(() {
      _isRunning = false;
      _remainingTime = 60;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Timer Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Time remaining: $_remainingTime',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            if (_isRunning)
              ElevatedButton(
                onPressed: _pauseTimer,
                child: Text('Pause'),
              )
            else
              ElevatedButton(
                onPressed: _startTimer,
                child: Text('Start'),
              ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: _resetTimer,
              child: Text('Reset'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们:

  1. 使用CompleteTimer类创建了一个计时器实例。
  2. initState方法中初始化了计时器,并设置了它的持续时间、每次计时器滴答(tick)时的回调和计时器完成时的回调。
  3. 提供了三个按钮:开始/暂停计时器、重置计时器。
  4. 使用setState方法更新UI以反映计时器的当前状态。

请确保你已经正确安装了complete_timer插件,并根据需要调整代码中的初始时间和UI布局。

回到顶部