我正在尝试启动“水表”。当我打开应用程序时,应该生成此值。我的问题是,当我构建小部件时,它不会呈现实际值。只有当我转到另一个屏幕或热重载屏幕时,它才会呈现值。在这里我计算并设置状态。
var dif = parsedDate.difference(dateNow).inDays;
var difInPercent = double.parse((dif / interval).toStringAsFixed(2));
setState(() {
waterPercentage = difInPercent*100;
});
print(waterPercentage); // for debug purposes
后来在我的构建方法中,我使用了我为我的小部件全局定义的这个变量
Container(
height: waterPercentage,
width: 15,
[...]
显然我做错了什么,因为没有直接设置状态。运行此集合状态“plantDate()”的函数在另一个小部件中被调用。
Text(
"Next watering: \n${plantDate(widget.plant.date, widget.plant.interval)}",
[...]
有人有想法吗?
编辑:这是完整课程的代码https://pastebin.com/N4M55YnA
EDIT2: 是那样做的,但不是那样工作的。
@override
initState(){
super.initState();
interval = widget.plant.interval;
parsedDate = DateTime.parse(date);
date = DateFormat.MMMMd().format(parsedDate);
var dateNow = DateTime.now();
var dif = parsedDate.difference(dateNow).inDays;
var difInPercent = double.parse((dif / interval).toStringAsFixed(2));
waterPercentage = difInPercent*100;
}