Я не опытный программист, и я не мог найти руководство, отсюда и этот вопрос. У меня есть рабочее решение, но я не уверен, что это хорошая практика.
Я использую флажок виджета () в форме (). Виджеты, такие как TextFormField () и DateTimeField (), имеют параметр с именем 'initialValue'. Флажок () не имеет.
Для 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
Флажок (value: residentialUnit,) не может иметь начальное значение, установленное внутри компоновщика :. Параметр 'value:' должен быть установлен в true или false перед компоновщиком: ie до получения значения из Firestore! Я решил это с помощью initState (). Дополнительный вызов Firestore и дополнительный код для этого одного виджета ввода.
@override
void initState() {
super.initState();
Firestore.instance
.collection("units")
.document(widget.unitUid)
.snapshots()
.listen((snapshot) {
residentialUnit = snapshot.data['unitResidential'];
});
}
Есть ли лучший способ?