Flutter中setState更新的变量在Firestore方法中无法访问
问题解决:TypeAheadField选中数据后状态变量未更新到Firestore
问题根源
你在onSuggestionSelected回调里犯了变量遮蔽的错误:
- 先是声明了一个局部的
final String imageuniversitycollege = datasugestion.image; - 接着在
setState里又重复声明了同一个局部变量,这导致你修改的始终是局部变量,而非类级别状态里的imageuniversitycollege。虽然print能输出值,但那是局部变量的内容,类的状态变量从头到尾都是初始的空字符串。
修复代码
修改onSuggestionSelected部分的代码,移除多余的局部变量声明,直接给类的状态变量赋值:
onSuggestionSelected: (SchoolData? choose) { final datasugestion = choose!; collegeAheadController.text = datasugestion.university; // 直接给类的状态变量赋值,无需声明新的局部变量 setState(() { imageuniversitycollege = datasugestion.image; print(imageuniversitycollege); // 现在打印的是类状态变量的值 }); },
验证修复
完成修改后,点击确认按钮调用updateEducationCollege时,imageuniversitycollege就能正确获取到选中的图片链接,成功写入Firestore数据库。
内容的提问来源于stack exchange,提问作者Jessen Jie
相关产品推荐
相关产品推荐

