Flutter定时构建任务插件timed_builder的使用
Flutter定时构建任务插件timed_builder的使用
timed_builder
是一个用于在指定时间、周期性或动态生成的时间事件上重新构建小部件的 Flutter 插件。它适用于以下场景:
- 显示某个事件发生以来或即将发生的时间;
- 模型频繁更新但希望限制 UI 更新频率;
- 显示当前日期或时间;
- 小部件的表示依赖于特定的时间事件。
下图展示了 timed_builder
的示例效果:
示例代码
周期性重建
以下示例展示如何每秒更新一次时间显示:
import 'package:timer_builder/timer_builder.dart';
class ClockWidget extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return TimerBuilder.periodic(Duration(seconds: 1),
builder: (context) {
return Text("${DateTime.now()}"); // 显示当前时间
}
);
}
}
按计划重建
以下示例展示如何根据指定的开始时间和结束时间动态更新状态:
import 'package:timer_builder/timer_builder.dart';
class StatusIndicator extends StatelessWidget {
final DateTime startTime;
final DateTime endTime;
StatusIndicator(this.startTime, this.endTime);
[@override](/user/override)
Widget build(BuildContext context) {
return TimerBuilder.scheduled([startTime, endTime],
builder: (context) {
final now = DateTime.now();
final started = now.compareTo(startTime) >= 0;
final ended = now.compareTo(endTime) >= 0;
return Text(started ? ended ? "Ended": "Started": "Not Started");
}
);
}
}
完整示例
以下是一个完整的示例,展示如何使用 timed_builder
来创建一个倒计时功能,并在倒计时结束后显示提醒信息:
import 'package:flutter/material.dart';
import 'package:timed_builder/timed_builder.dart';
void main() {
runApp(SampleApp());
}
class SampleApp extends StatefulWidget {
[@override](/user/override)
State<StatefulWidget> createState() {
return SampleAppState();
}
}
class SampleAppState extends State<SampleApp> {
late DateTime alert;
[@override](/user/override)
void initState() {
super.initState();
alert = DateTime.now().add(Duration(seconds: 10)); // 设置倒计时时间为10秒后
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Sample App'),
),
body: TimedBuilder.scheduled([alert], builder: (context) {
// 当倒计时时间到达时触发此函数
var now = DateTime.now();
var reached = now.compareTo(alert) >= 0;
final textStyle = Theme.of(context).textTheme.headline6;
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Icon(
reached ? Icons.alarm_on : Icons.alarm,
color: reached ? Colors.red : Colors.green,
size: 48,
),
!reached
? TimedBuilder.periodic(Duration(seconds: 1), // 每秒更新剩余时间
alignment: Duration.zero, builder: (context) {
var now = DateTime.now();
var remaining = alert.difference(now); // 计算剩余时间
return Text(
formatDuration(remaining),
style: textStyle,
);
})
: Text("Alert", style: textStyle), // 倒计时结束后显示提醒
ElevatedButton(
child: Text("Reset"), // 重置按钮
onPressed: () {
setState(() {
alert = DateTime.now().add(Duration(seconds: 10)); // 重置倒计时时间为10秒后
});
},
),
],
),
);
}),
),
theme: ThemeData(backgroundColor: Colors.white),
);
}
}
String formatDuration(Duration d) {
String f(int n) {
return n.toString().padLeft(2, '0'); // 格式化分钟和秒为两位数
}
// 向上取整到最近的一秒
d += Duration(microseconds: 999999);
return "${f(d.inMinutes)}:${f(d.inSeconds % 60)}"; // 返回格式为 MM:SS
}
更多关于Flutter定时构建任务插件timed_builder的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter定时构建任务插件timed_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
timed_builder
是一个 Flutter 插件,它允许你在指定的时间间隔内自动重建 widget。这对于需要在特定时间间隔内更新 UI 的场景非常有用,例如显示实时数据、倒计时、轮播图等。
安装 timed_builder
插件
首先,你需要在 pubspec.yaml
文件中添加 timed_builder
插件的依赖:
dependencies:
flutter:
sdk: flutter
timed_builder: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 timed_builder
插件
timed_builder
提供了一个 TimedBuilder
widget,你可以在你的应用中使用它来自动重建 widget。
基本用法
以下是一个简单的示例,展示了如何使用 TimedBuilder
每秒钟更新一次 UI:
import 'package:flutter/material.dart';
import 'package:timed_builder/timed_builder.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Timed Builder Example'),
),
body: Center(
child: TimedBuilder(
duration: Duration(seconds: 1),
builder: (context) {
return Text(
'Current Time: ${DateTime.now().toString()}',
style: TextStyle(fontSize: 20),
);
},
),
),
),
);
}
}
参数说明
duration
: 指定时间间隔,表示每隔多长时间重建一次 widget。builder
: 一个回调函数,返回需要重建的 widget。该函数会在每次时间间隔到达时被调用。onTick
(可选): 每次时间间隔到达时执行的回调函数。alignment
(可选): 控制 widget 的对齐方式。
高级用法
你可以结合 TimedBuilder
和其他 Flutter widget 来实现更复杂的功能。例如,你可以使用 TimedBuilder
来创建一个简单的倒计时器:
class CountdownTimer extends StatefulWidget {
[@override](/user/override)
_CountdownTimerState createState() => _CountdownTimerState();
}
class _CountdownTimerState extends State<CountdownTimer> {
int _secondsRemaining = 60;
[@override](/user/override)
Widget build(BuildContext context) {
return Center(
child: TimedBuilder(
duration: Duration(seconds: 1),
builder: (context) {
if (_secondsRemaining > 0) {
_secondsRemaining--;
}
return Text(
'Time Remaining: $_secondsRemaining seconds',
style: TextStyle(fontSize: 20),
);
},
),
);
}
}