Datetime 颤振:保持时间
试图显示一个基于当前东部时间每周重置自身的静态计时器,例如,屏幕显示一个计时器,Datetime 颤振:保持时间,datetime,timer,dart,flutter,stopwatch,Datetime,Timer,Dart,Flutter,Stopwatch,试图显示一个基于当前东部时间每周重置自身的静态计时器,例如,屏幕显示一个计时器,天:小时:分钟:秒(例如:7:00:00:00),倒计时并在每个周日结束或周一开始时重置自身。我有一个一般的概念,它包括DateTime、Timer和Stopwatch,但很难将它们组合在一起。创建一个StatefulWidget,每当定时器更新时,它就会获取并存储当前时间。在build方法中,计算并格式化时差: import 'dart:async'; import 'package:flutter/materi
天:小时:分钟:秒
(例如:7:00:00:00
),倒计时并在每个周日结束或周一开始时重置自身。我有一个一般的概念,它包括DateTime
、Timer
和Stopwatch
,但很难将它们组合在一起。创建一个StatefulWidget
,每当定时器更新时,它就会获取并存储当前时间。在build
方法中,计算并格式化时差:
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Week Countdown',
home: TestPage(),
);
}
}
class TestPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Week Countdown')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
'Time until next week:',
style: Theme.of(context).textTheme.headline,
),
WeekCountdown()
],
),
),
);
}
}
class WeekCountdown extends StatefulWidget {
@override
State<StatefulWidget> createState() => _WeekCountdownState();
}
class _WeekCountdownState extends State<WeekCountdown> {
Timer _timer;
DateTime _currentTime;
@override
void initState() {
super.initState();
_currentTime = DateTime.now();
_timer = Timer.periodic(Duration(seconds: 1), _onTimeChange);
}
@override
void dispose() {
_timer.cancel();
super.dispose();
}
void _onTimeChange(Timer timer) {
setState(() {
_currentTime = DateTime.now();
});
}
@override
Widget build(BuildContext context) {
final startOfNextWeek = calculateStartOfNextWeek(_currentTime);
final remaining = startOfNextWeek.difference(_currentTime);
final days = remaining.inDays;
final hours = remaining.inHours - remaining.inDays * 24;
final minutes = remaining.inMinutes - remaining.inHours * 60;
final seconds = remaining.inSeconds - remaining.inMinutes * 60;
final formattedRemaining = '$days : $hours : $minutes : $seconds';
return Text(formattedRemaining);
}
}
DateTime calculateStartOfNextWeek(DateTime time) {
final daysUntilNextWeek = 8 - time.weekday;
return DateTime(time.year, time.month, time.day + daysUntilNextWeek);
}
导入'dart:async';
进口“包装:颤振/材料.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:"一周倒计时",,
主页:TestPage(),
);
}
}
类TestPage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“周倒计时”),
正文:中(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
正文(
“时间到下周:”,
风格:Theme.of(context).textTheme.headline,
),
WeekCountdown()
],
),
),
);
}
}
类WeekCountdown扩展StatefulWidget{
@凌驾
State createState()=>_WeekCountdownState();
}
类_WeekCountdownState扩展状态{
定时器(u定时器),;
日期时间_currentTime;
@凌驾
void initState(){
super.initState();
_currentTime=DateTime.now();
_计时器=计时器。周期性(持续时间(秒:1),\u onTimeChange);
}
@凌驾
无效处置(){
_timer.cancel();
super.dispose();
}
void\u onTimeChange(计时器){
设置状态(){
_currentTime=DateTime.now();
});
}
@凌驾
小部件构建(构建上下文){
最终开始下一周=计算开始下一周(_currentTime);
最终剩余=开始下一周的差异(_currentTime);
最后天数=剩余的天数;
最后时间=剩余时间内-剩余时间内*24天;
最后分钟=剩余的.inMinutes-剩余的.inHours*60;
最后的秒数=剩余的.inSeconds-剩余的.inMinutes*60;
最终格式化剩余=“$days:$hours:$minutes:$seconds”;
返回文本(格式化剩余);
}
}
DateTime CalculateStartFnextWeek(日期时间){
最后一天SunTilNextweek=8-time.weekday;
返回日期时间(time.year、time.month、time.day+daysuntilneweek);
}
有关性能的更多信息将非常有用