动态添加的小部件状态在Flutter中为空



我正在开发一个功能,用户可以按下按钮向屏幕添加一组新的文本字段。每组文本字段都存储在自己的有状态小部件中。添加新小部件的简短代码如下所示:

List<EducationField> fieldList = [];
List<GlobalKey<EducationFieldState>> keyList = [];
// Function that adds new widgets to the list view
onTap: () {
GlobalKey<EducationFieldState> key = new GlobalKey<EducationFieldState>();
setState(() {
fieldList.add(EducationField(key: key));
keyList.add(key);
});
},

我可以动态地添加新的小部件。但是,当我尝试访问小部件的状态时,我得到一个错误,说相应小部件的状态为空。每个小部件状态中都有一个函数从它们的文本字段中获取值。我所使用的代码如下所示:

void _getUserData(){
List<EducationModel> modelList = [];
for(int i = 0; i < fieldList.length; i++){
modelList.add(keyList[i].currentState!.getData()); // this line is causing the error
modelList.last.printModel();
}
}

我已经做了很多关于这个问题的研究,仍然不知道为什么我得到一个null错误。是我的方法错了,还是有什么更小的问题?如果有必要,我也可以给出更多的代码。

提前感谢!

查看GlobalKey文档

动态添加的Text小部件还不存在于widget树中,因为您刚刚创建了它,并且正在尝试将它添加到widget树中。所以它没有当前状态

也许这有帮助?

keyList[i].currentState?.getData() ?? '' // I'm guessing getData return a String

你可以试试别的:

// only call _getUserData() after widget finished building
WidgetsBinding.instance!.addPostFramecallback(() => _getUserData());

最新更新