Flutter Firebase Firestore 연동
Firebase Firestore는 클라우드 기반의 NoSQL 데이터베이스로, Flutter 앱에서 실시간 데이터베이스 기능을 쉽게 구현할 수 있습니다. Firestore와 Flutter를 연동하는 방법을 단계별로 설명하겠습니다.
1. Firebase 설정
Firebase 프로젝트 생성
- Firebase Console에 로그인합니다.
- 새 프로젝트를 생성합니다.
Firebase 구성 파일 다운로드
- 프로젝트 설정으로 이동합니다.
- Android 앱을 추가하고 패키지 이름을 입력합니다.
- google-services.json파일을 다운로드하여- android/app폴더에 넣습니다.
- iOS 앱을 추가하고 패키지 이름을 입력합니다.
- GoogleService-Info.plist파일을 다운로드하여- ios/Runner폴더에 넣습니다.
2. Flutter 프로젝트 설정
Firebase 패키지 추가
pubspec.yaml 파일에 Firebase 및 Firestore 관련 패키지를 추가합니다.
dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^2.1.0
  cloud_firestore: ^4.1.0Android 설정
android/build.gradle 파일에 다음 내용을 추가합니다.
buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.3.10'
    }
}android/app/build.gradle 파일의 맨 아래에 다음 내용을 추가합니다.
apply plugin: 'com.google.gms.google-services'iOS 설정
ios/Runner/Info.plist 파일에 Firebase 설정을 추가합니다.
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>YOUR_REVERSED_CLIENT_ID</string>
        </array>
    </dict>
</array>
<key>GoogleService-Info</key>
<dict>
    <!-- Add this line -->
</dict>ios/Podfile 파일을 업데이트하여 플랫폼 버전을 설정합니다.
platform :ios, '10.0'3. Firestore 연동 코드 작성
Firebase 초기화
main.dart 파일에서 Firebase를 초기화합니다.
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}Firestore 데이터 읽기 및 쓰기
Firestore 데이터베이스에서 데이터를 읽고 쓰는 예제를 보겠습니다.
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
  final TextEditingController _controller = TextEditingController();
  final CollectionReference _itemsCollection = FirebaseFirestore.instance.collection('items');
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firestore Example'),
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              controller: _controller,
              decoration: InputDecoration(labelText: 'Enter item'),
            ),
          ),
          ElevatedButton(
            onPressed: _addItem,
            child: Text('Add Item'),
          ),
          Expanded(
            child: StreamBuilder(
              stream: _itemsCollection.snapshots(),
              builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return Center(child: CircularProgressIndicator());
                }
                if (snapshot.hasError) {
                  return Center(child: Text('Error: ${snapshot.error}'));
                }
                final items = snapshot.data!.docs;
                return ListView.builder(
                  itemCount: items.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Text(items[index]['name']),
                      trailing: IconButton(
                        icon: Icon(Icons.delete),
                        onPressed: () => _deleteItem(items[index].id),
                      ),
                    );
                  },
                );
              },
            ),
          ),
        ],
      ),
    );
  }
  Future<void> _addItem() async {
    if (_controller.text.isNotEmpty) {
      await _itemsCollection.add({'name': _controller.text});
      _controller.clear();
    }
  }
  Future<void> _deleteItem(String id) async {
    await _itemsCollection.doc(id).delete();
  }
}요약
- Firebase 설정: Firebase 콘솔에서 프로젝트를 생성하고 구성 파일을 다운로드합니다.
- Flutter 프로젝트 설정: Firebase와 Firestore 패키지를 추가하고 Android 및 iOS 설정을 완료합니다.
- Firestore 연동 코드 작성: Firebase 초기화, Firestore 데이터 읽기 및 쓰기 기능을 구현합니다.
이렇게 하면 Flutter 앱에서 Firebase Firestore를 사용하여 데이터를 실시간으로 읽고 쓸 수 있습니다. Firestore를 사용하면 데이터베이스 동기화 및 관리가 용이해져 실시간 애플리케이션을 쉽게 개발할 수 있습니다.
