【问题标题】:Flutter countdown not counting down颤振倒计时不倒计时
【发布时间】:2022-11-20 20:40:49
【问题描述】:

我对 flutter 编程有点陌生,所以我正在尝试创建一些基本的东西来学习。目前,我正在尝试创建一个特定日期的倒计时列表。没什么特别的,日期是通过 firestore 检索的,然后显示在列表中。但是,我遇到了一个小问题:

所有日期都在同一时间开始,现在是 00:00:00,这意味着它们在倒计时中的秒数应该始终相同。这个曾是不是这样的。我本周早些时候发布了这个问题,问题是我总是为 DateTime.now() 使用一个新值,所以我通过在主小部件中创建一个新变量并将其传递给倒计时来“解决”该部分。我在这个例子中使用了毫秒和微秒,因为一切都加载得更快。但是正如您所看到的,现在 mill/micro/seconds 很好地对齐 (image from mobile),但它不再倒计时了。所以我重新发布,但现在在 dartpad 中有一个可验证的示例,可以在 here 找到。此代码也应该可用于在本地计算机上复制问题。

如果我重新加载应用程序,它会更新,因为 currentTime 当然会获得新值。

有人可以帮助我朝着正确的方向前进吗?

【问题讨论】:

    标签: flutter dart datetime timer countdown


    【解决方案1】:

    一旦您通过了currentTime,它就保持不变。因为 currentTime 只初始化了一次。

      DateTime currentTime = DateTime.now();
    

    并使用

    CountdownWidget(
        startDate: DateTime(2023, 1), currentTime: currentTime),
    

    currentTime 值永远不会发生变化,包括 CountdownWidget 小部件。因此用户界面不更新。

    您可以从父小部件更改 CountdownWidget 的值,并以当前方式传递实例 CountdownWidget

    解决方案 1:解决方案将是

    class _MyHomePageState extends State<MyHomePage> {
      DateTime currentTime = DateTime.now();
    
      @override
      void initState() {
        super.initState();
        Timer.periodic(Duration(seconds: 1), (timer) {
          currentTime = DateTime.now();
          setState(() {});
        });
      }
    

    它每秒更改 currentTime 并传递值,然后更新父小部件。


    解决方案0:

    另一个解决方案将处理CountdownWidget 上的更新

    class CountdownWidgetState extends State<CountdownWidget> {
      Timer? timer;
    
      late DateTime currentTime = widget.currentTime;
      @override
      void initState() {
        super.initState();
    
        timer = Timer.periodic(const Duration(microseconds: 1), (timer) {
          currentTime = DateTime.now();
          setState(() {});
        });
      }
    

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2019-07-03
      • 2019-08-18
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多