How to push mandatory notification with flutter? - android

So I have this app in flutter, in which there are two textfeilds.
One is 'Reminder title' and another is the description/message.
Now what I want is that to push a notification with the information from the textfeilds.
And I want the notification to be there until I mark it as done from the app.
Now I have been using flutter_local_notifications. But I have been getting errors by following their documentations. Actually no notification came after pressing the button.
I need help with some code to achieve the following purpose.

We can use awesome_notifications for this purpose, in case firebase and flutter_local_notification becomes problematic.
Basically you have to initialize a channel:
import 'package:awesome_notifications/awesome_notifications.dart';
AwesomeNotifications().initialize(
// set the icon to null if you want to use the default app icon
'resource://drawable/res_app_icon',
[
NotificationChannel(
channelGroupKey: 'basic_channel_group',
channelKey: 'basic_channel',
channelName: 'Basic notifications',
channelDescription: 'Notification channel for basic tests',
defaultColor: Color(0xFF9D50DD),
ledColor: Colors.white)
],
// Channel groups are only visual and are not required
channelGroups: [
NotificationChannelGroup(
channelGroupkey: 'basic_channel_group',
channelGroupName: 'Basic group')
],
debug: true
);
and then create desired notification by =>
AwesomeNotifications().createNotification(
content: NotificationContent(
id: 10,
channelKey: 'basic_channel',
title: 'Simple Notification',
body: 'Simple body'
)
);
Read their documentation for more information.
And here is their video tutorial.

Related

awesome notifications icon just blue circle on real device

im using awesome_notifications package for my notification, when im running on emulator it works fine the icon appear but in the real device it just blue circle or white circle.
NOTE: im testing with Redmi Note 9 12.5.5 Android 11
here is my icon
here is my notifications initialize code
AwesomeNotifications().initialize(
null,
[
// notification icon
NotificationChannel(
channelGroupKey: 'basic_test',
channelKey: 'basic',
channelName: 'Basic notifications',
channelDescription: 'Notification channel for basic tests',
channelShowBadge: true,
importance: NotificationImportance.High,
enableVibration: false,
),
],
);
here is my create notifications code
AwesomeNotifications().createNotification(
content: NotificationContent(
id: id,
channelKey: 'basic',
title: title,
body: body,
autoDismissible: false,
locked: showProgress ? true : false,
notificationLayout: showProgress
? NotificationLayout.ProgressBar
: NotificationLayout.Default,
progress: progress,
fullScreenIntent: true,
backgroundColor: MyThemes.colorBlue,
),
);

Flutter when action is set on notification, the app calls BackgroundMethod even if the app is in foreground

I have a flutter app that uses local notifications https://pub.dev/packages/flutter_local_notifications.
I have a notification that is set to a certain date :
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) async {
print("FOREGORUND");
},
onDidReceiveBackgroundNotificationResponse: notificationTapBackground,
);
await flutterLocalNotificationsPlugin.zonedSchedule(
uid.hashCode,
title,
desc,
timez.TZDateTime.from(datex, timez.local),
NotificationDetails(
android: AndroidNotificationDetails(
'your channel id', 'your channel name',
channelDescription: 'your channel description',
actions: <AndroidNotificationAction>[
AndroidNotificationAction(
"CompleteID",
"Complete",
icon: DrawableResourceAndroidBitmap('complete_img'),
showsUserInterface: false,
cancelNotification: true,
),
],)
),
payload: uid,
androidAllowWhileIdle: true,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime);
When I click on the complete action from the notification, the app calls "notificationTapBackground" even if the app is in foreground, so from notificationTapBackground isolate thread i can' t call setstate inside my app.
I would like to be able to click on the complete action from the notification and have :
the app calls notificationTapBackground, if the app is in the background
the app calls onDidReceiveNotificationRespons, if the app is in the foreground
all with the parameter showsUserInterface: false, inside notification actions.

Group Notifications using flutter_local_notifications package (android)

