这是一个叫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()),
),
],
),
),
))
],
),
),
)
],
),
);
}
}
字符串
但我没有得到预期的结果。
1条答案
按热度按时间tzdcorbm1#
首先,让我描述一下我是如何理解你的问题的,如果这是错误的,请纠正我。如果用户的时间早于当前任务的
endTime
,则希望显示“未完成”。如果用户的时间在当前任务和下一个任务的endTime
之间,则文本应更改为“On processed”(已处理),如果用户的时间在下一个endTime
之后,则应显示为“completed”(完成)。要判断用户的本地时间是否晚于此时间,不仅需要此任务的
endTime?
,还需要下一任务的endTime
。为此,在class TaskOverviewCard
中,必须添加一个变量:字符串
并相应地在构造函数中声明它。然后,您可以使用isBefore等方法,并根据当前时间显示正确的文本。
还有几件事:
1.我不明白为什么你的小部件需要是有状态的。请使用无状态,因为它使实现更容易。
1.为什么你的变量是
late
?考虑将它们改为final
,因为这是无状态小部件所要求的,而且无论如何这些变量都不应该更改。1.我会用另一种方法把逻辑和时间联系起来。我已经为你起草了一些代码:
型
希望这对你有帮助。如果有任何不清楚的地方,请不要犹豫,问!