의료 기록을 관리하는 애플리케이션을 만들기 위해 Firebase Firestore와 플러터(Flutter)를 사용하는 방법을 알아보겠습니다. Firebase Firestore는 클라우드 기반의 NoSQL 데이터베이스로, 실시간 데이터 동기화 및 강력한 쿼리 기능을 제공합니다. 플러터는 Google에서 개발한 UI 프레임워크로, 다양한 플랫폼에서 동작하는 애플리케이션을 빠르게 개발할 수 있습니다.
필요한 기술 스택
- Flutter SDK 설치
- Firebase 계정 생성 및 프로젝트 설정
- Flutter Firebase 패키지 추가
1. Firebase 프로젝트 설정
- Firebase 콘솔(https://console.firebase.google.com)에 접속하여 프로젝트를 생성합니다.
- 생성한 프로젝트에 Firestore를 추가합니다.
- Firebase SDK 구성 파일(
google-services.json
또는GoogleService-Info.plist
)을 다운로드하고 프로젝트에 추가합니다.
2. Flutter 프로젝트 설정
- Flutter SDK를 설치합니다. (https://flutter.dev)
- Flutter 프로젝트를 생성합니다. (예:
flutter create medical_records_app
) pubspec.yaml
파일에 Firebase 및 Firestore 관련 패키지를 추가합니다.
dependencies:
flutter:
sdk: flutter
firebase_core: ^1.0.0
cloud_firestore: ^2.5.0
- 패키지를 설치합니다. (
flutter pub get
명령어 실행)
3. Firebase 초기화
Firebase를 초기화하여 응용 프로그램에 연결합니다. main.dart
파일의 main
함수에 다음 코드를 추가합니다.
import 'package:firebase_core/firebase_core.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
4. 데이터베이스 연결
Firestore 데이터베이스에 연결하고 데이터를 가져오거나 추가하는 방법을 알아봅시다.
import 'package:cloud_firestore/cloud_firestore.dart';
class MedicalRecordsService {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final String collectionName = 'medical_records';
Future<List<MedicalRecord>> getMedicalRecords() async {
var snapshot = await _firestore.collection(collectionName).get();
return snapshot.docs.map((doc) => MedicalRecord.fromSnapshot(doc)).toList();
}
Future<void> addMedicalRecord(MedicalRecord medicalRecord) async {
await _firestore.collection(collectionName).add(medicalRecord.toMap());
}
}
class MedicalRecord {
final String name;
final String diagnosis;
MedicalRecord(this.name, this.diagnosis);
Map<String, dynamic> toMap() {
return {
'name': name,
'diagnosis': diagnosis,
};
}
factory MedicalRecord.fromSnapshot(DocumentSnapshot snapshot) {
var data = snapshot.data();
return MedicalRecord(data['name'], data['diagnosis']);
}
}
위 코드에서 MedicalRecordsService
클래스는 Firestore 데이터베이스와 통신하기 위한 기능을 제공합니다. getMedicalRecords
함수는 모든 의료 기록을 가져옵니다. addMedicalRecord
함수는 새로운 의료 기록을 추가합니다. MedicalRecord
클래스는 의료 기록 객체를 나타내며, toMap
함수를 통해 Firestore에 저장할 수 있는 형태로 변환합니다. fromSnapshot
함수는 Firestore에서 가져온 데이터를 MedicalRecord
객체로 변환합니다.
5. 플러터 화면 구성
의료 기록을 표시하고 추가하기 위한 플러터 화면을 구성해봅시다.
import 'package:flutter/material.dart';
class MedicalRecordsPage extends StatelessWidget {
final MedicalRecordsService _medicalRecordsService = MedicalRecordsService();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('의료 기록'),
),
body: FutureBuilder<List<MedicalRecord>>(
future: _medicalRecordsService.getMedicalRecords(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
var medicalRecord = snapshot.data[index];
return ListTile(
title: Text(medicalRecord.name),
subtitle: Text(medicalRecord.diagnosis),
);
},
);
} else {
return Text('데이터 없음');
}
} else {
return CircularProgressIndicator();
}
},
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
var newMedicalRecord = MedicalRecord('새로운 환자', '진단 내용');
_medicalRecordsService.addMedicalRecord(newMedicalRecord);
},
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '의료 기록 앱',
theme: ThemeData(primarySwatch: Colors.blue),
home: MedicalRecordsPage(),
);
}
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
위 코드는 플러터 앱의 화면을 구성하는 코드입니다. 기록된 의료 기록들을 화면에 표시하고, FloatingActionButton을 통해 새로운 의료 기록을 추가할 수 있습니다.
이제 Firebase Firestore와 플러터를 이용해 의료 기록 애플리케이션을 만들 수 있습니다. Firebase를 통해 실시간으로 데이터를 동기화하고 저장하며, 플러터를 사용하여 멋진 UI를 구성할 수 있습니다.