fix: fix notifs listeners
Some checks failed
continuous-integration/drone/pr Build is failing

This commit is contained in:
Malo Léon 2023-08-18 15:57:58 +02:00
parent 18fffa09fb
commit 871c52f54d
14 changed files with 91 additions and 34 deletions

View File

@ -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>();
}

View File

@ -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()),

View File

@ -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!,
]);
}

View File

@ -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) {

View File

@ -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) {

View File

@ -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';

View File

@ -0,0 +1,2 @@
export './notifications/bloc/cloud_messaging_cubit.dart';
export './notifications/screens/cloud_messaging_screen.dart';

View File

@ -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);
}

View File

@ -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;
}

View File

@ -16,4 +16,5 @@
export 'data/data.dart';
export 'domain/domain.dart';
export 'features/features.dart';
export 'features/notifications/bloc/cloud_messaging_cubit.dart';

View File

@ -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

View File

@ -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;

View File

@ -0,0 +1 @@
export './data/data_sources/cloud_messaging_firebase_data_source.dart';

View File

@ -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';