我正在尝试为我的特定日期创建一个倒计时,并显示在那之前还剩多少小时、分钟和秒..
例如我想将计数器日期设置为:2018 年 10 月 25 日星期四上午 7:14:05
我想向用户显示.. 剩余时间: hh:mm:ss 直到 10 月 25 日 ...
我试过这个:
@override
void initState() {
new CountdownTimer(new Duration(milliseconds: 1540451645), new Duration(seconds: 1)).listen((data) {
print('Remaining time: ${data.remaining.inSeconds}');
print(new DateTime.now().millisecondsSinceEpoch);
print(DateTime.fromMillisecondsSinceEpoch(data.remaining.inSeconds));
var format = new DateFormat("hh:mm:ss");
var dateString = format.format(DateTime.fromMillisecondsSinceEpoch(data.remaining.inSeconds));
print(dateString);
});
super.initState();
}
但结果是:03:25:40..这确实不正确...
这个怎么做?
首先 - 有错误:你必须使用data.remaining.inMilliseconds
代替data.remaining.inSeconds
对于格式化,最好使用 Duration 而不是 DateTime。但您可以更改现有代码,例如:
var format = new DateFormat("mm:ss");
var dateString = '${data.remaining.inHours}:${format.format(DateTime.fromMillisecondsSinceEpoch(data.remaining.inMilliseconds))};
print(dateString);
UPD显示剩余时间的小部件
int estimateTs = DateTime(2018, 11, 5, 7, 15, 30).millisecondsSinceEpoch; // set needed date
....
StreamBuilder(
stream: Stream.periodic(Duration(seconds: 1), (i) => i),
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
DateFormat format = DateFormat("mm:ss");
int now = DateTime
.now()
.millisecondsSinceEpoch;
Duration remaining = Duration(milliseconds: estimateTs - now);
var dateString = '${remaining.inHours}:${format.format(
DateTime.fromMillisecondsSinceEpoch(remaining.inMilliseconds))}';
print(dateString);
return Container(color: Colors.greenAccent.withOpacity(0.3),
alignment: Alignment.center,
child: Text(dateString),);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)