【问题标题】:Flutter Initializing Variable before building the Widget在构建 Widget 之前 Flutter 初始化变量
【发布时间】:2020-06-23 15:45:11
【问题描述】:

我正在尝试启动“水表”。 当我打开应用程序时,应该生成此值。 我的问题是,当我构建小部件时,它不会呈现实际值。 只有当我转到另一个屏幕或热重载屏幕时,它才会呈现值。 这里我计算并设置State。

    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;
 }

【问题讨论】:

  • 嗨!您能否提供小部件的完整课程的代码。最好能找到问题。
  • 顺便说一句,您将setState 部分放在哪里?它位于哪个方法中?
  • pastebin.com/N4M55YnA 你去。把它放在 Pastebin 上,因为它有点长
  • 我认为你应该在initState 方法中完成这项工作。您只调用该方法一次,这意味着您希望数据只加载一次(即在小部件构建时)。更好的方法是使用initState 方法。保持代码不变,直接设置变量,不要使用setState
  • 试一试...如果可行,我会将其发布为答案..

标签: flutter statefulwidget


【解决方案1】:

更新: 现在可以工作了。 @Shardul Nalegave 的回答是正确的。 我只是在初始化时使用了错误的变量。

 initState(){
    super.initState();


    print("超级初始化状态调用");
    
    间隔=小部件.植物.间隔;
    parsedDate = DateTime.parse(widget.plant.date);
    日期 = DateFormat.MMMMd().format(parsedDate);

    var dateNow = DateTime.now();
    var diff = parsedDate.difference(dateNow).inDays;
    var difInPercent = double.parse((dif / interval).toStringAsFixed(2));
    水百分比 = 差异百分比 * 100;
    //print("水百分比:$水百分比");
    //print("日期:$date");
    //print("解析日期:$parsedDate");
    //print("间隔:$interval");
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2018-12-06
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    相关资源
    最近更新 更多