728x90
실시간 투표 결과 시스템 구현
프로젝트 개요
이 프로젝트는 Flutter와 Firebase를 사용하여 실시간 투표 결과를 표시하는 시스템을 구현했습니다. 사용자들은 생성된 투표 방에 참여하고, 결과를 실시간으로 확인할 수 있습니다.
주요 기능
- 실시간 투표 결과 표시
- 투표 방 목록 조회
- 각 투표의 상세 정보 표시 (참가자 수, 시작/종료 일자, 찬성/반대 비율)
- 투표 상태에 따른 UI 업데이트 (진행 중/종료)
- 푸시 알림 기능 통합
기술 스택
- Flutter
- Firebase (Firestore, Cloud Functions)
- Riverpod (상태 관리)
- Freezed (코드 생성)
- FCM (Firebase Cloud Messaging)
구현 내용
1. 실시간 데이터 처리 (ResultViewModel)
- Firestore의 실시간 스트림을 활용하여 투표 결과를 지속적으로 업데이트합니다.
- 각 투표 방에 대한 개별 스트림을 관리하여 효율적인 데이터 동기화를 구현했습니다.
void _handleRoomsSnapshot(QuerySnapshot snapshot) {
for (var change in snapshot.docChanges) {
switch (change.type) {
case DocumentChangeType.added:
_subscribeToVoteUpdates(change.doc.id);
break;
// ... 기타 케이스 처리
}
}
_updateResults(snapshot.docs);
}
2. 상태 관리 (ResultViewState)
- Freezed 라이브러리를 사용하여 타입 안전한 상태 관리를 구현했습니다.
- 로딩, 에러, 성공 상태를 명확히 구분하여 UI에 반영할 수 있도록 했습니다.
Copy@freezed
class ResultViewState with _$ResultViewState {
const factory ResultViewState.loading() = _Loading;
const factory ResultViewState.error(String message) = _Error;
const factory ResultViewState.success(List<VoteResultItem> results) = _Success;
}
3. 동적 UI 구현 (ResultView)
- 투표 결과에 따라 동적으로 UI를 업데이트합니다.
- 진행 중인 투표와 종료된 투표를 시각적으로 구분하여 표시합니다.
- 찬성/반대 비율을 그래픽으로 표현하여 직관적인 이해를 돕습니다.
Widget _buildPercentageBar(/*...*/) {
return Expanded(
child: Column(
children: [
Text('찬성: ${forPercentage.toStringAsFixed(1)}% ($guiltyCount표)'),
LinearProgressIndicator(
value: forPercentage / 100,
// ... 스타일링
),
// ... 반대 비율 표시
],
),
);
}
4. 푸시 알림 통합
- Firebase Cloud Messaging을 사용하여 푸시 알림 기능을 구현했습니다.
- 새로운 투표 방 생성 시 사용자에게 알림을 보낼 수 있습니다.
void setupPushNotifications() async {
final fcm = FirebaseMessaging.instance;
await fcm.requestPermission();
final fcmToken = await fcm.getToken();
print('FCM Token: $fcmToken');
// 토큰을 서버에 저장하는 로직 추가
}
결과 및 성과
- 실시간 데이터 동기화로 사용자 경험 향상
- 효율적인 상태 관리로 앱 성능 최적화
- 직관적인 UI로 사용자 참여도 증가
- 푸시 알림 기능으로 사용자 재방문율 향상
향후 개선 사항
- 투표 결과에 대한 더 다양한 시각화 옵션 추가
- 사용자 맞춤형 알림 설정 기능 구현
- 성능 최적화를 위한 페이지네이션 도입
- 데이터 캐싱 전략 수립으로 오프라인 지원 강화
이 프로젝트를 통해 실시간 데이터 처리, 복잡한 상태 관리, 동적 UI 구현 등 다양한 기술적 도전을 극복하며 실무 역량을 크게 향상시켰습니다. 특히 Firebase의 실시간 데이터베이스와 Flutter의 강력한 UI 구현 능력을 결합하여 사용자 중심의 애플리케이션을 개발하는 경험을 쌓았습니다.
728x90
'♠♠기술 구현' 카테고리의 다른 글
시연영상 촬영 (3) | 2024.10.05 |
---|---|
인 앱 알림 구현 과정 (2) | 2024.10.05 |
fcm 구현 과정 (1) | 2024.10.05 |
페이스북 로그인 과정 (2) | 2024.10.05 |
푸쉬알림 구현과정 (1) | 2024.10.01 |