Flutter Web

[Flutter Web] Firestore Database 연동하기

내이름알프 2022. 8. 15. 16:34

지난 포스팅에서 Flutterfire cli 를 통해서 Firebase core 기본 연동을 해보았습니다.

 

 

이제 Firebase의 기본 데이터베이스인 Firestore 데이터베이스 연동을 간단하게 해보겠습니다.

우리는 Flutterfire를 통해 Firebase 사용 세팅을 했기 때문에 간단한 add 명령을 통해 Firestore 패키지를 추가할 수 있습니다.

 

$ flutter pub add cloud_firestore

 

 

dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  get: ^4.6.5
  percent_indicator: ^3.4.0
  intl: ^0.17.0
  flutter_svg: ^0.23.0+1
  eva_icons_flutter: ^3.0.2
  sidebarx: ^0.10.0
  firebase_core: ^1.20.1
  cloud_firestore: ^3.4.4

 

pubspec.yaml파일의 마지막 줄을 보시면 cloud_firestore의 최신 버전이 추가된 것을 볼수 있네요.

 

간단한 예로 cloud_firestore에 있는 user의 데이터를 가져오는 예를 보겠습니다.

저는 Firestore에 "users"라는 collection이 있고, 그 안에 uid를 가지고 있는 여러 document가 이미 생성되어 있습니다.

 

"users" collection에 저장되어 있는 저의 uid를 통해 데이터를 가져와 보겠습니다.

 

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class UserInfo extends StatefulWidget {
  const UserInfo({Key? key}): super(key: key);
  @override
  State<UserInfo> createState() => _UserInfoState();
}

class _UserInfoState extends State<UserInfo> {
  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');
    return FutureBuilder(
        future: users.doc('YqZLNjxa1cfcCwXGyMJGXtSOJiV2').get(),
        builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
          if (snapshot.hasError) {
            return Text("Something went wrong");
          }

          if (snapshot.hasData && !snapshot.data!.exists) {
            return Text("Document does not exist");
          }

          if (snapshot.connectionState == ConnectionState.done) {
            Map<String, dynamic> data =
                snapshot.data!.data() as Map<String, dynamic>;
            return Text("Full Name : ${data['nick_name']}", style: TextStyle(fontSize: 20),);
          }

          return Text("loading");
        }
    );
  }
}

 

FutureBuilder를 사용하여 데이터베이스에서 uid 에 해당하는 document를 가져와서 화면에 nick name 을 출력해 보았습니다.

 

 

저의 경우에는 Firestore에 이미 데이터가 있을 대는 가정하여 데이터를 가져오는 간단한 작업을 해보았습니다.

Flutter를 통해서 app 작업을 해보신 분이라면, flutterfire cli 로 프로젝트만 연동해주면, 모든 데이터가 web 에서 그대로 작동하는 것을 볼 수 있습니다.

이제 Firestore 가 붙는 것을 확인하였으니, 이제 진짜 필요한 기능들을 기능들을 작업해보겠습니다.