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';
|
import 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart';
|
||||||
|
|
||||||
extension BuildContextExtension on BuildContext {
|
extension BuildContextExtension on BuildContext {
|
||||||
CloudmessagingCubit get cloudMessaging => read<CloudmessagingCubit>();
|
CloudMessagingCubit get cloudMessaging => read<CloudMessagingCubit>();
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ class CloudMessagingRepositoryImpl extends CloudMessagingRepository {
|
|||||||
@override
|
@override
|
||||||
FutureOrResult<Stream<RemoteNotification>> onNotification() =>
|
FutureOrResult<Stream<RemoteNotification>> onNotification() =>
|
||||||
Result.tryCatchAsync(
|
Result.tryCatchAsync(
|
||||||
_notificationRemoteDataSource.onNotificationBackground,
|
_notificationRemoteDataSource.onNotification,
|
||||||
(error) => error is AppException
|
(error) => error is AppException
|
||||||
? error
|
? error
|
||||||
: NotificationException(error.toString()),
|
: 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_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.dart';
|
||||||
import 'package:wyatt_type_utils/wyatt_type_utils.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;
|
final CloudMessagingRepository _notificationRepository;
|
||||||
|
|
||||||
ListenNotification({required CloudMessagingRepository notificationRepository})
|
ListenNotificationUseCase({
|
||||||
: _notificationRepository = notificationRepository;
|
required CloudMessagingRepository notificationRepository,
|
||||||
|
}) : _notificationRepository = notificationRepository;
|
||||||
@override
|
@override
|
||||||
FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async {
|
FutureOrResult<Stream<RemoteNotification>> execute(NoParam? params) async {
|
||||||
Stream<RemoteNotification>? notificationStream;
|
Stream<RemoteNotification>? notificationStream;
|
||||||
@ -53,11 +55,11 @@ class ListenNotification extends StreamUseCase<NoParam, RemoteNotification> {
|
|||||||
await _notificationRepository.onNotificationForeground();
|
await _notificationRepository.onNotificationForeground();
|
||||||
|
|
||||||
if (notificationForegroundStreamResponse.isErr) {
|
if (notificationForegroundStreamResponse.isErr) {
|
||||||
return Err(notificationBackgroundStreamResponse.err!);
|
return Err(notificationForegroundStreamResponse.err!);
|
||||||
}
|
}
|
||||||
|
|
||||||
notificationStream = Rx.merge([
|
notificationStream = Rx.merge([
|
||||||
notificationBackgroundStreamResponse.ok!,
|
notificationForegroundStreamResponse.ok!,
|
||||||
notificationBackgroundStreamResponse.ok!,
|
notificationBackgroundStreamResponse.ok!,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,12 @@ import 'dart:async';
|
|||||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||||
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.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;
|
final CloudMessagingRepository _notificationRepository;
|
||||||
|
|
||||||
Subscribe({required CloudMessagingRepository notificationRepository})
|
SubscribeToNotificationTopicUseCase({
|
||||||
: _notificationRepository = notificationRepository;
|
required CloudMessagingRepository notificationRepository,
|
||||||
|
}) : _notificationRepository = notificationRepository;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<void> onStart(String? params) {
|
FutureOr<void> onStart(String? params) {
|
@ -19,11 +19,13 @@ import 'dart:async';
|
|||||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||||
import 'package:wyatt_cloud_messaging_bloc_base/src/domain/repositories/cloud_messaging_repository.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;
|
final CloudMessagingRepository _notificationRepository;
|
||||||
|
|
||||||
Unsubscribe({required CloudMessagingRepository notificationRepository})
|
UnsubscribeFromNotificationTopicUseCase({
|
||||||
: _notificationRepository = notificationRepository;
|
required CloudMessagingRepository notificationRepository,
|
||||||
|
}) : _notificationRepository = notificationRepository;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<void> onStart(String? params) {
|
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 './init_cloud_messaging_use_case.dart';
|
||||||
export './listen_notification_use_case.dart';
|
export './listen_notification_use_case.dart';
|
||||||
export './request_cloud_messaging_permission_use_case.dart';
|
export './request_cloud_messaging_permission_use_case.dart';
|
||||||
export './subscribe.dart';
|
export 'subscribe_to_notification_topic_use_case.dart';
|
||||||
export './unsubscribe.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
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
// Please see the AUTHORS file for details.
|
// 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
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// 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';
|
part 'cloud_messaging_state.dart';
|
||||||
|
|
||||||
typedef OnNotification = void Function(RemoteNotification);
|
typedef OnNotification = void Function(RemoteNotification);
|
||||||
|
|
||||||
class CloudmessagingCubit extends Cubit<CloudmessagingState> {
|
class CloudMessagingCubit extends Cubit<CloudmessagingState> {
|
||||||
final ListenNotification _listenNotification;
|
final ListenNotificationUseCase _listenNotification;
|
||||||
final Subscribe _subscribe;
|
final SubscribeToNotificationTopicUseCase? _subscribe;
|
||||||
final Unsubscribe _unsubscribe;
|
final UnsubscribeFromNotificationTopicUseCase? _unsubscribe;
|
||||||
|
|
||||||
final OnNotification? handleNotification;
|
final OnNotification? handleNotification;
|
||||||
CloudmessagingCubit({
|
CloudMessagingCubit({
|
||||||
required ListenNotification listenNotification,
|
required ListenNotificationUseCase listenNotification,
|
||||||
required Subscribe subscribe,
|
SubscribeToNotificationTopicUseCase? subscribe,
|
||||||
required Unsubscribe unsubscribe,
|
UnsubscribeFromNotificationTopicUseCase? unsubscribe,
|
||||||
this.handleNotification,
|
this.handleNotification,
|
||||||
}) : _listenNotification = listenNotification,
|
}) : _listenNotification = listenNotification,
|
||||||
_subscribe = subscribe,
|
_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 'data/data.dart';
|
||||||
export 'domain/domain.dart';
|
export 'domain/domain.dart';
|
||||||
|
export 'features/features.dart';
|
||||||
export 'features/notifications/bloc/cloud_messaging_cubit.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/
|
url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/
|
||||||
name: wyatt_type_utils
|
name: wyatt_type_utils
|
||||||
version: ^0.0.5
|
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(
|
final notification = RemoteNotification(
|
||||||
title: message.notification?.title,
|
title: message.notification?.title,
|
||||||
body: message.notification?.body,
|
body: message.notification?.body,
|
||||||
|
data: message.data,
|
||||||
);
|
);
|
||||||
|
|
||||||
final android = message.notification?.android;
|
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 'package:wyatt_cloud_messaging_bloc_base/wyatt_cloud_messaging_bloc.dart';
|
||||||
|
|
||||||
export 'src/cloud_messaging_bloc_firebase.dart';
|
export 'src/cloud_messaging_bloc_firebase.dart';
|
||||||
|
export 'src/src.dart';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user