spadr / Canaspad_Smartphone_App

GNU General Public License v3.0
0 stars 0 forks source link

✨ Feature: Implement notification system and optimize data fetching #24

Closed spadr closed 2 months ago

spadr commented 2 months ago

通知システムを実装し、データ取得処理の効率化を図りました。また、アプリケーション構造を改善し、保守性と拡張性を向上させました。

変更の詳細

  1. 通知システムの実装 (features/notification)

    • NotificationModel (features/notification/models/notification_model.dart) を定義し、通知のデータ構造を明確化しました。
    • NotificationViewModel (features/notification/viewmodels/notification_viewmodel.dart) を実装し、通知の追加、更新、削除、永続化、ローカル通知表示の機能を提供しました。
    • NotificationView (features/notification/views/notification_view.dart) を実装し、通知リストの表示、通知の削除、全通知削除の機能を提供しました。
    • ローカル通知を表示するために、flutter_local_notifications パッケージを導入しました。
    • providers.dartnotificationPluginProvidernotificationViewModelProvider を追加し、通知機能へのアクセスを提供しました。

    変更の意図: エラーや重要なイベントをユーザーに分かりやすく通知することで、アプリの使い勝手を向上させるため。

    // features/notification/viewmodels/notification_viewmodel.dart (抜粋)
    
    Future<void> addNotification(NotificationModel notification) async {
     // ... 通知の追加処理
     await _showLocalNotification(notification); // ローカル通知を表示
     // ...
    }
    
    Future<void> _showLocalNotification(NotificationModel notification) async {
     // ... ローカル通知の設定と表示処理
    }
  2. Supabase データ取得エラー時の通知表示 (core/services/supabase_service.dart)

    • RealSupabaseServicefetchAllData() において、データ取得エラーが発生した場合、NotificationViewModel を使用してエラー通知を追加するようにしました。

    変更の意図: データ取得エラー発生時にユーザーに迅速に通知し、問題解決を促すため。

    // core/services/supabase_service.dart (抜粋)
    
    class RealSupabaseService implements SupabaseService {
     // ...
     @override
     Future<void> fetchAllData() async {
       try {
         // ... データ取得処理
       } catch (e) {
         final errorNotification = NotificationModel(
           // ... エラー通知の内容設定
         );
         await _notificationViewModel.addNotification(errorNotification); // エラー通知を追加
       }
     }
    }
  3. アプリ初期化エラー時の通知表示 (features/initialization/views/initialization_view.dart)

    • InitializationView_handleError() において、初期化エラーが発生した場合、NotificationViewModel を使用してエラー通知を追加するようにしました。

    変更の意図: アプリ初期化エラー発生時にユーザーに迅速に通知し、問題解決を促すため。

    // features/initialization/views/initialization_view.dart (抜粋)
    
    Widget _handleError(BuildContext context, WidgetRef ref, Object error) {
     // ...
     WidgetsBinding.instance.addPostFrameCallback((_) async {
       await _recordErrorNotification(ref, error.toString()); // エラー通知を追加
       // ...
     });
     // ...
    }