Flutter에서 저작권 등록 상태 관리 및 사용자 알림

CHAN·2024년 11월 3일

FastAPI

목록 보기
6/9

6강: Flutter에서 저작권 등록 상태 관리 및 사용자 알림

이번 강의에서는 Flutter 앱에서 저작권 등록 상태를 실시간으로 확인하고, 사용자에게 등록 완료 알림을 표시하는 기능을 구현합니다. FastAPI 서버에서 status"registered"로 업데이트되면 Flutter 앱에 반영하여 사용자가 저작권 등록이 완료되었음을 확인할 수 있도록 합니다.


1. Firestore에서 등록 상태 실시간 수신

Flutter의 StreamBuilder를 사용하여 Firestore의 등록 상태가 변경될 때 실시간으로 Flutter 앱에 반영합니다. Firestore에서 status 필드가 "registered"로 변경되면 Flutter 앱에서 해당 변경 사항을 확인할 수 있습니다.

  1. Firestore 실시간 데이터 반영

    • StreamBuilder를 사용해 keywords 컬렉션에서 status"registered"인 항목을 확인하여 Flutter 앱에 표시합니다.
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:flutter/material.dart';
    
    class RegisteredMusicPage extends StatelessWidget {
      
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text("Registered Music")),
          body: StreamBuilder(
            stream: FirebaseFirestore.instance
                .collection('keywords')
                .where('status', isEqualTo: 'registered')
                .snapshots(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (!snapshot.hasData) return CircularProgressIndicator();
    
              final registeredDocs = snapshot.data!.docs;
    
              return ListView.builder(
                itemCount: registeredDocs.length,
                itemBuilder: (context, index) {
                  final doc = registeredDocs[index];
                  final keyword = doc['keyword'];
                  final fileUrl = doc['fileUrl'];
    
                  return ListTile(
                    title: Text("Registered: $keyword"),
                    subtitle: Text("URL: $fileUrl"),
                    trailing: Icon(Icons.check_circle, color: Colors.green),
                  );
                },
              );
            },
          ),
        );
      }
    }
    • 이 코드는 status"registered"로 설정된 항목을 실시간으로 가져와 리스트 형태로 표시합니다. 각 항목은 저작권 등록이 완료된 음악 파일을 나타냅니다.

2. 사용자에게 등록 완료 알림 표시

Flutter 앱에서 저작권 등록 상태가 업데이트되면 사용자에게 알림을 표시하여 등록 완료를 쉽게 확인할 수 있도록 합니다.

  1. 로컬 알림 패키지 설치

    • Flutter에서 로컬 알림을 사용하기 위해 flutter_local_notifications 패키지를 설치합니다.
      dependencies:
        flutter_local_notifications: latest_version
    • 설치 후 flutter pub get 명령어로 패키지를 설치합니다.
  2. 알림 초기화 설정

    • Flutter 앱 시작 시 알림 초기화를 설정하고, 저작권 등록이 완료될 때마다 알림이 표시되도록 구현합니다.
    import 'package:flutter/material.dart';
    import 'package:flutter_local_notifications/flutter_local_notifications.dart';
    
    final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
        FlutterLocalNotificationsPlugin();
    
    Future<void> initializeNotifications() async {
      const AndroidInitializationSettings initializationSettingsAndroid =
          AndroidInitializationSettings('@mipmap/ic_launcher');
      final InitializationSettings initializationSettings = InitializationSettings(
        android: initializationSettingsAndroid,
      );
      await flutterLocalNotificationsPlugin.initialize(initializationSettings);
    }
    
    Future<void> showNotification(String title, String body) async {
      const AndroidNotificationDetails androidPlatformChannelSpecifics =
          AndroidNotificationDetails(
              'your_channel_id', 'your_channel_name',
              importance: Importance.max, priority: Priority.high, showWhen: false);
      const NotificationDetails platformChannelSpecifics =
          NotificationDetails(android: androidPlatformChannelSpecifics);
      await flutterLocalNotificationsPlugin.show(
          0, title, body, platformChannelSpecifics);
    }
  3. Firestore 변경 감지 및 알림 표시

    • StreamBuilder를 사용하여 Firestore에서 status"registered"로 변경된 항목을 감지하고, 해당 항목에 대해 알림을 표시합니다.
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:flutter/material.dart';
    
    class MusicNotificationPage extends StatefulWidget {
      
      _MusicNotificationPageState createState() => _MusicNotificationPageState();
    }
    
    class _MusicNotificationPageState extends State<MusicNotificationPage> {
      
      void initState() {
        super.initState();
        initializeNotifications();
      }
    
      
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text("Music Notifications")),
          body: StreamBuilder(
            stream: FirebaseFirestore.instance
                .collection('keywords')
                .where('status', isEqualTo: 'registered')
                .snapshots(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (!snapshot.hasData) return CircularProgressIndicator();
    
              final registeredDocs = snapshot.data!.docs;
    
              return ListView.builder(
                itemCount: registeredDocs.length,
                itemBuilder: (context, index) {
                  final doc = registeredDocs[index];
                  final keyword = doc['keyword'];
    
                  // 알림 표시
                  showNotification(
                    "Copyright Registered",
                    "The music for keyword '$keyword' is now registered!",
                  );
    
                  return ListTile(
                    title: Text("Registered: $keyword"),
                    trailing: Icon(Icons.check_circle, color: Colors.green),
                  );
                },
              );
            },
          ),
        );
      }
    }
    • showNotification 함수는 status"registered"로 변경된 항목에 대해 알림을 표시하여 사용자에게 저작권 등록 완료를 알립니다.
    • 사용자에게 Registered: [키워드] 형식으로 알림이 전송됩니다.

이번 강의 요약

  • Flutter 앱에서 Firestore의 status"registered"로 변경될 때 실시간으로 확인할 수 있도록 StreamBuilder를 사용했습니다.
  • Flutter에서 저작권 등록 완료 시 사용자에게 로컬 알림을 통해 등록 상태를 알리는 기능을 구현했습니다.

다음 강의에서는 프로젝트 배포 및 유지 관리를 통해 FastAPI 서버와 Flutter 앱을 클라우드 및 앱 마켓에 배포하고, Firebase를 통한 성능 최적화와 유지 관리 방법을 다루겠습니다.

profile
프로그래머

0개의 댓글