У меня есть переключатель, который изменяет значение в базе данных. Будущее в FutureBuilder состоит в том, чтобы получить текущее значение коммутатора (я делаю это так, чтобы, если значение не обновляется, коммутатор все еще будет правильным значением). Когда я переключаю переключатель, я вызываю setState, чтобы изменить значение переключателя и значение в базе данных. Побочным эффектом этого является то, что коммутатор и FutureBuilder перестраиваются при каждом использовании коммутатора, вызывая мерцание коммутатора.
Есть ли способ реализовать коммутатор в FutureBuilder, чтобы он правильно выполнял команду " переключатель "анимация?
Вот мой виджет переключения:
dynamic currentValue = false;
Future<void> _changeValue(String optionName, dynamic value) async {
await widget.db
.collection('CameraSettings')
.document(optionName)
.updateData({optionName: value});
}
Future<dynamic> _getValue(String optionName) async {
DocumentSnapshot value =
await widget.db.collection('CameraSettings').document(optionName).get();
return value.data[optionName];
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _getValue(widget.optionName),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
currentValue = snapshot.data;
return Switch(
value: currentValue,
onChanged: (bool newVal) {
setState(
() {
currentValue = newVal;
_changeValue(widget.optionName, newVal);
},
);
},
);
} else {
return Switch(value: currentValue, onChanged: null);
}
},
);
}