【发布时间】:2020-07-05 14:44:51
【问题描述】:
我不是经验丰富的程序员,也找不到任何指导,因此提出了这个问题。我有一个可行的解决方案,但不确定这是否是好的做法。
我在 Form() 中使用小部件 Checkbox()。 TextFormField() 和 DateTimeField() 等小部件有一个名为“initialValue”的参数。 Checkbox() 没有。
对于 TextFormField() 和 DateTimeField() 我通过以下方式获得了 initialValue:
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<UnitDetails>(
stream: DatabaseServices(uid: user.userUid, unitUid: widget.unitUid)
.unitByDocumentID,
builder: (context, unitDetails) {
if (!unitDetails.hasData) return Loading();
return Scaffold(
etc
Checkbox(value:residentUnit,) 不能在 builder: 中设置其初始值。参数 'value:' 需要在 builder 之前设置为 true 或 false:即在从 Firestore 获取值之前!我解决这个问题的方法是使用 initState()。对 Firestore 的额外调用和针对这一输入小部件的更多代码。
@override
void initState() {
super.initState();
Firestore.instance
.collection("units")
.document(widget.unitUid)
.snapshots()
.listen((snapshot) {
residentialUnit = snapshot.data['unitResidential'];
});
}
有没有更好的办法?
【问题讨论】:
标签: flutter checkbox google-cloud-firestore