首先,提供一个TextEditingController
to the TextField
(看一眼this https://flutter.io/cookbook/forms/text-field-changes/完整的例子)。
对于问题的第一部分,您需要提供listener
to the TextEditingController
. This 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"];
});
}
有关完整示例,请参阅这个要点 https://gist.github.com/jon-mly/5042580533fb58927acca88f75213677.