gpt4 book ai didi

firebase - 如何将 Flutter TextField 与 Firestore 字段同步?

转载 作者:IT王子 更新时间:2023-10-29 06:54:45 26 4
gpt4 key购买 nike

我在 Firestore 中有 task 文档,它有 todo 字段,在 Flutter UI 中有 TextField

请指教如何使 textfieldtodo 字段同步,即

  1. 任何时候,textfield 中的文本都会随着用户的输入而改变,用刚输入的值更新 todo 字段。
  2. 每当 todo 字段更新(在 Firestore 控制台中手动或由其他用户更新)时,使用最新值更新 textfield

谢谢!

最佳答案

首先,为 TextField 提供一个 TextEditingController(完整示例请查看 this)。

对于问题的第一部分,您需要为 TextEditingController 提供一个listener。此 listener 应触发如下函数:

  Future<void> _updateTaskValue(String text) {
Firestore().runTransaction((Transaction transaction) {
Firestore.instance.document([PATH OF YOUR DOCUMENT]).updateData({"todo": text});
});
}

假设 text 是 Controller 的 text 值。请注意,runTransaction 用于避免数据并发。

对于问题的第二部分,您将必须听文档。为此,在 initState 中声明一个 StreamSubscription :

subscription = Firestore.instance.document("").snapshots().listen(
(DocumentSnapshot snapshot) => this._onDatabaseUpdate(snapshot));

每次内容更新时(无论是当前用户更新 TextField、其他用户更新还是从后台手动更新),此订阅都会触发一个函数。

下面调用的函数只是用新内容更新 Controller 的 text 属性:

void _onDatabaseUpdate(DocumentSnapshot snapshot) {
setState(() {
_controller.text = snapshot.data["todo"];
});
}

有关完整示例,请参阅 this gist .

关于firebase - 如何将 Flutter TextField 与 Firestore 字段同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com