gpt4 book ai didi

android - 实现 setState 导致 Infinite Loop Flutter

转载 作者:IT老高 更新时间:2023-10-28 12:45:16 25 4
gpt4 key购买 nike

我是 Flutter 的新手,遇到了状态问题。如果有人可以帮助我,我将不胜感激。

所以我最初将 Flutter 下拉菜单的项目设置为一个列表,我们将其称为 List l 它也是值,它将称为变量 v。

然后在父小部件的开头,在构建之前,我调用一个从 sqlflite 数据库获取一些信息的方法。当它返回时,我创建一个新的下拉菜单项列表并实现新状态。我将 List l 设置为新创建的,并将 value 设置为 List 第一项的第一个值,以便下拉菜单重新呈现。

这似乎工作正常,除了从数据库获取信息的方法不断被调用导致无限循环。并卡住我的应用程序。有谁知道我做错了什么?

非常感谢!

    // Declaring variables
List<DropdownMenuItem> _classList;

String _chosenClass;


initState:

@override

void initState() {

 _classList = [DropdownMenuItem(

   child: Text("Choose Class"),

   value: null,)];

 _chosenClass = _classList.first.value;

 super.initState();

}


// Get info from sqlflite database:

getClassesToDisplay() {

 debugPrint("Works");

 getDatabaseInstances(tableClass, [className]).then((classNames){

   if(classNames.length > 0){

     List<DropdownMenuItem> tempList =[];

     classNames.forEach((classArg){

       tempList.add(

           DropdownMenuItem(

             child: Text(classArg[className]),

             value: classArg[className],

           )

       );

     });

     debugPrint("TEMPLIST: ${tempList}");

     setState(() {

       _classList = tempList;

       _chosenClass = tempList.first.value;

     });

   }


 });


}


// Build:

@override

Widget build(BuildContext context) {

 getClassesToDisplay();

 debugPrint("BLAHHHH");

 return new Scaffold(

   appBar: new AppBar(

     title: new Text("Your Classes"),

   ),

   body: Column(

     children: <Widget>[

       Container(

         margin: EdgeInsets.only(top: 10.0, left: 10.0),

         child: raisedButtonMaker("Tap to add a class", (){

           Navigator.pushNamed(context, '/add_seek');

         }, Theme.of(context).primaryColor, context)

       ,),

       DropdownButton(

         value: _chosenClass, //value of currently picked item

         items: _classList,

         onChanged: (value){ //update value of dropDown to what was just chosen

           setState(() {

             _chosenClass = value;

           });

         },

       ),

     ],

   ),

 );

}

最佳答案

getClassesToDisplay() 以延迟 (then) 调用 setState() 导致 build()运行,它调用 getClassesToDisplay() - 简单的无限循环。

build() 中移除 getClassesToDisplay() 并改为从 initState() 中调用它。

关于android - 实现 setState 导致 Infinite Loop Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936609/

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