Прежде всего, поставьте TextEditingController
на TextField
(посмотрите на this для полного примера).
Для первой части вопроса вынужно будет предоставить listener
до TextEditingController
.Это listener
должно вызывать такую функцию:
Future<void> _updateTaskValue(String text) {
Firestore().runTransaction((Transaction transaction) {
Firestore.instance.document([PATH OF YOUR DOCUMENT]).updateData({"todo": text});
});
}
Предполагая, что text
является значением text
контроллера.Обратите внимание, что runTransaction
используется, чтобы избежать параллелизма данных.
Во второй части вопроса вам нужно будет прослушать документ.Для этого объявите в initState
a StreamSubscription
:
subscription = Firestore.instance.document("").snapshots().listen(
(DocumentSnapshot snapshot) => this._onDatabaseUpdate(snapshot));
Эта подписка будет вызывать функцию при каждом обновлении контента (обновляет ли текущий пользователь TextField
, другой пользователь обновляет его).или вручную из бэк-офиса).
Вызванная ниже функция просто обновляет атрибут контроллера text
новым содержимым:
void _onDatabaseUpdate(DocumentSnapshot snapshot) {
setState(() {
_controller.text = snapshot.data["todo"];
});
}
Полный пример см. это суть .