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