NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #230 most downloaded on pub.dev
A cross platform plugin for displaying and scheduling local notifications for Flutter applications with the ability to customise for each platform.
Last release 8 days ago
24 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Some releases are documented
notes for 35 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
318 releases · first in 2018
Breaking change calling initialize will no longer trigger the onSelectNotification if a notification was tapped on prior to calling initialize. This w…
initialize will no longer trigger the onSelectNotification if a notification was tapped on prior to calling initialize. This was done as the getNotificationAppLaunchDetails method already provided a way to handle when an application was launched by a notification. Furthermore, calling initialize multiple times (e.g. on different pages) would have previously caused the onSelectNotification callback multiples times as well. This potentially results in the same notification being processed againmatchDateComponents parameter has been renamed to matchDateTimeComponentszonedSchedule when a value for the matchDateTimeComponents parameter has been specified to create recurring notifications. Thanks to the PR from Erlend for implementing this and the previous changetag property has been added to the AndroidNotificationDetails class. This allows notifications on Android to be uniquely identifier through the use of the value of the tag and the id passed to the method for show/schedule the notificationtag argument has been added to the cancel method for the FlutterLocalNotificationsPlugin and AndroidFlutterLocalNotificationsPlugin classes. This can be used to cancel notifications where the tag has been specifiedthreadIdentifier property has been added to the IOSNotificationDetails and MacOSNotificationDetails classes. This can be used to group notifications on iOS 10.0 or newer, and macOS 10.14 or newer. Thanks to the PR from Marcin Chudy for adding this and the tag property for Android notificationse2e for integration tests to use integration_test insteadOne column per quarter.
Nothing published for this version
Nothing published for this version
[Android] added support for showing subtext in the notification. Thanks to the PR from sidlatau
[Android] added support for showing the notification timestamp as a stopwatch instead via the usesChronometer argument added to the constructor of the
usesChronometer argument added to the constructor of the AndroidNotificationDetails class. Thanks to the PR from andymstonefirebase_messaging plugin and iOS setup sectionsfullScreenIntent was added to the constructor of the AndroidNotificationDetails class.Updated API docs for the UriAndroidNotificationSound class to further clarify that developers may need to write code that makes use of platform channe
UriAndroidNotificationSound class to further clarify that developers may need to write code that makes use of platform channelscreateNotificationChannelGroup and deleteNotificationChannelGroup methods to use the NotificationManager APIs instead of the NotificationManagerCompat APIs. If you had issues with 3.0.1 then this should fix the issue (e.g. as reported in issue 871) as the the APIs that were previously being called would've required apps to use more recent versions of the AndroidX libraries[Android] additional fix for issue 871 by switching the implementation of deleteNotificationChannel to use the NotificationManager APIs instead of the
deleteNotificationChannel to use the NotificationManager APIs instead of the NotificationManagerCompat APIs[Android] Fixed issue 898 around duplicate pending notifications
[Android] made changes so that the plugin will now register the receivers and permissions needed. This reduces the amount of setup needed as developer
flutter_local_notifications_platform_interfaceFixed links in table of contents in the readme. Thanks to the PR from Dihak
[Android] change how the intent that associated with the notification is determined so that the plugin. This is to allow the plugin to work with appli
[Android] fixed issue 935 where scheduling a notification on Android devices running Android versions older than 4.4 (API 19) could cause a crash from
[Android] Added the createNotificationChannelGroup and deleteNotificationChannelGroup methods to the AndroidFluttterLocalNotificationsPlugin class tha
createNotificationChannelGroup and deleteNotificationChannelGroup methods to the AndroidFluttterLocalNotificationsPlugin class that can be used to create and delete notification channel groups. The optional groupId parameter has been added to the AndroidNotificationChannel class that can be used to associated notification channels to a particular group. Example app has been updated to include code snippets for this.[iOS] Fixed issue 865 where notifications with no title weren't behaving properly
Breaking change The scheduledNotificationRepeatFrequency parameter of the zonedSchedule method has been removed. This has been replaced by matchDateTi…
scheduledNotificationRepeatFrequency parameter of the zonedSchedule method has been removed. This has been replaced by matchDateTimeComponents parameter that can be used to schedule a recurring notification. This was done to better indicate that this is used to schedule recurring daily of weekly notifications based on the specified date components. This is more inline with how the calendar trigger works for notifications for iOS and macOS. Given a date (e.g. Monday 2020-10-19 10:00 AM), specifying to match on the time component of would result in a notification occurring daily at the same time (10:00 AM). Specifying to match on the day of the week and time allows for a weekly notification to occur (Monday 10:00 AM), The deprecation warnings for the showDailyAtTime() and showWeeklyAtDayAndTime() methods have been updated to give a brief description along the same lines.[iOS][macOS] fixed issue 860 where notifications may fail to be scheduled to an error parsing the specified date that could occur for some users depen
Added a note on migrating away from the deprecated methods for scheduling daily/weekly notifications
zonedSchedule method[Android] updated plugin and steps in the readme to ensure notifications remain scheduled after a HTC device restarts. Thanks to the PR from Le Liam
Fixed code snippet in readme around initialisation and configuring the onDidReceiveLocalNotification callback specific to iOS. Thanks to the PR from M
onDidReceiveLocalNotification callback specific to iOS. Thanks to the PR from Mike TrusoBreaking change The InitializationSettings and NotificationDetails classes no longer have positional parameters but now have named parameters called a…
schedule, showDailyAtTime and showWeeklyAtDayAndTime methods has been marked as a deprecated due to problems with time zones, particularly when it comes to daylight savings.zonedSchedule method to the plugin that allows for scheduling notifications to occur on a specific date and time relative a specific time zone. This can be used to schedule daily and weekly notifications as well. The example app has been updated to demonstrate its usage. Applications will need to retrieve the device's local IANA timezone ID via native code or a plugin (e.g. flutter_native_timezone). Note that to support time zone-based scheduling, the plugin now depends on the timezone package so that an instance of the TZDateTime class is required to the specify the time the notification should occur. This should work in most cases as it is IANA-based and native platforms have time zones that are IANA-based as well. To support time zone aware dates on older versions of Android (which use older Java APIs), the plugin depends on the ThreeTen Android Backport library. Once Flutter's support for Android Studio 4.0 and Android Gradle plugin 4.0 has stabilised, the plugin will be updated to make use of desugaring instead of relying on the ThreeTen Android Backport library.getNotificationAppLaunchDetails() behaved inconsistently depending on if it was called before or after initialize()getActiveNotifications() method to the AndroidFlutterLocalNotificationsPlugin class thanks to the PR from Vincent Kammerer. This can be used to query the active notifications and is only applicable to Android 6.0 or newerandroidAllowWhileIdle boolean argument to the periodicallyShow method. When set to true, this changes how recurring notifications are shown so that the Android AlarmManager API is used to schedule a notification with exact timing. When the notification appears, the next one is scheduled after that. This is get around the limitations where the AlarmManager APIs don't provide a way for work to be repeated with precising timing regardless of the power mode.
The example app has been updated to include these changes so that it can be used as a reference as wellfullScreenIntent argument that has been added to the constructor of the AndroidNotificationDetails class. Thanks to the PR from Nadav Fimasubtitle property of the IOSNotificationDetails class. This property is only application to iOS versions 10 or newerInitializationSettings and NotificationDetails classes no longer have positional parameters but now have named parameters called android and iOS for passing in data specific to Android and iOS. There macOS named parameter has also been added for passing data specific to macOStoMap method that was used internally to transfer data over platform channels is no longer publicly accessibleDayAndroidNotificationChannelActionImportance (note: as default is a keyword, what use to be Default is now defaultImportance)Priority (note: as default is a keyword, what use to be Default is now defaultPriority)GroupAlertBehaviorNotificationVisibilityRepeatIntervalIOSInitializationSettings constructor to prevent null values being passed inThis was incorrectly published in the 1.5.0 update
Revert the breaking 1.5.0 update as that should have been published with the major version incremented
BAD This was a breaking change that was published as a minor version update. This has been reverted by [1.5.0+1]
BAD This was a breaking change that was published as a minor version update. This has been reverted by [1.5.0+1]
Added macOS implementation of the plugin
The schedule, showDailyAtTime and showWeeklyAtDayAndTime methods has been marked as a deprecated due to problems with time zones, particularly when it comes to daylight savings.
Added the zonedSchedule method to the plugin that allows for scheduling notifications to occur on a specific date and time relative a specific time zone. This can be used to schedule daily and weekly notifications as well. The example app has been updated to demonstrate its usage. Note that to support time zone-based scheduling, the plugin now depends on the timezone package so that an instance of the TZDateTime class is required to the specify the time the notification should occur. This should work in most cases as it is IANA-based and native platforms have time zones that are IANA-based as well. To support time zone aware dates on older versions of Android (which use older Java APIs), the plugin depends on the ThreeTen Android Backport library. Once Flutter's support for Android Studio 4.0 and Android Gradle plugin 4.0 has stabilised, the plugin will be updated to make use of desugaring instead of relying on the ThreeTen Android Backport library.
[Android] Fixed issue [670] where getNotificationAppLaunchDetails() behaved inconsistently depending on if it was called before or after initialize()
[Android] Added the getActiveNotifications() method to the AndroidFlutterLocalNotificationsPlugin class thanks to the PR from Vincent Kammerer. This can be used to query the active notifications and is only applicable to Android 6.0 or newer
[Android] Fixed an issue where the error message for an invalid source resource wasn't formatted correctly to include the name of the specified resource
[Android] Added androidAllowWhileIdle boolean argument to the periodicallyShow method. When set to true, this changes how recurring notifications are shown so that the Android AlarmManager API is used to schedule a notification with exact timing. When the notification appears, the next one is scheduled after that. This is get around the limitations where the AlarmManager APIs don't provide a way for work to be repeated with precising timing regardless of the power mode.
The example app has been updated to include these changes so that it can be used as a reference as well
[Android] Added support for full-screen notifications via the fullScreenIntent argument that has been added to the AndroidNotificationDetails class. Thanks to the PR from Nadav Fima
[Android] Bumped compile SDK to 30 (Android 11)
[Android] Added ability to specify shortcut id that can be used for conversations. See https://developer.android.com/guide/topics/ui/conversations for more info. Note the plugin doesn't provide the ability to publish shortcuts so developers will likely need to look into writing their own code to do so and save the shortcut id so that it can be linked to notifications
[iOS] Updated the details in the plugin's podspec file
[iOS] Added ability to specify a subtitle for a notification via the subtitle property of the IOSNotificationDetails class. This property is only application to iOS versions 10 or newer
Breaking change The InitializationSettings and NotificationDetails classes no longer have positional parameters but now have named parameters called android and iOS for passing in data specific to Android and iOS. There macOS named parameter has also been added for passing data specific to macOS
Breaking change The toMap method that was used internally to transfer data over platform channels is no longer publicly accessible
Breaking change All enum values have been renamed to follow lower camel case convention. This affects the following enums
DayAndroidNotificationChannelActionImportance (note: as default is a keyword, what use to be Default is now defaultImportance)Priority (note: as default is a keyword, what use to be Default is now defaultPriority)GroupAlertBehaviorNotificationVisibilityRepeatIntervalBreaking change assertions have been added to the IOSInitializationSettings constructor to prevent null values being passed in
Updated example app so that code for demonstrating functionality that is specific to a platform are only visible when running on the appropriate platform
Bumped Android dependencies
Updated example app's Proguard rules file to match latest configuration required by GSON
Bumped lower bound of Dart SDK dependency to 2.6
Updated and fixed wording in API docs
Readme now has a table of contents. Thanks to the PR from Ascênio
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added details that platform-specific implementations can be obtained to the _Caveats and limitations_ section
[Android] Updated readme and plugin to fix issue 689 where plugin needs to ensure notifications stay scheduled after an application update
e2e dependency[Android] Fix issue 751 where the onSelectNotification callback could be called again after the user has tapped on a notification, sent the applicatio
onSelectNotification callback could be called again after the user has tapped on a notification, sent the application to the background and returned to the app via the Recents screen. This issue could have previously called getNotificationAppLaunchDetails() to mistakenly report that a notification launched the app when it's called again as part of the application being resumed[Android] Fix issue 759 by guarding code on getting the intent from the activity in case there isn't an activity that could cause initialize() and get
initialize() and getNotificationAppLaunchDetails() to fail when called from the backgroundUpdated the platform package version range constraint so that 3.x null safety releases could be used (currently used in Flutter 1.22 stable)
platform package version range constraint so that 3.x null safety releases could be used (currently used in Flutter 1.22 stable)[iOS] Fixes to ensure that the native completion handlers were called appropriately. If you had some issues using this plugin combined with push notif
firebase_messaging) when the app was in the foreground then I would recommend updating to this version. Thanks to Paweł Szot for picking up the gap in the code in handling the native willPresentNotification call[Android] added the ability to specify additional flags for the notification. For example, this could be used to allow the audio to repeat. See the AP
[Android] added the ability to specify the timestamp shown in the notification (issue 596). Thanks to the PR from Nicolas Schneider.
showWeeklyAtDayAndTime[Android] added the ability to create notification channels before a notification is shown. This can be done by calling the createNotificationChannel
createNotificationChannel within the AndroidFlutterLocalNotificationsPlugin class. This allows applications to create notification channels before a notification is shown. Thanks to the PR from Vladimir Gerashchenko.deleteNotificationChannel within AndroidFlutterLocalNotificationsPlugin class.Please note that there are a number of breaking changes in this release to improve the developer experience when using the plugin APIs. The changes sh…
Please note that there are a number of breaking changes in this release to improve the developer experience when using the plugin APIs. The changes should hopefully be straightforward but please through the changelog carefully just in case. The steps migrate your code has been covered below but the Git history of the example application's main.dart file can also be used as reference.
[Android] Breaking change The style property of the AndroidNotificationDetails class has been removed as it was redundant. No changes are needed unless your application was displaying media notifications (i.e. style was set to AndroidNotificationStyle.Media). If this is the case, you can migrate your code by setting the styleInformation property of the AndroidNotificationDetails to an instance of the MediaNotificationStyleInformation class. This class is a new addition in this release
[Android] Breaking change The AndroidNotificationSound abstract class has been introduced to represent Android notification sounds. The sound property of the AndroidNotificationDetails class has changed from being a String type to an AndroidNotificationSound type. In this release, the AndroidNotificationSound has the following subclasses
RawResourceAndroidNotificationSound: use this when the sound is raw resource associated with the Android application. Previously, this was the only type of sound supported so applications using the plugin prior to 1.4.0 can migrate their application by using this class. For example, if your previous code was
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description',
sound: 'slow_spring_board');
Replace it with
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description',
sound: RawResourceAndroidNotificationSound('slow_spring_board');
UriAndroidNotificationSound: use this when a URI refers to the sound on the Android device. This is a new feature being supported as part of this release. Developers may need to write their code to access native Android APIs (e.g. the RingtoneManager APIs) to obtain the URIs they need.
[Android] Breaking change The BitmapSource enum has been replaced by the newly AndroidBitmap abstract class and its subclasses. This removes the need to specify the name/path of the bitmap and the source of the bitmap as two separate properties (e.g. the largeIcon and largeIconBitmapSource properties of the AndroidNotificationDetails class). This change affects the following classes
AndroidNotificationDetails: the largeIcon is now an AndroidBitmap type instead of a String and the largeIconBitmapSource property has been removedBigPictureStyleInformation: the largeIcon is now an AndroidBitmap type instead of a String and the largeIconBitmapSource property has been removed. The bigPicture is now a AndroidBitmap type instead of a String and the bigPictureBitmapSource property has been removedThe following describes how each BitmapSource value maps to the AndroidBitmap subclasses
BitmapSource.Drawable -> DrawableResourceAndroidBitmapBitmapSource.FilePath -> FilePathAndroidBitmapEach of these subclasses has a constructor that an argument referring to the bitmap itself. For example, if you previously had the following code
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description',
largeIcon: 'sample_large_icon',
largeIconBitmapSource: BitmapSource.Drawable,
)
This would now be replaced with
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description',
largeIcon: DrawableResourceAndroidBitmap('sample_large_icon'),
)
[Android] Breaking change The IconSource enum has been replaced by the newly added AndroidIcon abstract class and its subclasses. This change was done for similar reasons in replacing the BitmapSource enum. This only affects the Person class, which is used when displaying each person in a messaging-style notification. Here the icon property is now an AndroidIcon type instead of a String and the iconSource property has been removed.
The following describes how each IconSource value maps to the AndroidIcon subclasses
IconSource.Drawable -> DrawableResourceAndroidIconIconSource.FilePath -> BitmapFilePathAndroidIconIconSource.ContentUri -> ContentUriAndroidIconEach of these subclasses has a constructor that accepts an argument referring to the icon itself. For example, if you previously had the following code
Person(
icon: 'me',
iconSource: IconSource.Drawable,
)
This would now be replaced with
Person(
icon: DrawableResourceAndroidIcon('me'),
)
The AndroidIcon also has a BitmapAssetAndroidIcon subclass to enables the usage of bitmap icons that have been registered as a Flutter asset via the pubspec.yaml file.
[Android] Breaking change All properties in the AndroidNotificationDetails, DefaultStyleInformation and InboxStyleInformation classes have been made final
The DefaultStyleInformation class now implements the StyleInformation class instead of extending it
Where possible, classes in the plugins have been updated to provide const constructors
Updates to API docs and readme
Bump Android dependencies
Fixed a grammar issue 0.9.1 changelog entry
[iOS] Breaking change Plugin will now throw a PlatformException if there was an error returned upon calling the native `addNotificationRequest` method…
PlatformException if there was an error returned upon calling the native addNotificationRequest method. Previously the error was logged on the native side the using NSLog function.firebase_messaging together with flutter_local_notifications to let the community that firebase_messaging 6.0.13 can be used to resolve compatibility issues around callbacks when both plugins are used together[Android] Added ability to specify if the timestamp for when a notification occurred should be displayed. Thanks to the PR from mojtabaghiasi
[Android] Fixed issue 512 where calling getNotificationAppLaunchDetails() within the onSelectNotification callback could indicating that the app was l
getNotificationAppLaunchDetails() within the onSelectNotification callback could indicating that the app was launched by tapping on a notification when it wasn't the caseUpdated how breaking changes are highlighted in changelog to all the letters aren't capitalised
values properties for the Day and Importance classes now return List<Day> and List<Importance> respectively instead of being dynamicMake the static values propeerty of the Priority class return List instead of being dynamic and added API docs for the property.
values propeerty of the Priority class return List<Priority> instead of being dynamic and added API docs for the property.Updated API docs for resolvePlatformSpecificImplementation() method
resolvePlatformSpecificImplementation() methodTitle at the top of the readme is now the same name as the plugin
Breaking change the static instance properties in the IOSFlutterLocalNotificationsPlugin and AndroidFlutterLocalNotificationsPlugin classes have been…
resolvePlatformSpecificImplementation() method to the FlutterLocalNotificationsPlugin class. This can be used to resolve the underlying platform implementation in order to access platform-specific APIs.instance properties in the IOSFlutterLocalNotificationsPlugin and AndroidFlutterLocalNotificationsPlugin classes have been removed due to addition of the resolvePlatformSpecificImplementation()new keyword in code snippetsMinor update to readme on description around requesting notification permissions
firebase_messaging plugin to readme for those that want to use it whilst the PR to fix the compatibility issues with this plugin is waiting to be reviewed[iOS] Added requestPermissions() method to IOSFlutterLocalNotificationsPlugin class. This can be used to request notification permissions separately f
requestPermissions() method to IOSFlutterLocalNotificationsPlugin class. This can be used to request notification permissions separately from plugin initialisation. To facilitate this the IOSFlutterLocalNotificationsPlugin and AndroidFlutterLocalNotificationsPlugin now expose a static instance property that can be used obtain the platform-specific implementation of the plugin so that platform-specific methods can be used. Thanks to the PR from Dariusz ŁukszagetNotificationAppLaunchDetails() is intended to be used more on if a notification from this plugin triggered launch an application[iOS] Added ability to set badge number. Thanks to PR from FelixYew
No functional changes. Fixed a reported formatting issue
FlutterLocalNotificationsPlugin.private() on how it could be used for testingFlutterLocalNotificationsPlugin.private() named constructor may be of use[Android] minor optimisation on scheduling related code so that Gson instance is reused instead of being rebuilt each time
Gson instance is reused instead of being rebuilt each timeSupport v2 Android embedding. Note that there is currently a known issue in the Flutter SDK that will cause onSelectNotification to fire twice on Andr
onSelectNotification to fire twice on Android. The fix is in the master channel but hasn't rolled out to other channels. Subscribe to the issue for updates.Retroactively updated changelog for 1.1.0 to indicate breaking change on moving to using platform interface
NotificationAppLaunchDetails via main pluginPassing a null notification id now throws an ArgumentError. Thanks to PR from talmor_guy
ArgumentError. Thanks to PR from talmor_guyArgumentError when notification id is not within range of a 32-bit integer[Android] Added ability to specify timeout duration of notification
Breaking change Updated plugin to make use of flutter_local_notifications_platform_interface version 1.0.1. This allows for platform-specific implemen…
flutter_local_notifications_platform_interface version 1.0.1. This allows for platform-specific implementations of the platform interface to now be accessible. Note that the plugin will check which platform the plugin is running on.
Note: this may have inadvertently broke some tests for users as the plugin now checks which platform the plugin is executing code on and would throw an UnimplementedError since neither iOS or Android can be detected. Another issue is that NotificationAppLaunchDetails was no longer exposed via the main plugin. Please upgrade to 1.1.3 to have both of these issues fixedMethodChannel argument has been removed from the named constructor that was visible for testing purposesYour coding agent can read these notes before it upgrades. Set up the MCP server →