'Flutter Local Notification Error : 'int java.lang.Integer.intValue()' on a null object reference

When I activate the scheduled Flutter local Notification, it crashes. I have "launcher_icon" in the drawable folder, has all the configurations from the github. Any idea what is causing the error? I have 2 projects with Flutter Local Notification - one works on VM but not on real device (exits as soon as the notification is fired), and the other one doesnt work at the first place.

this is my code:

import 'package:coronada_19/models/infection.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:latlong/latlong.dart' as ds;
import 'package:flutter/cupertino.dart';
import 'package:rxdart/subjects.dart';

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

class ReceivedNotification {
  final int id;
  final String title;
  final String body;
  final String payload;

  ReceivedNotification(
      {@required this.id,
      @required this.title,
      @required this.body,
      @required this.payload});
}

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();

// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function
final BehaviorSubject<ReceivedNotification> didReceiveLocalNotificationSubject =
    BehaviorSubject<ReceivedNotification>();

final BehaviorSubject<String> selectNotificationSubject =
    BehaviorSubject<String>();

var initializationSettingsAndroid =
    AndroidInitializationSettings('launcher_icon');
// Note: permissions aren't requested here just to demonstrate that can be done later using the `requestPermissions()` method
// of the `IOSFlutterLocalNotificationsPlugin` class
var initializationSettingsIOS = IOSInitializationSettings(
    requestAlertPermission: false,
    requestBadgePermission: false,
    requestSoundPermission: false,
    onDidReceiveLocalNotification:
        (int id, String title, String body, String payload) async {
      didReceiveLocalNotificationSubject.add(ReceivedNotification(
          id: id, title: title, body: body, payload: payload));
    });
var initializationSettings = InitializationSettings(
  initializationSettingsAndroid,
  initializationSettingsIOS,
);
var scheduledNotificationDateTime = DateTime.now().add(Duration(seconds: 10));
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(
    androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);

var androidPlatformChannelSpecifics = AndroidNotificationDetails(
    'your channel id', 'your channel name', 'your channel description',
    importance: Importance.Max, priority: Priority.High);

class DisplayMap extends StatefulWidget {
  static const routeName = "/displayMap";
  final List<Infection> infect;
  DisplayMap({Key key, this.infect}) : super(key: key);

  @override
  _DisplayMapState createState() => _DisplayMapState(infect);
}

class _DisplayMapState extends State<DisplayMap> {
  List<Infection> infect;
  _DisplayMapState(this.infect);

  Widget build(BuildContext context) {
    return Stack(children: [
      RaisedButton(
        onPressed: () async {
          await flutterLocalNotificationsPlugin.schedule(
              0,
              'name',
              'plain body',
              scheduledNotificationDateTime,
              platformChannelSpecifics,
              payload: 'item x');
        },
        child: Text("hehe"),
      )
    ]);
  }
}

my flutter doctor:

[√] Flutter (Channel stable, v1.12.13+hotfix.8, on Microsoft Windows [Version 10.0.18362.657], locale ko-KR)
    • Flutter version 1.12.13+hotfix.8 at C:\User\FF\flutter
    • Framework revision 0b8abb4724 (4 weeks ago), 2020-02-11 11:44:36 -0800
    • Engine revision e1e6ced81d
    • Dart version 2.7.0


[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at C:\Users\HP\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)
    • All Android licenses accepted.

[√] Android Studio (version 3.5)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 44.0.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)

[√] Connected device (1 available)
    • Android SDK built for x86 64 • emulator-5554 • android-x64 • Android 10 (API 29) (emulator)

and this is the error log:

java.lang.RuntimeException: Unable to start receiver com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
E/AndroidRuntime( 6448):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3421)
E/AndroidRuntime( 6448):    at android.app.ActivityThread.access$1300(ActivityThread.java:200)
E/AndroidRuntime( 6448):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1684)
E/AndroidRuntime( 6448):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 6448):    at android.os.Looper.loop(Looper.java:201)
E/AndroidRuntime( 6448):    at android.app.ActivityThread.main(ActivityThread.java:6810)
E/AndroidRuntime( 6448):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 6448):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
E/AndroidRuntime( 6448):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
E/AndroidRuntime( 6448): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
E/AndroidRuntime( 6448):    at com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.setSmallIcon(FlutterLocalNotificationsPlugin.java:155)
E/AndroidRuntime( 6448):    at com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.createNotification(FlutterLocalNotificationsPlugin.java:131)
E/AndroidRuntime( 6448):    at com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin.showNotification(FlutterLocalNotificationsPlugin.java:586)
E/AndroidRuntime( 6448):    at com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver.onReceive(ScheduledNotificationReceiver.java:45)
E/AndroidRuntime( 6448):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3412)
E/AndroidRuntime( 6448):    ... 8 more
I/Process ( 6448): Sending signal. PID: 6448 SIG: 9
Lost connection to device.


Solution 1:[1]

It appears that you never run flutterLocalNotificationsPlugin.initialize which means your android and ios notification settings are uninitialized when the app attempts to display a notification.

Another common cause of the issue is the app icon used in the AndroidInitializationSettings not being present in the android/app/src/main/res/drawable folder (Note: the file extension is not needed when calling AndroidInitializationSettings just the filename).

Here is the issue being addressed in Github: https://github.com/MaikuB/flutter_local_notifications/issues/220

I hope this helps

Solution 2:[2]

I had the same problem. I fixed it as follows

in proguard-rules.pro on Android

add this line

-keep class com.dexterous.** { *; }

Solution 3:[3]

It means you did not did not initialize the package and so it did not found that object. So be sure to initialize.

await flutterLocalNotificationsPlugin.initialize(initializationSettings);

it should be after

  final InitializationSettings initializationSettings = InitializationSettings(
  android: initializationSettingsAndroid,
  iOS: initializationSettingsIOS,
  macOS: initialization SettingsMacOS);

The whole code of initialization:

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

const AndroidInitializationSettings initializationSettingsAndroid =  AndroidInitializationSettings('app_icon');

final IOSInitializationSettings initializationSettingsIOS =  const IOSInitializationSettings(
  requestAlertPermission: true,
  requestBadgePermission: true,
  requestSoundPermission: true,
  onDidReceiveLocalNotification: onDidReceiveLocalNotification);

final MacOSInitializationSettings initializationSettingsMacOS = const MacOSInitializationSettings();

final InitializationSettings initializationSettings = InitializationSettings(
  android: initializationSettingsAndroid,
  iOS: initializationSettingsIOS,
  macOS: initializationSettingsMacOS);

  await flutterLocalNotificationsPlugin.initialize(initializationSettings);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jack Kirwan
Solution 2 Nguy?n Trung Hi?u
Solution 3 muhibbin_munna