This commit is contained in:
parent
18fffa09fb
commit
871c52f54d
@ -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