notification_permissions 0.4.4

  • Readme
  • Changelog
  • Example
  • Installing
  • 98

Flutter Notification Permissions #

Package to check for and ask for Notification Permissions on iOS and Android.

Checking Notification Permission Status #

Future<PermissionStatus> permissionStatus =

This method will return an enum with the following values:

enum PermissionStatus {

In iOS, a permission is unknown when the user hasn’t accepted or refuse the notification permissions. In Android this state will never occur, since the permission will be granted by default and it will be denied if the user goes to the app settings and turns off notifications for the app.

Requesting Notification Permissions #

If the PermissionStatus is denied or unknown, we can ask the user for the Permissions:

Future<PermissionStatus> permissionStatus = NotificationPermissions.getNotificationPermissionStatus({NotificationSettingsIos iosSettings, bool openSettings});

On Android, if the permission is denied, this method will open the app settings.

In iOS, if the permission is unknown, it will show an alert window asking the user for the permission. On the other hand, if the permission is denied it has the same behaviour as Android, opening the app settings. Also in iOS if you set openSettings to false settings window won't be opened. You will get denied status. NotificationPermissions.getNotificationPermissionStatus returns status after user select answer from native permission popup.

Note: if the permission is granted, this method will not do anything.

iOS Error: Swift.h not found #

If your project is in Objective-C, you will have to do the changes referenced in this SO post in order to solve the issue:

'notification_permissions/notification_permissions-Swift.h' file not found
    #import <notification_permissions/notification_permissions-Swift.h>
    1 error generated.

Special Thanks #

Special thanks to fedecastelli for helping me in the Swift Code!

0.4.4 #

  • Corrected the path to the license file in .podspec
  • Define CLANG module, so that the plugin can be used statically
  • Ensure correct version is listed in .podspec

0.4.3 #

  • Added option to open settings or not in iOS when permition is denied [pawlowskim]
  • Adding possibility for iOS 10.0 to wait for call requestNotificationPermissions (iOS permission dialog) [kuzmisin]
  • Fix missing result() call for Android when PERMISSION_DENIED [kuzmisin]
  • Fixed warnings on XCode [ened]

0.4.0 #

  • Breaking change Changed implementation to use static methods. Changed IosNotificationSettings to NotificationSettingsIos to avoid conflict with Firebase

0.3.1 #

  • Changed the README to present the quick-fix for installing this plugin in a Objective-C Flutter Project

0.3.0 #

  • Replace Kotlin implementation with simple Java to ease future maintenance.

0.2.2 #

  • Added support for latest kotlin version

0.2.1 #

  • Port iOS codebase to Swift 4.2

0.2.0 #

  • Breaking change. Migrate from the deprecated original Android Support Library to AndroidX. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate if they're using the original support library.

0.1.0 #

  • Initial release of the package


import 'dart:async';

import 'package:flutter/material.dart';
import 'package:notification_permissions/notification_permissions.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  _MyAppState createState() => _MyAppState();

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  Future<String> permissionStatusFuture;

  var permGranted = "granted";
  var permDenied = "denied";
  var permUnknown = "unknown";

  void initState() {
    // set up the notification permissions class
    // set up the future to fetch the notification data
    permissionStatusFuture = getCheckNotificationPermStatus();
    // With this, we will be able to check if the permission is granted or not
    // when returning to the application

  /// When the application has a resumed status, check for the permission
  /// status
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      setState(() {
        permissionStatusFuture = getCheckNotificationPermStatus();

  /// Checks the notification permission status
  Future<String> getCheckNotificationPermStatus() {
    return NotificationPermissions.getNotificationPermissionStatus()
        .then((status) {
      switch (status) {
        case PermissionStatus.denied:
          return permDenied;
        case PermissionStatus.granted:
          return permGranted;
        case PermissionStatus.unknown:
          return permUnknown;
          return null;

  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Notification Permissions'),
        body: Center(
            child: Container(
          margin: EdgeInsets.all(20),
          child: FutureBuilder(
              future: permissionStatusFuture,
              builder: (context, snapshot) {
                // if we are waiting for data, show a progress indicator
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return CircularProgressIndicator();
                if (snapshot.hasData) {
                  var textWidget = Text(
                    "The permission status is ${}",
                    style: TextStyle(fontSize: 20),
                    softWrap: true,
                  // The permission is granted, then just show the text
                  if ( == permGranted) {
                    return textWidget;

                  // else, we'll show a button to ask for the permissions
                  return Column(
                    children: <Widget>[
                        height: 20,
                        color: Colors.amber,
                            Text("Ask for notification status".toUpperCase()),
                        onPressed: () {
                          // show the dialog/open settings screen
                                          const NotificationSettingsIos(
                                              sound: true,
                                              badge: true,
                                              alert: true))
                              .then((_) {
                            // when finished, check the permission status
                            setState(() {
                              permissionStatusFuture =
                return Text("No permission status yet");

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  notification_permissions: ^0.4.4

2. Install it

You can install packages from the command line:

with Flutter:

$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:notification_permissions/notification_permissions.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Apr 3, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.7.1
  • pana: 0.13.6
  • Flutter: 1.12.13+hotfix.8

Health issues and suggestions

Document public APIs. (-1 points)

16 out of 16 API elements have no dartdoc comment.Providing good documentation for libraries, classes, functions, and other API elements improves code readability and helps developers find and use your API.

Format lib/notification_permissions.dart.

Run flutter format to format lib/notification_permissions.dart.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.1.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.8
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
Dev dependencies