Cloud Messaging Package #206
| @ -19,5 +19,5 @@ import 'package:flutter_bloc/flutter_bloc.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart'; | ||||
| 
 | ||||
| extension BuildContextExtension on BuildContext { | ||||
|   CloudmessagingCubit get cloudMessaging => read<CloudmessagingCubit>(); | ||||
|   CloudMessagingCubit get cloudMessaging => read<CloudMessagingCubit>(); | ||||
| } | ||||
|  | ||||
| @ -64,7 +64,7 @@ class CloudMessagingRepositoryImpl extends CloudMessagingRepository { | ||||
|   @override | ||||
|   FutureOrResult<Stream<RemoteNotification>> onNotification() => | ||||
|       Result.tryCatchAsync( | ||||
|         _notificationRemoteDataSource.onNotificationBackground, | ||||
|         _notificationRemoteDataSource.onNotification, | ||||
|         (error) => error is AppException | ||||
|             ? error | ||||
|             : NotificationException(error.toString()), | ||||
|  | ||||
| @ -23,11 +23,13 @@ import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notif | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; | ||||
| import 'package:wyatt_type_utils/wyatt_type_utils.dart'; | ||||
| 
 | ||||
| class ListenNotification extends StreamUseCase<NoParam, RemoteNotification> { | ||||
| class ListenNotificationUseCase | ||||
|     extends StreamUseCase<NoParam, RemoteNotification> { | ||||
|   final CloudMessagingRepository _notificationRepository; | ||||
| 
 | ||||
|   ListenNotification({required CloudMessagingRepository notificationRepository}) | ||||
|       : _notificationRepository = notificationRepository; | ||||
|   ListenNotificationUseCase({ | ||||
|     required CloudMessagingRepository notificationRepository, | ||||
|   }) : _notificationRepository = notificationRepository; | ||||
|   @override | ||||
|   FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async { | ||||
|     Stream<RemoteNotification>? notificationStream; | ||||
| @ -53,11 +55,11 @@ class ListenNotification extends StreamUseCase<NoParam, RemoteNotification> { | ||||
|           await _notificationRepository.onNotificationForeground(); | ||||
| 
 | ||||
|       if (notificationForegroundStreamResponse.isErr) { | ||||
|         return Err(notificationBackgroundStreamResponse.err!); | ||||
|         return Err(notificationForegroundStreamResponse.err!); | ||||
|       } | ||||
| 
 | ||||
|       notificationStream = Rx.merge([ | ||||
|         notificationBackgroundStreamResponse.ok!, | ||||
|         notificationForegroundStreamResponse.ok!, | ||||
|         notificationBackgroundStreamResponse.ok!, | ||||
|       ]); | ||||
|     } | ||||
|  | ||||
| @ -19,11 +19,12 @@ import 'dart:async'; | ||||
| import 'package:wyatt_architecture/wyatt_architecture.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; | ||||
| 
 | ||||
| class Subscribe extends AsyncUseCase<String, void> { | ||||
| class SubscribeToNotificationTopicUseCase extends AsyncUseCase<String, void> { | ||||
|   final CloudMessagingRepository _notificationRepository; | ||||
| 
 | ||||
|   Subscribe({required CloudMessagingRepository notificationRepository}) | ||||
|       : _notificationRepository = notificationRepository; | ||||
|   SubscribeToNotificationTopicUseCase({ | ||||
|     required CloudMessagingRepository notificationRepository, | ||||
|   }) : _notificationRepository = notificationRepository; | ||||
| 
 | ||||
|   @override | ||||
|   FutureOr<void> onStart(String? params) { | ||||
| @ -19,11 +19,13 @@ import 'dart:async'; | ||||
| import 'package:wyatt_architecture/wyatt_architecture.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart'; | ||||
| 
 | ||||
| class Unsubscribe extends AsyncUseCase<String, void> { | ||||
| class UnsubscribeFromNotificationTopicUseCase | ||||
|     extends AsyncUseCase<String, void> { | ||||
|   final CloudMessagingRepository _notificationRepository; | ||||
| 
 | ||||
|   Unsubscribe({required CloudMessagingRepository notificationRepository}) | ||||
|       : _notificationRepository = notificationRepository; | ||||
|   UnsubscribeFromNotificationTopicUseCase({ | ||||
|     required CloudMessagingRepository notificationRepository, | ||||
|   }) : _notificationRepository = notificationRepository; | ||||
| 
 | ||||
|   @override | ||||
|   FutureOr<void> onStart(String? params) { | ||||
| @ -18,5 +18,5 @@ export './get_cloud_messaging_token_use_case.dart'; | ||||
| export './init_cloud_messaging_use_case.dart'; | ||||
| export './listen_notification_use_case.dart'; | ||||
| export './request_cloud_messaging_permission_use_case.dart'; | ||||
| export './subscribe.dart'; | ||||
| export './unsubscribe.dart'; | ||||
| export 'subscribe_to_notification_topic_use_case.dart'; | ||||
| export 'unsubscribe_from_notification_topic_use_case.dart'; | ||||
|  | ||||
| @ -0,0 +1,2 @@ | ||||
| export './notifications/bloc/cloud_messaging_cubit.dart'; | ||||
| export './notifications/screens/cloud_messaging_screen.dart'; | ||||
| @ -1,11 +1,3 @@ | ||||
| import 'dart:async'; | ||||
| 
 | ||||
| import 'package:equatable/equatable.dart'; | ||||
| import 'package:flutter_bloc/flutter_bloc.dart'; | ||||
| import 'package:wyatt_architecture/wyatt_architecture.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe.dart'; | ||||
| // Copyright (C) 2023 WYATT GROUP | ||||
| // Please see the AUTHORS file for details. | ||||
| // | ||||
| @ -22,22 +14,31 @@ import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe.da | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe.dart'; | ||||
| import 'dart:async'; | ||||
| 
 | ||||
| import 'package:equatable/equatable.dart'; | ||||
| import 'package:flutter_bloc/flutter_bloc.dart'; | ||||
| import 'package:wyatt_architecture/wyatt_architecture.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/entities/remote_notifications.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/listen_notification_use_case.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/subscribe_to_notification_topic_use_case.dart'; | ||||
| 
 | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/domain/usecases/unsubscribe_from_notification_topic_use_case.dart'; | ||||
| 
 | ||||
| part 'cloud_messaging_state.dart'; | ||||
| 
 | ||||
| typedef OnNotification = void Function(RemoteNotification); | ||||
| 
 | ||||
| class CloudmessagingCubit extends Cubit<CloudmessagingState> { | ||||
|   final ListenNotification _listenNotification; | ||||
|   final Subscribe _subscribe; | ||||
|   final Unsubscribe _unsubscribe; | ||||
| class CloudMessagingCubit extends Cubit<CloudmessagingState> { | ||||
|   final ListenNotificationUseCase _listenNotification; | ||||
|   final SubscribeToNotificationTopicUseCase? _subscribe; | ||||
|   final UnsubscribeFromNotificationTopicUseCase? _unsubscribe; | ||||
| 
 | ||||
|   final OnNotification? handleNotification; | ||||
|   CloudmessagingCubit({ | ||||
|     required ListenNotification listenNotification, | ||||
|     required Subscribe subscribe, | ||||
|     required Unsubscribe unsubscribe, | ||||
|   CloudMessagingCubit({ | ||||
|     required ListenNotificationUseCase listenNotification, | ||||
|     SubscribeToNotificationTopicUseCase? subscribe, | ||||
|     UnsubscribeFromNotificationTopicUseCase? unsubscribe, | ||||
|     this.handleNotification, | ||||
|   })  : _listenNotification = listenNotification, | ||||
|         _subscribe = subscribe, | ||||
| @ -53,7 +54,7 @@ class CloudmessagingCubit extends Cubit<CloudmessagingState> { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   FutureOr<void> subscribe(String topic) => _subscribe.execute(topic); | ||||
|   FutureOr<void> subscribe(String topic) => _subscribe?.execute(topic); | ||||
| 
 | ||||
|   FutureOr<void> unsubscribe(String topic) => _unsubscribe.execute(topic); | ||||
|   FutureOr<void> unsubscribe(String topic) => _unsubscribe?.execute(topic); | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,42 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||
| import 'package:wyatt_cloud_messaging_bloc_base/src/src.dart'; | ||||
| 
 | ||||
| class CloudMessagingWrapperScreen | ||||
|     extends CubitScreen<CloudMessagingCubit, CloudmessagingState> { | ||||
|   const CloudMessagingWrapperScreen({ | ||||
|     required this.child, | ||||
|     required this.onNotification, | ||||
|     required this.listenNotificationUseCase, | ||||
|     this.subscribeToNotificationTopicUseCase, | ||||
|     this.unsubscribeFromNotificationTopicUseCase, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
|   final ListenNotificationUseCase listenNotificationUseCase; | ||||
|   final SubscribeToNotificationTopicUseCase? | ||||
|       subscribeToNotificationTopicUseCase; | ||||
|   final UnsubscribeFromNotificationTopicUseCase? | ||||
|       unsubscribeFromNotificationTopicUseCase; | ||||
| 
 | ||||
|   final OnNotification onNotification; | ||||
| 
 | ||||
|   final Widget child; | ||||
| 
 | ||||
|   @override | ||||
|   CloudMessagingCubit create(BuildContext context) => CloudMessagingCubit( | ||||
|         listenNotification: listenNotificationUseCase, | ||||
|         subscribe: subscribeToNotificationTopicUseCase, | ||||
|         unsubscribe: unsubscribeFromNotificationTopicUseCase, | ||||
|       )..listenNotification(); | ||||
| 
 | ||||
|   @override | ||||
|   void onListen(BuildContext context, CloudmessagingState state) { | ||||
|     if (state.remoteNotification != null) { | ||||
|       onNotification.call(state.remoteNotification!); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget onBuild(BuildContext context, CloudmessagingState state) => child; | ||||
| } | ||||
| @ -16,4 +16,5 @@ | ||||
| 
 | ||||
| export 'data/data.dart'; | ||||
| export 'domain/domain.dart'; | ||||
| export 'features/features.dart'; | ||||
| export 'features/notifications/bloc/cloud_messaging_cubit.dart'; | ||||
|  | ||||
| @ -25,6 +25,9 @@ dependencies: | ||||
|       url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ | ||||
|       name: wyatt_type_utils | ||||
|     version: ^0.0.5 | ||||
|   wyatt_bloc_helper: | ||||
|     hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ | ||||
|     version: 2.0.1 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -102,6 +102,7 @@ class CloudMessagingFirebaseDataSource extends CloudMessagingRemoteDataSource { | ||||
|         final notification = RemoteNotification( | ||||
|           title: message.notification?.title, | ||||
|           body: message.notification?.body, | ||||
|           data: message.data, | ||||
|         ); | ||||
| 
 | ||||
|         final android = message.notification?.android; | ||||
|  | ||||
| @ -0,0 +1 @@ | ||||
| export './data/data_sources/cloud_messaging_firebase_data_source.dart'; | ||||
| @ -20,3 +20,4 @@ library wyatt_cloud_messaging_bloc_firebase; | ||||
| export 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart'; | ||||
| 
 | ||||
| export 'src/cloud_messaging_bloc_firebase.dart'; | ||||
| export 'src/src.dart'; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user