倒计时计时器
一个简单的 Flutter 倒计时计时器小部件。从结束时间戳倒计时,在倒计时结束后触发一个事件。
安装
将此添加到您的包的pubspec.yaml文件中
dependencies:
flutter_countdown_timer: ^4.1.0
安装它
$ flutter pub get
倒计时计时器
| 名称 | 描述 |
|---|---|
| endWidget | 倒计时结束时显示的窗口小部件 |
| widgetBuilder | Widget Function(BuildContext context, CurrentRemainingTime time) |
| 控制器 | CountdownTimer 开始和处置控制器 |
| endTime | 倒计时结束时间戳 |
| onEnd | 倒计时结束事件 |
| 文本样式 | 文本颜色 |
CountdownTimerController
| 名称 | 描述 |
|---|---|
| endTime | 倒计时结束时间戳 |
| onEnd | 倒计时结束事件 |
示例
易于使用
int endTime = DateTime.now().millisecondsSinceEpoch + 1000 * 30;
...
CountdownTimer(
endTime: endTime,
),
在结束时执行事件。
int endTime = DateTime.now().millisecondsSinceEpoch + 1000 * 30;
void onEnd() {
print('onEnd');
}
...
CountdownTimer(
endTime: endTime,
onEnd: onEnd,
),
使用控制器提前结束倒计时。
CountdownTimerController controller;
int endTime = DateTime.now().millisecondsSinceEpoch + 1000 * 30;
@override
void initState() {
super.initState();
controller = CountdownTimerController(endTime: endTime, onEnd: onEnd);
}
void onEnd() {
print('onEnd');
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
CountdownTimer(
controller: controller,
onEnd: onEnd,
endTime: endTime,
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.stop),
onPressed: () {
onEnd();
controller.disposeTimer();
},
),
);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
自定义样式。
int endTime = DateTime.now().millisecondsSinceEpoch + 1000 * 30;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
CountdownTimer(
endTime: endTime,
widgetBuilder: (_, CurrentRemainingTime time) {
if (time == null) {
return Text('Game over');
}
return Text(
'days: [ ${time.days} ], hours: [ ${time.hours} ], min: [ ${time.min} ], sec: [ ${time.sec} ]');
},
),
),
);
}
使用毫秒动画
class _CountdownTimerPageState extends State<CountdownTimerPage>
with SingleTickerProviderStateMixin {
late CountdownTimerController controller;
int endTime = DateTime.now().millisecondsSinceEpoch +
Duration(seconds: 30).inMilliseconds;
@override
void initState() {
super.initState();
controller =
CountdownTimerController(endTime: endTime, onEnd: onEnd, vsync: this);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
CountdownTimer(
controller: controller,
widgetBuilder: (BuildContext context, CurrentRemainingTime? time) {
if (time == null) {
return Text('Game over');
}
List<Widget> list = [];
if (time.sec != null) {
list.add(Row(
children: <Widget>[
Icon(Icons.sentiment_very_satisfied),
Text(time.sec.toString()),
],
));
}
if (time.milliseconds != null) {
list.add(Row(
children: <Widget>[
Icon(Icons.sentiment_very_satisfied),
AnimatedBuilder(
animation: time.milliseconds!,
builder: (context, child) {
return Text("${(time.milliseconds!.value * 1000).toInt()}");
},
)
],
));
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: list,
);
},
),
],
),
);
}
}
在 ListView.builder 中
class ListViewPage extends StatefulWidget {
static final String rName = "ListView";
@override
_ListViewPageState createState() => _ListViewPageState();
}
class _ListViewPageState extends State<ListViewPage> {
int endTime = DateTime.now().millisecondsSinceEpoch + 1000 * 60 * 60;
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: 200,
itemBuilder: (context, index) {
if (index == 0) {
return _CountdownDemo(endTime);
} else {
return Container(
height: 200,
color: Colors.blue,
margin: EdgeInsets.all(10),
);
}
},
),
);
}
}
class _CountdownDemo extends StatefulWidget {
final int endTime;
_CountdownDemo(this.endTime);
@override
__CountdownDemoState createState() => __CountdownDemoState();
}
class __CountdownDemoState extends State<_CountdownDemo> {
CountdownTimerController countdownTimerController;
@override
Widget build(BuildContext context) {
return CountdownTimer(
controller: countdownTimerController,
);
}
@override
void initState() {
super.initState();
countdownTimerController =
CountdownTimerController(endTime: widget.endTime);
}
}
倒计时
CountdownController countdownController = CountdownController(duration: Duration(minutes: 1));
Scaffold(
body: Center(
child: Countdown(countdownController: countdownController),
),
floatingActionButton: FloatingActionButton(
child: Icon(countdownController.isRunning ? Icons.stop : Icons.play_arrow),
onPressed: () {
if(!countdownController.isRunning) {
///start
countdownController.start();
} else {
///pause
countdownController.stop();
}
setState(() {
///change icon
});
},
),
)