I am building a mobile app using flutter and I a struggling with grouping the notifications on android. I have it working fine on ios but not on android. Here is the code I am working with below for groupchats:
flutterLocalNotificationsPlugin.show(
notificationId++,
response.message.text == '' ? 'Message from ${response.message.user?.name} in liveroom'
: '${response.message.user?.name} in liveroom',
response.message.text,
NotificationDetails(
android: AndroidNotificationDetails(
cid,
cid,
groupKey: cid,
channelDescription: cid,
),
iOS: IOSNotificationDetails(
threadIdentifier: cid
)
),
);
And here is the code i am working with for one on one messaging:
flutterLocalNotificationsPlugin.show(
notificationId++,
response.message.text == '' ? 'Message from ${response.message.user?.name}'
: '${response.message.user?.name}',
response.message.text,
NotificationDetails(
android: AndroidNotificationDetails(
cid,
cid,
groupKey: cid,
channelDescription: cid,
setAsGroupSummary: true
),
iOS: IOSNotificationDetails(
threadIdentifier: response.message.user?.name
)
),
);
The cid is the channel id and it unique for each group chat. It is also unique for each message thread between two people. I am trying to collapse the notifications from one person into one group. And also collapse the notifications from one group chat into one group (this is the behvaiour on ios based on the code above and i would like to replicate for android).

Why I am not able to display image notifications?

I am developing a flutter application and displaying notifications with awesome_notifications package (https://pub.dev/packages/awesome_notifications). Below is my code.
await AwesomeNotifications().createNotification(
content: NotificationContent(
id: UniqueKey().hashCode,
groupKey: message.data["senderUid"],
channelKey: 'basic_channel',
title: message.data["title"],
body: message.data["body"],
summary: message.data["body"], // Anything you want here
bigPicture:
"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/TEIDE.JPG/2560px-TEIDE.JPG",
notificationLayout: NotificationLayout.Messaging,
),
);
This code does not display any notifications. Instead if I remove the bigPicture, then it will show the message without the picture.
How can I show the notification image?
Use correct notificationLayout, in this case BigPicture.

WhatsApp like call notification when app in background in flutter

On Android, I want to be able to show a persistent notification with two buttons even when the app is in the background or when the phone is locked. Basically, like a WhatsApp incoming call notification.
I know how to do it in Java but I don't know how to do it in Flutter. I've read similar questions on SO but none have provided a good answer.
FYI, I know how to send and receive FCM notifications. I know how to display a normal notification when a FCM message is sent while the app is in the background.
After wasting an entire week, here is the solution I found.
Keep your app running in the background and make sure it is not closed by the user. This tutorial explains how to do it: https://github.com/ppicas/flutter-android-background
If the solution above is too complicated, use the flutter_background to do more or less the same thing (the first solution is better because it also prevents the user from closing the app).
Make sure the flutter activity can be displayed over the lock screen by adding this to your activity's declaration in your manifest:
android:showWhenLocked="true"
Last thing is to use a wakelock in flutter when your app receives a notification, and you want to display a full screen "call received" widget.
You can use firebase_messaging and awesome_notifications
add this in your firebase background subscription handler
await AwesomeNotifications().createNotification(
content: NotificationContent(
id: createuniqueId(),
channelKey: 'basic_channel',
title: message.data['title'],
body: message.data['body'],
wakeUpScreen: true,
fullScreenIntent: true,
autoDismissible: false,
category: NotificationCategory.Call,
locked: true,
displayOnForeground: true,
),
actionButtons: [
NotificationActionButton(
key: 'accept',
label: 'Accept',
),
NotificationActionButton(
isDangerousOption: true,
key: 'reject',
label: 'Reject',
),
],
);
add this is your main()
AwesomeNotifications().initialize(
'resource://drawable/ic_icon',
[
NotificationChannel(
channelKey: 'basic_channel',
channelName: 'Basic Notification',
channelDescription: 'Hello world',
importance: NotificationImportance.High,
channelShowBadge: true,
vibrationPattern: highVibrationPattern
),
]
);

Categories

Resources