Ale*_*sky 2 firebase flutter google-cloud-firestore
我task在具有todo字段的Firestore和TextFieldFlutter UI 中有文档。
请建议如何使textfield与todo字段同步,即
textfield随着用户的输入而改变,todo用刚刚输入的值更新字段。todo字段都会更新(在 Firestore 控制台中手动或由其他用户),textfield使用最新值更新。谢谢!
小智 5
首先,提供一个TextEditingController给TextField(看一下这个完整的例子)。
对于这个问题的第一部分,你将需要提供listener的TextEditingController。这listener应该触发这样的功能:
Future<void> _updateTaskValue(String text) {
Firestore().runTransaction((Transaction transaction) {
Firestore.instance.document([PATH OF YOUR DOCUMENT]).updateData({"todo": text});
});
}
Run Code Online (Sandbox Code Playgroud)
假设这text是控制器的text值。请注意,runTransaction用于避免数据并发。
对于问题的第二部分,您将不得不听文件。要做到这一点,声明为initState一个StreamSubscription:
subscription = Firestore.instance.document("").snapshots().listen(
(DocumentSnapshot snapshot) => this._onDatabaseUpdate(snapshot));
Run Code Online (Sandbox Code Playgroud)
每次更新内容时,此订阅都会触发一个功能(无论是当前用户更新TextField、其他用户更新,还是从后台手动更新)。
下面调用的函数只是text用新内容更新控制器的属性:
void _onDatabaseUpdate(DocumentSnapshot snapshot) {
setState(() {
_controller.text = snapshot.data["todo"];
});
}
Run Code Online (Sandbox Code Playgroud)
有关完整示例,请参阅此要点。
| 归档时间: |
|
| 查看次数: |
4108 次 |
| 最近记录: |