<파이어베이스>
1. firebase.google.com/ 구글계정으로 로그인 -> 시작하기
2. 프로젝트 만들기 -> 약관 동의 -> 계속
3. Google 애널리틱스사용설정 체크 -> 프로젝트 만들기 -> 계속
4. 앱에 Firebase를 추가하여 시작하기 화면에서 안드로이드 아이콘 선택
5. 소스폴더 / android/app/build.gradle 에서 applicationId 으로 검색해서 패키지명 복사
5.1 패키지 이름 넣고 앱등록
6. google-services.json 다운로드
6.1 android/app 아래에 붙여넣기
7. Firebase SDK 추가 > dependencies 안의 classpath 복사
ex) classpath 'com.google.gms:google-services:4.3.10'
7.1 android 아래의 build.gradle > dependencies 에 복사
8. 앱 수준의 build.gradle > apply plugin 복사
ex) apply plugin: 'com.google.gms.google-services'
8.1 android/app 아래의 build.gradle 에 복사
9. 다음 선택
10. Cloud Firestore 선택 > 데이터베이스 만들기 > 테스트 모드로 시작 > 완료
11. pubspec.yaml 파일 열고 dependencies 항목 아래에 cloud_firestore: ^0.12.11 추가
ex)
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
cloud_firestore: ^0.12.11 //<---------------------
<old version>
cloud_firestore: ^0.9.1 //<---------------------
firebase_core: ^0.3.4
12. 컬렉션 시작 > 컬렉션 ID 입력 > 자동 ID > 필드는 데이터베이스에 맞게 추가하여 저장
13. import
ex) import 'package:cloud_firestore/cloud_firestore.dart';
StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection(_fsCollectionName).snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return CircularProgressIndicator();
}
final documents = snapshot.data!.documents;
return Expanded(
child: ListView(
//children: _todoItems.map((todo) => _buildListItem(todo)).toList(),
children: documents.map((doc) => _buildListItem(doc)).toList(),
),
);
}
),
Widget _buildListItem(DocumentSnapshot doc) {
final todo = ToDo(doc['title'], isDone:doc['isDone']);
..
}
Firestore.instance.collection(_fsCollectionName)
.add({'title': todo.title, 'isDone': todo.isDone});
Firestore.instance.collection(_fsCollectionName)
.document(doc.documentID).delete();
Firestore.instance.collection(_fsCollectionName)
.document(doc.documentID).updateData({'isDone': !doc['isDone']});
StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection(_fsCollectionName).snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return CircularProgressIndicator();
}
final documents = snapshot.data!.documents;
return Expanded(
child: ListView(
//children: _todoItems.map((todo) => _buildListItem(todo)).toList(),
children: documents.map((doc) => _buildListItem(doc)).toList(),
),
);
}
),
Widget _buildListItem(DocumentSnapshot doc) {
final todo = ToDo(doc['title'], isDone:doc['isDone']);
..
}
Firestore.instance.collection(_fsCollectionName)
.add({'title': todo.title, 'isDone': todo.isDone});
Firestore.instance.collection(_fsCollectionName)
.document(doc.documentID).delete();
Firestore.instance.collection(_fsCollectionName)
.document(doc.documentID).updateData({'isDone': !doc['isDone']});
생성자에서 사용 가능
Future<List<Todo>> getTodos() async {
QuerySnapShot snapshot =
await Firestore.instance.collection("todos").getDocuments();
AllTodos todos = AllTodos.fromSnapshot(snapshot); //<<- 생성자
return todos.todos;
factory AllTods.fromSnapshot(QuerySnapShot s) {
List<Todo> todos = s.document.map<Todo>(
(documentSnapshot ds) {
return Todo.fromJson(ds.data);
}).toList();
return AllTodos(todos);
}
..
}
class UserDTO {
final String name;
final String address;
UserDTO(this.name, this.address);
}
void createData() {
UserDTO dto = USerDTO('하울','송도');
firestore?.collection("User")?.document("docu_id")?.set(dto);
..
}
<Query>
1. whereEqualTo
firestore?.collection("User").whereEqualTo("address", "송도")?.get()?.
addOnCompleteListener {
task -> if(task.isSuccessful) {
for( dc in task.result.documents) {
var userDTO = dc.toObject(USerDTO::class.java)
println(userDTO.toString());
}
}
}
}
2. whereGreaterThan
3. whereGreaterThanOrEqualTo
4. whereLessThan
5. whereLessThanOrEqualTo
<Push driven>(데이터가 변경될 때마다 뷰를 그려주는 실시간 반영되는 데이터베이스 방식
addSnapshotListener --> data가 변경될 때마다 계속 이벤트가 발생한다.
'Flutter' 카테고리의 다른 글
Flutter - carousel_slider (0) | 2022.02.06 |
---|---|
Flutter - 주요 단축기/배너제거/플랫폼구분 (0) | 2022.02.06 |
Flutter - File IO / Delay / 가로모드 (0) | 2022.02.06 |
Flutter - ToJson (0) | 2022.02.06 |
Flutter - Database (0) | 2022.02.06 |