Flutter

Flutter - Firebase 설정

kakaroo 2022. 2. 6. 14:03
반응형

<파이어베이스>


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