当时间是23:59:59时,如何更新Widget?

在做完一个活动后,我想显示我的 Text 小组件,并在时间为23:59:59时更改该小组件……到目前为止,我做了以下代码。

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

但问题是……每当我关闭我的应用程序,然后重新打开应用程序……小组件并没有改变从 Text("Before")Text("After") 虽然时间已经在23:59:59…但只有在我做了一个事件点击后,当应用程序仍然打开时,部件才会发生变化…有什么方法可以在没有任何额外事件的情况下解决这个问题吗?

解决方案:

你有你的 Textbuild 方法。这个方法只在widget的更新时起作用,例如,如果状态发生变化(这就是为什么当你的状态发生变化时,widget会更新。do an event click我想你的widget在点击后会重建)。) 但小部件不知道任何关于 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

给TA打赏
共{{data.count}}人
人已打赏
解决方案

为不存在的数据创建额外的日期行(Redshift SQL)。

2022-5-12 7:00:19

解决方案

在Flutter Dart中从字符串中获取日期并转换为Date对象。

2022-5-12 7:00:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索