Skip to content

Commit 35bb086

Browse files
committed
[windows] Add closeReason in onLocalNotificationClose event #6
1 parent 39a4dc6 commit 35bb086

File tree

7 files changed

+48
-9
lines changed

7 files changed

+48
-9
lines changed

example/lib/pages/home.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class _HomePageState extends State<HomePage> {
3333
_exampleNotification?.onShow = () {
3434
print('onShow ${_exampleNotification?.identifier}');
3535
};
36-
_exampleNotification?.onClose = () {
37-
print('onClose ${_exampleNotification?.identifier}');
36+
_exampleNotification?.onClose = (closeReason) {
37+
print('onClose ${_exampleNotification?.identifier} - $closeReason');
3838
};
3939
_exampleNotification?.onClick = () {
4040
print('onClick ${_exampleNotification?.identifier}');
@@ -53,8 +53,8 @@ class _HomePageState extends State<HomePage> {
5353
notification.onShow = () {
5454
print('onShow ${notification.identifier}');
5555
};
56-
notification.onClose = () {
57-
print('onClose ${notification.identifier}');
56+
notification.onClose = (closeReason) {
57+
print('onClose ${notification.identifier} - $closeReason');
5858
};
5959
notification.onClick = () {
6060
print('onClick ${notification.identifier}');

lib/local_notifier.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export 'src/local_notification_action.dart';
2+
export 'src/local_notification_close_reason.dart';
23
export 'src/local_notification_listener.dart';
34
export 'src/local_notification.dart';
45
export 'src/local_notifier.dart';

lib/src/local_notification.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:uuid/uuid.dart';
33

44
import 'local_notification_action.dart';
5+
import 'local_notification_close_reason.dart';
56
import 'local_notification_listener.dart';
67
import 'local_notifier.dart';
78

@@ -24,7 +25,7 @@ class LocalNotification with LocalNotificationListener {
2425
List<LocalNotificationAction>? actions;
2526

2627
VoidCallback? onShow;
27-
VoidCallback? onClose;
28+
ValueChanged<LocalNotificationCloseReason>? onClose;
2829
VoidCallback? onClick;
2930
ValueChanged<int>? onClickAction;
3031

@@ -96,11 +97,14 @@ class LocalNotification with LocalNotificationListener {
9697
}
9798

9899
@override
99-
void onLocalNotificationClose(LocalNotification notification) {
100+
void onLocalNotificationClose(
101+
LocalNotification notification,
102+
LocalNotificationCloseReason closeReason,
103+
) {
100104
if (identifier != notification.identifier || onClose == null) {
101105
return;
102106
}
103-
onClose!();
107+
onClose!(closeReason);
104108
}
105109

106110
@override
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
enum LocalNotificationCloseReason {
2+
userCanceled,
3+
timedOut,
4+
unknown,
5+
}

lib/src/local_notification_listener.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
import 'local_notification_close_reason.dart';
12
import 'local_notification.dart';
23

34
abstract class LocalNotificationListener {
45
void onLocalNotificationShow(LocalNotification notification) {}
5-
void onLocalNotificationClose(LocalNotification notification) {}
6+
void onLocalNotificationClose(
7+
LocalNotification notification,
8+
LocalNotificationCloseReason closeReason,
9+
) {}
610
void onLocalNotificationClick(LocalNotification notification) {}
711
void onLocalNotificationClickAction(
812
LocalNotification notification,

lib/src/local_notifier.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'dart:io';
44
import 'package:flutter/foundation.dart';
55
import 'package:flutter/services.dart';
66

7+
import 'local_notification_close_reason.dart';
78
import 'local_notification_listener.dart';
89
import 'local_notification.dart';
910

@@ -35,7 +36,15 @@ class LocalNotifier {
3536
if (call.method == 'onLocalNotificationShow') {
3637
listener.onLocalNotificationShow(localNotification!);
3738
} else if (call.method == 'onLocalNotificationClose') {
38-
listener.onLocalNotificationClose(localNotification!);
39+
LocalNotificationCloseReason closeReason =
40+
LocalNotificationCloseReason.values.firstWhere(
41+
(e) => describeEnum(e) == call.arguments['closeReason'],
42+
orElse: () => LocalNotificationCloseReason.unknown,
43+
);
44+
listener.onLocalNotificationClose(
45+
localNotification!,
46+
closeReason,
47+
);
3948
} else if (call.method == 'onLocalNotificationClick') {
4049
listener.onLocalNotificationClick(localNotification!);
4150
} else if (call.method == 'onLocalNotificationClickAction') {

windows/local_notifier_plugin.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,25 @@ class CustomToastHandler : public IWinToastHandler {
4545
}
4646

4747
void toastDismissed(WinToastDismissalReason state) const {
48+
std::string closeReason = "unknown";
49+
50+
switch (state) {
51+
case UserCanceled:
52+
closeReason = "userCanceled";
53+
break;
54+
case TimedOut:
55+
closeReason = "timedOut";
56+
break;
57+
default:
58+
break;
59+
}
60+
4861
flutter::EncodableMap args = flutter::EncodableMap();
4962
args[flutter::EncodableValue("notificationId")] =
5063
flutter::EncodableValue(identifier);
64+
args[flutter::EncodableValue("closeReason")] =
65+
flutter::EncodableValue(closeReason);
66+
5167
channel->InvokeMethod("onLocalNotificationClose",
5268
std::make_unique<flutter::EncodableValue>(args));
5369
}

0 commit comments

Comments
 (0)