当Firestore中的字段有一些更新时,我需要在UI中更新字段数据

时间:2019-07-17 05:52:02

标签: firebase flutter google-cloud-firestore

每当字段值发生实时变化时,我都希望在flutter的UI中更新文档字段值。

我尝试使用StreamBuilder,但我得到的唯一输出是“ Instance QuerySnapshot”

StreamBuilder(
     stream: db.collection('users').snapshots(),
     initialData: 0,
     builder:(BuildContext context, AsyncSnapshot snapshot) {
             return new Text(snapshot.data.DocumentSnapshot,
                              style: TextStyle(
                                  color: Colors.yellow,
                                  fontWeight: FontWeight.bold,
                                  fontSize: 12.0));
                        },
                      ),`

预期输出是文档uid中奖励字段的int值。

2 个答案:

答案 0 :(得分:0)

我已经用流生成器完成了我的一个项目,并且工作正常。我从那里放了一些代码片段,请检查一下,这可能会对您有所帮助。

StreamBuilder

的代码
StreamBuilder<QuerySnapshot>(
        stream: db.collection("students").snapshots(),
        builder:
            (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (!snapshot.hasData) return new Text("There is no expense");
          return Expanded(
            child: new ListView(
              children: generateStudentList(snapshot),
            ),
          );
        },
      ),

generateStudentList

的代码
generateStudentList(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.documents
    .map<Widget>(
      (doc) => new ListTile(
        title: new Text(doc["name"]),
        subtitle: new Text(
          doc["age"].toString(),
        ),
        trailing: Container(
          width: 100,
          child: Row(
            children: <Widget>[
              IconButton(
                onPressed: () {
                  setState(() {
                    _studentNameController.text = doc["name"];
                    _studentAgeController.text = doc["age"].toString();
                    docIdToUpdate = doc.documentID;
                    isUpdate = true;
                  });
                },
                icon: Icon(
                  Icons.edit,
                  color: Colors.blue,
                ),
              ),
              IconButton(
                onPressed: () {
                  deleteStudent(doc);
                },
                icon: Icon(
                  Icons.delete,
                  color: Colors.red,
                ),
              )
            ],
          ),
        ),
      ),
    )
    .toList();
}

您可以根据需要更改字段。

答案 1 :(得分:0)

由于这一行stream: db.collection('users').snapshots(), ,您正在获取集合,但是您需要该文档。请参阅以下内容:

StreamBuilder(
 stream: db.collection('users').document(userId).snapshots(), // insert the userId
 initialData: 0,
 builder:(BuildContext context, DocumentSnapshot snapshot) { // change to DocumentSnapshot instead of AsyncSnapshot
         return new Text(snapshot.data.documentID, // you can get the documentID hear
                          style: TextStyle(
                              color: Colors.yellow,
                              fontWeight: FontWeight.bold,
                              fontSize: 12.0));
                    },
                  ),`