-
[FLUTTER/Firebase] Firestore 연동 데이터 추가 및 관리 코드앱 개발/Flutter 2019. 12. 31. 14:04반응형
Java script로 쓰여있는 Firestore 연동 코드들을 Flutter dart 언어로 작성했다.
https://firebase.google.com/docs/firestore/manage-data/add-data
1. 데이터 추가
'cities' 콜렉션 - Seoul 문서 내에 데이터를 추가한다는 내용의 코드이다.
다양한 타입의 데이터 설정이 가능하다.
해당 document가 존재할 경우 기존의 데이터를 덮어쓰는데 덮어쓰지 않고 병합하기 위해서는 merge를 사용한다.
- document id를 지정해서 생성
Firestore.instance .collection('cities') .document('Seoul') .setData ({ 'like' : 0, 'url':'http://citycity/citycity', capital: true }) // 기존 데이터와 병합 Firestore.instance .collection('cities') .document('Seoul') .setData({ capital: false , merge: true })
- 자동으로 document id를 생성
Firestore.instance. collection('cities'). add({ name: "Tokyo", country: "Japan" }) Firestore.instance. collection('cities').document(). setData({ name: "Tokyo", country: "Japan" })
2. 데이터 업데이트
Firestore.instance. .collection('cities') .document('Seoul') .updateData({'name': 'Seoul'});
- FieldValue 요소를 사용할 경우
//배열요소 업데이트 Firestore.instance .collection('YourCollection') .document('YourDocument') .updateData({'array':FieldValue.arrayUnion(['data1','data2','data3'])}); //숫자 값 늘리기 Firestore.instance .collection('YourCollection') .document('YourDocument') .updateData({ population: FieldValue.increment(50) }); //서버타임 스템프로 설정 Firestore.instance .collection('YourCollection') .document('YourDocument') .updateData({ population: FieldValue.serverTimestamp() });
- 문서에 중첩된 객체가 있는 경우
Firestore.instance. collection('cities').document(). setData({ name: "seoul", country: "korea" favorites : {food : "kimchijjigae", place:"insadong"} }) Firestore.instance .collection('cities') .document('1') .updateData({'favorites.place': 'gangnam'});
3. 데이터 삭제
- 문서를 삭제할 경우
Firestore.instance.collection("YourCollection") .document("YourDocument") .delete();
단, 해당 코드는 하위 컬렉션까지 삭제하지 못한다.
하위 컬렉션을 삭제하기 위해서는 console창에 들어가 수동으로 삭제하거나 파이어베이스 도큐먼트를 참고하자
https://firebase.google.com/docs/firestore/solutions/delete-collections- 문서 내 필드를 삭제할 경우
Firestore.instance.collection("YourCollection") .document("YourDocument") .updateData({ population: FieldValue.delete() });
4. 데이터 검색
firestore 내에 저장된 데이터를 일회성으로 혹은 실시간으로 불러올 수 있다.
1) 일회성 데이터 불러오기
- 단일 문서의 데이터 불러오기 - 가장 최신 문서의 스냅샷이다.
Firestore.instance .collection('YourCollection') .document('YourDocument-name') .getDocuments() .then((DocumentSnapshot ds) { ds.data["name"]; });
- 컬렉션에서 여러 Document data 가져오기
컬렉션의 문서들을 쿼리해 조건에 맞는 여러 문서들을 검색해 불러온다.
Firestore.instance .collection('talks') .where("topic", isEqualTo: "flutter") .getDocuments().then((QuerySnapshot ds) { ds.documents.forEach((doc) => print(doc["title"])); });
2) 실시간 데이터 불러오기
콜백이 최초로 호출될 때는 단일 문서의 현재 내용으로 문서 스냅샷이 즉시 생성된다.
그 후 내용이 변경될 때마다 콜백이 호출되어 문서 스냅샷을 업데이트 한다.
-
실시간 단일 문서 데이터 가져오기
Firestore.instance .collection('talks') .document('your-document') .snapshots() .listen((DocumentSnapshot ds){ ds.data["title"]; });
- 컬렉션에서 여러 문서 데이터 가져오기
Firestore.instance .collection('talks') .where("topic", isEqualTo: "flutter") .snapshots() .listen((data) => data.documents.forEach((doc) => print(doc["title"])));
-
지정한 Collection 내 document들 참조 (CollectionReference)
class BookList extends StatelessWidget { @override Widget build(BuildContext context) { return StreamBuilder<QuerySnapshot>( stream: Firestore.instance.collection('books').snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (snapshot.hasError) return new Text('Error: ${snapshot.error}'); switch (snapshot.connectionState) { case ConnectionState.waiting: return new Text('Loading...'); default: return new ListView( children: snapshot.data.documents.map((DocumentSnapshot document) { return new ListTile( title: new Text(document['title']), subtitle: new Text(document['author']), ); }).toList(), ); } }, ); } }
참고사이트
반응형'앱 개발 > Flutter' 카테고리의 다른 글
[Flutter] Material Design Components - layout (app bar / navigation) (0) 2021.01.11 flutter 차트 패키지 (syncfusion_flutter_charts) (0) 2021.01.04 [FLUTTER] 스크린 방향 설정 (0) 2020.01.21 [FLUTTER/Firebase] Firestore 연동 데이터 쿼리 설명 및 코드 (0) 2019.12.31 [안드로이드 스튜디오] 최신버전 안드로이드 스튜디오 로그캣 실행 (0) 2019.12.31