gpt4 book ai didi

android - 无状态小部件不断重建

转载 作者:行者123 更新时间:2023-12-02 15:52:54 25 4
gpt4 key购买 nike

我目前正在按照教程开发待办事项应用这是复选框部分

我试图将它的状态提升到树上,但是当我这样做时,无状态小部件只会不停地重建,我尝试添加 key ,添加 const 将其转换为 stateful 但似乎没有任何效果它也不会向我提供任何类型的错误或异常消息

注意:当我将 onChecked 设置为 null statelessWidget 运行两次,而它应该只构建一次..

下面是代码:

    import 'package:flutter/material.dart';        class TaskTile extends StatefulWidget {      @override      _TaskTileState createState() => _TaskTileState();    }        class _TaskTileState extends State {      bool isChecked = false;          @override      Widget build(BuildContext context) {        return ListTile(          title: Text(            "Complete Todoey",            style: TextStyle(                decoration: isChecked == true                    ? TextDecoration.lineThrough                    : TextDecoration.none),          ),          trailing: TaskCheckBox(              checkBoxState: isChecked,              toggleCheckBoxState:                  (bool checkBoxState) {                Future.delayed(Duration.zero,                    () async {                  setState(() {                    print(                        "===================$isChecked==============$checkBoxState======================");                    isChecked = checkBoxState;                  });                });              }),        );      }    }        class TaskCheckBox extends StatelessWidget {      const TaskCheckBox(          {Key? key,          required this.checkBoxState,          required this.toggleCheckBoxState})          : super(key: key);          final bool checkBoxState;      final Function toggleCheckBoxState;          @override      Widget build(BuildContext context) {        print(            "=====================================$checkBoxState+++++++++++++++++++++++++++++++++++++++++");        return Checkbox(          value: checkBoxState,          onChanged:              null, // toggleCheckBoxState(checkBoxState),        );      }    }

控制台输出的 fragment :

 Performing hot restart...Syncing files to device Android SDK built for x86...I/flutter ( 3401): ===================false==============false======================I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++I/flutter ( 3401): ===================false==============false======================I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++I/flutter ( 3401): ===================false==============false======================I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++I/flutter ( 3401): ===================false==============false======================I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++I/flutter ( 3401): ===================false==============false======================I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++

onChanged 设置为 null 时的输出 fragment :

Restarted application in 2,694ms.I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++I/flutter ( 3401): =====================================false+++++++++++++++++++++++++++++++++++++++++

最佳答案

setState 的目的是告诉框架状态中的变量已更改,需要重建小部件以反射(reflect)该更改。因此,调用 setState 会再次调用构建函数,在您的情况下,它会调用您的 Future,它会再次调用 setState,从而触发构建等等。

要解决此问题,您可以使用 Future.delayed 摆脱异步函数,因为那里根本不需要它,也可以将 print 放在 setstate 函数之外。

关于android - 无状态小部件不断重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72052570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com