gbc project
데이터 불러오기
final QuerySnapshot result = await Firestore.instance
.collection('users')
.where('id', isEqualTo: user.uid) // 2번에도 적용가능. where 으로 특정 필드값에 만족하는 항목 가져올수있음.
.getDocuments();
final List<DocumentSnapshot> documents = result.documents;
만약 gender가 male인 document들만 불러오고 싶다? 그럼
...where('gender' isEqualTo: 'male')... 으로 불러와서 documents[index]['name'] 이런식으로 필요한 정보 빼서 쓰면 됨.
하지만 총 남자수는 계산 안해주므로 파이어 베이스에 따로 숫자카운트해서 저장해놓은거 불러와야 할듯.
데이터 저장 형식
유저정보 :
StreamBuilder(
stream: Firestore.instance.collection('users').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(!snapshot.hasData) {
return Center(child: CircularProgressIndicator(),);
} //로딩
return Text(snapshot.data.documents[1]['name']); //가져온 user도큐먼트 1번째의 name출력
},
);
실시간 변동이 있을 때에는 2번을 추천
데이터 추가하기
Firestore.instance.collection('users').document(user.uid).setData({ //documnet(문서이름)
'hakbun' : user.email.split('@')[0],
'name' : user.displayName
collection(폴더명) , documnet( 파일명) 여기서 파일명은 기본적으로 학번으로 한다. ==> 학번 추출방법 : 로그인처럼 user를 전달받고
user.email.split('@')[0] 을 쓰면 학번짜를 수 있음.
statueful 화면이라면 widget.user.email ...으로 써야함
데이터 업데이트
Firestore.instance.collection('users').document('1000000').updateData({
'hakbun' : 'working',
'name' : 'working'
});
database가 아닌 cloud firebase(사진업로드할 때 썻던것)를 통합해서 이용하기로함.
유의점 :
firebase database는 전체 데이터 개수를 세지 않기때문에 알려면 별도의 데이터에 저장해야함
ex) 랜덤으로 불러오기위해 전체 유저수를 알아야할때 : 유저를 추가할때마다 usercount라는 데이터에 1씩 더해주는 방식
데이터 가져오는것도 streambuilder의 스냅샷을 이용하면 된다. ex)
return new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('hakbun').snapshots(), // hakbun 폴더 가져오기
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) returnCenter(child: CircularProgressIndicator(),); //데이터없으면 로딩
//implement code here :
return ListView( //이 예제는 그냥 데이터 가져와서 리스트뷰만드는 코드
children: snapshot.data.documents.map((DocumentSnapshot document) {
return ListTile(
title: Text(document['name']),
subtitle: Text(document['phone']),
);
}).toList(),
);
},
);
기본내용은 강의참고.
return StreamBuilder(
stream: Firestore.instance.collection('profile').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(!snapshot.hasData) {
return Center(child: CircularProgressIndicator(),); //데이터없으면 로딩
}
var items = snapshot.data?.documents ?? [] ; //documnets is list
return _buildListItem(context, items[3]); //one of the List
},
);
올린 사진 하나(profile 폴더의 3번째사진) 불러오기예제. streamBuilder로 실시간 업데이트.
8/28일부터 기록
8/28 To do: -구글 로그인 시 회원정보 존재하는지 체크 -> 다음화면 결정 -회원가입 폼에 필수입력 정보를 정하고 미입력시 가입하기 불가로 -회원 사진 여러장 업로드 가능 (사실상 스터디 앱 만드는데 필요 없을듯 보류.)
Done: -회원가입 페이지 사진 등록 구현 -회원가입 페이지 유저 정보 데이터베이스 업로드 구현