Flutter × Firestore 추가, 업데이트, 얻기

값 추가



Firebase users 컬렉션의 필드 값에 값을 추가하려면 다음과 같이 작성합니다.
이번에는 name이라는 필드 값에 무명의 곰을 추가합니다. * add는 임의의 문서 ID가 생성됩니다

FirebaseFirestore.instance.collection('users').add({
      'name' : '名無しのごんべ'
});




set는 문서 ID를 지정하여 추가·일괄 갱신을 할 수 있습니다.

FirebaseFirestore.instance.collection('users').doc(uid).set({
      'name' : '名無しのごんべ'
});


값 업데이트



필드치를 갱신하려면 doc(uid) (와)과 문서 ID를 지정해 key에 필드치, value에 추가하고 싶은 값을 삽입합니다.

FirebaseFirestore.instance.collection('users').doc(uid).update({
    'name' : 'ymktmk'
});


값 얻기



QuerySnapshot은 여러 문서 ID를 가져올 수 있습니다. 여러 문서 ID를 하나씩 forEach로 돌리고 있습니다.

FirebaseFirestore.instance.collection('users').get().then((QuerySnapshot snapshot) {
   snapshot.docs.forEach((doc) {
     /// usersコレクションのドキュメントIDを取得する
     print(doc.id);
     /// 取得したドキュメントIDのフィールド値nameの値を取得する
     print(doc.get('name'));
   });
});


DocumentSnapshot은 단일 문서 ID를 가져옵니다. 따라서 doc(uid) 및 문서 ID를 지정합니다.

FirebaseFirestore.instance.collection('users')
     .doc(uid).get().then((DocumentSnapshot snapshot) {
     print(snapshot.get('name'));
});


실시간으로 획득



실시간으로 취득할 때는 get가 아닌 snapshot을 붙입니다.

FirebaseFirestore.instance.collection('users')
   .snapshots().listen((QuerySnapshot snapshot) {
     snapshot.docs.forEach((doc) { 
       print(doc.get('name'));
     });
});


FirebaseFirestore.instance.collection('users')
      .doc(myId).snapshots().listen((DocumentSnapshot snapshot) {
      print(snapshot.get('name'));
});


StreamBuilder 사용



깜박임 StreamBuilder를 사용하여 실시간으로 View에 표시하는 것이 좋습니다.

class Example extends StatelessWidget {

  final myId = FirebaseAuth.instance.currentUser!.uid;

  @override
  Widget build(BuildContext context) {

    return StreamBuilder<DocumentSnapshot>(
        stream: FirebaseFirestore.instance.collection('users').doc(myId).snapshots(),
        builder: (BuildContext context,  AsyncSnapshot<DocumentSnapshot> snapshot) {
          if (snapshot.hasData) {
            return Text(snapshot.data!['name']);
          } else {
            return Container();
          }
        }
    );
  }

}


다음과 같이 쓸 수 있습니다. stream: MeetController.getMatch(), 그럼 Stream>을 돌려주는 모델을 작성하면 OK입니다.

class Example extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<List<RoomModel>>(
      stream: MeetController.getMatch(),
      builder: (BuildContext context, AsyncSnapshot<List<RoomModel>> snapshot) {

        print(snapshot.data![0].roomId);

      }
    );
  }
}

좋은 웹페이지 즐겨찾기