Line data Source code
1 : import 'dart:async';
2 :
3 : import 'package:bloc/bloc.dart';
4 : import 'package:firebase_messaging/firebase_messaging.dart';
5 : import 'package:flutter/foundation.dart';
6 : import 'package:flutter/material.dart';
7 : import 'package:freezed_annotation/freezed_annotation.dart';
8 : import 'package:injectable/injectable.dart';
9 : import 'package:shared_preferences/shared_preferences.dart';
10 :
11 : part 'notification_bloc.freezed.dart';
12 : part 'notification_event.dart';
13 : part 'notification_state.dart';
14 :
15 0 : Future<void> myBackgroundMessageHandler(Map<String, dynamic> message) async {
16 0 : print("onBackground: $message");
17 : }
18 :
19 : @prod
20 : @singleton
21 : class NotificationBloc extends Bloc<NotificationEvent, NotificationState> {
22 : final SharedPreferences prefs;
23 : final FirebaseMessaging firebaseMessaging;
24 :
25 0 : NotificationBloc({
26 : @required this.prefs,
27 : @required this.firebaseMessaging,
28 : });
29 :
30 0 : @override
31 : NotificationState get initialState => const NotificationState.initial();
32 :
33 : @override
34 0 : Stream<NotificationState> mapEventToState(
35 : NotificationEvent event,
36 : ) async* {
37 0 : yield* event.when(
38 0 : appStarted: () async* {
39 0 : firebaseMessaging.requestNotificationPermissions(
40 : const IosNotificationSettings(
41 : sound: true, badge: true, alert: true, provisional: true));
42 0 : firebaseMessaging.onIosSettingsRegistered
43 0 : .listen((IosNotificationSettings settings) {
44 0 : print("Settings registered: $settings");
45 : });
46 0 : await firebaseMessaging.getToken().then((String token) {
47 0 : print("Push Messaging token: $token");
48 : });
49 0 : yield const NotificationState.loaded();
50 0 : add(const NotificationEvent.loaded());
51 : },
52 0 : loaded: () async* {
53 0 : final initial = prefs.getBool('notification_enabled');
54 : if (initial != null) {
55 : if (initial) {
56 0 : add(const NotificationEvent.enable());
57 : } else {
58 0 : add(const NotificationEvent.disable());
59 : }
60 : } else {
61 0 : add(const NotificationEvent.enable());
62 : }
63 : },
64 0 : enable: () async* {
65 0 : await prefs.setBool('notification_enabled', true);
66 0 : await firebaseMessaging
67 0 : .subscribeToTopic("actualite")
68 0 : .timeout(const Duration(seconds: 10), onTimeout: () {});
69 0 : yield const NotificationState.enabled();
70 : },
71 0 : disable: () async* {
72 0 : await prefs.setBool('notification_enabled', false);
73 0 : await firebaseMessaging
74 0 : .unsubscribeFromTopic("actualite")
75 0 : .timeout(const Duration(seconds: 10), onTimeout: () {});
76 0 : yield const NotificationState.disabled();
77 : },
78 : );
79 : }
80 : }
|