gpt4 book ai didi

flutter - 时间为23:59:59时如何更新Widget?

转载 作者:行者123 更新时间:2023-12-03 04:50:52 25 4
gpt4 key购买 nike

做完一个事件之后..我想显示我的Text小部件并在时间23:59:59时更改该小部件...到目前为止,我已经完成了此代码

DateFormat("HH:mm:ss").format(DateTime.now()) =="23:59:59"
? Text("After")
: Text("Before")

但是问题是...每当我关闭我的应用程序然后重新打开应用程序时...尽管时间已经在23:59:59,但窗口小部件不会从 Text("Before")更改为 Text("After") ...该窗口小部件仅在更改之后我正在进行事件点击,并且当应用仍处于打开状态时...是否可以解决该问题而无需任何其他事件?

最佳答案

您在Text方法中有build。此方法仅适用于小部件的更新,例如,状态发生变化时(这就是为什么当您do an event click时小部件更新,我认为您的小部件在单击后会重建)。但是小部件对DateTime.now()一无所知。因此,应将DateTime.now声明为状态并每秒更新一次。

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

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: Padding(
padding: EdgeInsets.all(16),
child: BeforeAfter(),
),
),
),
);
}
}

class BeforeAfter extends StatefulWidget {
@override
_BeforeAfterState createState() => _BeforeAfterState();
}

class _BeforeAfterState extends State<BeforeAfter> {
String time = DateFormat("HH:mm:ss").format(DateTime.now()); // our time which we will update

@override
void initState() {
super.initState();
updateTime();
}

void updateTime() {
Future.delayed(Duration(seconds: 1), () {
updateTime();
setState(() {
time = DateFormat("HH:mm:ss").format(DateTime.now()); // update time
});
});
}

@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
time == "12:13:00" ? Text("After") : Text("Before"),
Text(time)
]); // compare time with some value
}
}

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

Gif它是如何工作的

enter image description here

关于flutter - 时间为23:59:59时如何更新Widget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61381944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com