Flutter计时器功能插件timer_widget的使用

Flutter计时器功能插件timer_widget的使用

特性

  • 计时器小部件可以包裹在任何类型的控件上,并完全自定义。
  • 可以用于任何类型的按钮。
  • 可以创建自定义按钮。
  • 可以用在任何控件上。
  • 可以通过控制器进行管理。

使用

屏幕截图

示例

TimerWidget(
  timeOutInSeconds: 5, // 设置超时时间为5秒
  onPressed: () {}, // 按钮点击事件
  controller: timerController, // 外部控制
  buttonType: ButtonType.outline, // 按钮类型为轮廓按钮
  buttonStyle: ButtonStyle(
    backgroundColor: MaterialStateProperty.all(
      Colors.orangeAccent), // 设置背景颜色为橙色
  ),
  builder: (context, seconds, isCounting) { // 构建函数
    if(isCounting){
      // 当计数时显示的组件
      return const CircularProgressIndicator(); // 显示加载指示器
    }else{
      // 在未点击时显示的组件
      return const Icon(Icons.ads_click); // 显示广告点击图标
    }
  }),
// 通过控制器从其他小部件或函数中处理
TimerWidgetController timerController = TimerWidgetController(); // 创建控制器
timerController.startTimer(); // 开始计时
timerController.stopTimer(); // 停止计时
timerController.isCounting; // 获取当前是否正在计时

示例代码

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '计时器小部件演示',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  TimerWidgetController timerController = TimerWidgetController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('计时器小部件演示')),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          TimerWidget(
            timeOutInSeconds: 5,
            onPressed: () {}, // 或者可以通过外部控制器处理
            controller: timerController, // 外部控制
            buttonType: ButtonType.none, // 自定义控件
            // ButtonType.icon,
            // ButtonType.outline,
            // ButtonType.elavated,
            // buttonStyle: ButtonStyle(
            //   backgroundColor: MaterialStateProperty.all(Colors.orangeAccent)),
            builder: (context, seconds, isCounting) {
              if (isCounting) {
                // 计数时显示的组件
                return const CircularProgressIndicator(); // 加载指示器
              } else {
                // 未点击时显示的组件
                return const Icon(Icons.ads_click); // 广告点击图标
              }
            }),
          Text(
            "示例:从计时器小部件外部或代码逻辑部分调用API",
          ),
          ElevatedButton(
            onPressed: loadApiData,
            child: Text("执行任何未来的函数"),
          ),
          ElevatedButton(
            onPressed: () {
              if (timerController.isCounting) {
                timerController.stopTimer();
              }
            },
            child: Text("检查计时器小部件是否计数然后停止"),
          ),
        ],
      ),
    );
  }

  ///////////// 从API加载数据
  loadApiData() async {
    //-------- 数据
    //-------- 数据
    timerController.startTimer(); // 开始计时
    // 加载数据后
    timerController.stopTimer(); // 停止计时
  }
}

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

1 回复

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


timer_widget 是一个用于 Flutter 的计时器插件,它可以帮助你轻松地在应用中实现计时器功能。以下是如何使用 timer_widget 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  timer_widget: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 timer_widget

import 'package:timer_widget/timer_widget.dart';

3. 使用 TimerWidget

TimerWidget 是一个简单的计时器组件,你可以通过设置 duration 来指定计时器的时长,并通过 onFinished 回调来处理计时器结束时的操作。

以下是一个简单的示例:

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

class TimerExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Timer Widget Example'),
      ),
      body: Center(
        child: TimerWidget(
          duration: Duration(seconds: 60), // 设置计时器时长为60秒
          onFinished: () {
            // 计时器结束时的回调
            print('Timer finished!');
          },
          builder: (BuildContext context, Duration remaining) {
            // 自定义计时器显示样式
            return Text(
              '${remaining.inSeconds} seconds remaining',
              style: TextStyle(fontSize: 24),
            );
          },
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: TimerExample(),
));

4. 自定义计时器显示

TimerWidget 提供了一个 builder 参数,允许你自定义计时器的显示样式。builder 函数接收两个参数:BuildContextDuration,其中 Duration 表示剩余的时长。

在上面的示例中,我们使用 remaining.inSeconds 来显示剩余的秒数。

5. 控制计时器

TimerWidget 还提供了一些方法来控制计时器的启动、暂停和重置:

  • start(): 启动计时器。
  • pause(): 暂停计时器。
  • reset(): 重置计时器。

你可以在需要的地方调用这些方法来控制计时器的行为。

6. 完整示例

以下是一个完整的示例,展示了如何使用 TimerWidget 并控制计时器的启动、暂停和重置:

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

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

class _TimerExampleState extends State<TimerExample> {
  TimerController _timerController = TimerController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Timer Widget Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TimerWidget(
              duration: Duration(seconds: 60),
              onFinished: () {
                print('Timer finished!');
              },
              builder: (BuildContext context, Duration remaining) {
                return Text(
                  '${remaining.inSeconds} seconds remaining',
                  style: TextStyle(fontSize: 24),
                );
              },
              controller: _timerController,
            ),
            SizedBox(height: 20),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(
                  onPressed: () => _timerController.start(),
                  child: Text('Start'),
                ),
                SizedBox(width: 10),
                ElevatedButton(
                  onPressed: () => _timerController.pause(),
                  child: Text('Pause'),
                ),
                SizedBox(width: 10),
                ElevatedButton(
                  onPressed: () => _timerController.reset(),
                  child: Text('Reset'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: TimerExample(),
));
回到顶部