[flutter] Firebase Database와 플러터를 이용한 건강 관리 애플리케이션 만들기

이번 블로그에서는 Firebase Database와 플러터(Flutter)를 이용하여 건강 관리 애플리케이션을 만드는 방법에 대해 설명하겠습니다.

우선, Firebase Database는 Google의 데이터베이스 서비스로, 실시간으로 데이터를 동기화하여 앱 개발에 매우 편리한 기능을 제공합니다. 플러터는 Google에서 개발한 크로스 플랫폼 모바일 앱 개발 프레임워크로, 한 번의 개발로 iOS와 Android 앱을 동시에 개발할 수 있습니다.

1. Firebase 프로젝트 설정

먼저, Firebase 콘솔에서 새로운 프로젝트를 생성해야 합니다. 프로젝트 설정을 완료한 후에는 앱을 추가하고 Firebase SDK를 다운로드해야 합니다. SDK 다운로드 및 설정은 Firebase 콘솔에서 자세한 가이드를 확인할 수 있습니다.

2. 플러터 앱 프로젝트 생성

Firebase 프로젝트를 설정한 후, 플러터 앱 프로젝트를 생성해야 합니다. 터미널에서 다음 명령어를 실행하여 플러터 앱 프로젝트를 생성할 수 있습니다.

flutter create health_app

3. Firebase SDK 추가

Firebase SDK를 사용하기 위해 앱에 의존성을 추가해야 합니다. pubspec.yaml 파일을 열고 아래의 코드를 추가하세요.

dependencies:
  firebase_core: ^1.0.0
  firebase_database: ^6.1.0

의존성을 추가한 후, 터미널에서 다음 명령어를 실행하여 패키지를 다운로드하세요.

flutter pub get

4. Firebase 초기화

Firebase를 사용하기 위해 앱을 초기화해야 합니다. main.dart 파일을 열고 아래의 코드를 추가하세요.

import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

5. Firebase Database 사용

Firebase Database를 사용하여 건강 정보를 저장하고 읽어오는 기능을 구현해보겠습니다. main.dart 파일을 열고 아래의 코드를 추가하세요.

import 'package:firebase_database/firebase_database.dart';

// Firebase Database 인스턴스 생성
final FirebaseDatabase database = FirebaseDatabase.instance;

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Health App',
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Health App'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Save Data'),
          onPressed: () {
            // 데이터 저장
            database.reference().child('health_data').push().set({
              'date': DateTime.now().toString(),
              'steps': 5000,
              'calories': 200
            });
          },
        ),
      ),
    );
  }
}

위의 코드에서는 앱의 홈 화면에서 “Save Data” 버튼이 클릭되면 현재 시간, 걸음 수, 칼로리로 구성된 데이터를 Firebase Database에 저장하는 기능을 구현하였습니다.

6. 데이터 읽어오기

이번에는 저장된 데이터를 읽어와서 화면에 표시하는 기능을 추가해보겠습니다. HomePage 위젯 코드를 수정하여 아래의 코드를 추가하세요.

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Health App'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            RaisedButton(
              child: Text('Save Data'),
              onPressed: () {
                // 데이터 저장
                database.reference().child('health_data').push().set({
                  'date': DateTime.now().toString(),
                  'steps': 5000,
                  'calories': 200
                });
              },
            ),
            SizedBox(height: 20),
            Text(
              'Health Data',
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 10),
            StreamBuilder(
              stream: database.reference().child('health_data').onValue,
              builder: (BuildContext context, AsyncSnapshot<Event> snapshot) {
                if (snapshot.hasData) {
                  List<Item> items = [];
                  DataSnapshot dataSnapshot = snapshot.data.snapshot;
                  dataSnapshot.value.forEach((key, value) {
                    items.add(Item.fromSnapshot(key, value));
                  });
                  return Column(
                    children: items.map((item) {
                      return ListTile(
                        title: Text(item.date),
                        subtitle: Text('Steps: ${item.steps}, Calories: ${item.calories}'),
                      );
                    }).toList(),
                  );
                } else {
                  return CircularProgressIndicator();
                }
              },
            ),
          ],
        ),
      ),
    );
  }
}

class Item {
  final String key;
  final String date;
  final int steps;
  final int calories;

  Item.fromSnapshot(this.key, Map data)
      : date = data['date'],
        steps = data['steps'],
        calories = data['calories'];
}

위의 코드에서는 StreamBuilder를 통해 Firebase Database에 저장된 데이터를 실시간으로 읽어와서 화면에 표시합니다. Item 클래스를 사용하여 데이터를 가공하고, ListTile을 통해 각 항목을 표시합니다.

결론

이제 Firebase Database와 플러터를 이용한 건강 관리 애플리케이션을 만들 수 있게 되었습니다. Firebase를 사용하면 데이터 관리와 실시간 업데이트 기능을 간편하게 구현할 수 있으며, 플러터를 사용하면 손쉽게 멀티 플랫폼 앱을 개발할 수 있습니다.

Firebase와 플러터에 대한 자세한 내용은 아래의 참고 자료를 확인해주세요.

해당 예제 코드에 대한 전체 소스 코드는 GitHub에서 확인하실 수 있습니다. 감사합니다.