dart 如何对本地用户的时间范围设置条件?

h9vpoimq  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(108)

这是一个叫Taskify的应用程序,我正在开发。这是我的第一个主要项目,我想知道是否有任何方法来实现本地用户的时间条件。我想要的是更改标签为“on processed”,如果时间仍然在前一个任务完成后。


的数据

class TaskOverviewCard extends StatefulWidget {
  late String subtaskName;
  late TimeOfDay endTime;
  final now = TimeOfDay.now();

  TaskOverviewCard(
      {super.key, required this.subtaskName, required this.endTime});

  @override
  State<TaskOverviewCard> createState() => _TaskOverviewCardState();
}

class _TaskOverviewCardState extends State<TaskOverviewCard> {
  @override
  Widget build(BuildContext context) {
    late Size mq = MediaQuery.of(context).size;

    return Padding(
      padding: const EdgeInsets.only(top: 25),
      child: Column(
        children: [
          Container(
            decoration: BoxDecoration(
                color: Colors.white,
                border: Border.all(color: Colors.grey.shade300),
                borderRadius: BorderRadius.circular(12)),
            height: mq.height * 0.154,
            width: mq.width * 0.9,
            child: Padding(
              padding: const EdgeInsets.only(left: 16.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Padding(
                    padding: const EdgeInsets.only(top: 18.0, right: 16),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Text(
                          widget.subtaskName,
                          style: const TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 17),
                        ),
                        const Icon(Icons.more_horiz)
                      ],
                    ),
                  ),
                  Padding(
                      padding: const EdgeInsets.only(right: 18, top: 20),
                      child: Container(
                        decoration: BoxDecoration(
                            color: Colors.grey.shade200,
                            borderRadius: BorderRadius.circular(8)),
                        width: 400,
                        height: 50,
                        child: Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 13),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Row(
                                children: [
                                  Icon(
                                    Icons.schedule,
                                    size: 18,
                                    color: Colors.grey.shade500,
                                  ),
                                  const SizedBox(
                                    width: 5,
                                  ),
                                  Text(endTime.format(context))
                                ],
                              ),
                              Container(
                                decoration: BoxDecoration(
                                    color: Colors.white,
                                    borderRadius: BorderRadius.circular(4)),
                                child: Padding(
                                    padding: const EdgeInsets.symmetric(
                                        horizontal: 7, vertical: 3),
                                    child: (endTime.hour < now.hour &&
                                            endTime.minute < now.minute)
                                        ? taskCompleted()
                                        : taskNotCompleted()),
                              ),
                            ],
                          ),
                        ),
                      ))
                ],
              ),
            ),
          )
        ],
      ),
    );
  }
}

字符串
但我没有得到预期的结果。

tzdcorbm

tzdcorbm1#

首先,让我描述一下我是如何理解你的问题的,如果这是错误的,请纠正我。如果用户的时间早于当前任务的endTime,则希望显示“未完成”。如果用户的时间在当前任务和下一个任务的endTime之间,则文本应更改为“On processed”(已处理),如果用户的时间在下一个endTime之后,则应显示为“completed”(完成)。
要判断用户的本地时间是否晚于此时间,不仅需要此任务的endTime?,还需要下一任务的endTime。为此,在class TaskOverviewCard中,必须添加一个变量:

final DateTime nextTaskEndTime;

字符串
并相应地在构造函数中声明它。然后,您可以使用isBefore等方法,并根据当前时间显示正确的文本。
还有几件事:
1.我不明白为什么你的小部件需要是有状态的。请使用无状态,因为它使实现更容易。
1.为什么你的变量是late?考虑将它们改为final,因为这是无状态小部件所要求的,而且无论如何这些变量都不应该更改。
1.我会用另一种方法把逻辑和时间联系起来。我已经为你起草了一些代码:

class TaskOverviewCard extends StatelessWidget {
  final String subtaskName;
  final DateTime endTime;
  final DateTime nextTaskEndTime;
  final now = DateTime.now();

  TaskOverviewCard({super.key, required this.subtaskName, required this.endTime, required this.nextTaskEndTime});

  @override
  Widget build(BuildContext context) {
    //TODO: Put your Widget here, use the method buildTaskStateWidget() where the task state should be displayed
  }

  Widget buildTaskStateWidget() {
  //Here, use endTime, nextTaskEndTime, and now to figure out what should be displayed
  }
}


希望这对你有帮助。如果有任何不清楚的地方,请不要犹豫,问!

相关问题