Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter: FCM Unhandled Exception: Null check operator used on a null value

E/flutter (26872): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value E/flutter (26872): #0
MethodChannelFirebaseMessaging.registerBackgroundMessageHandler (package:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:173:53) E/flutter (26872): #1
FirebaseMessagingPlatform.onBackgroundMessage= (package:firebase_messaging_platform_interface/src/platform_interface/platform_interface_messaging.dart:108:16)

// Background Messaging Set Up
    Future<void> _firebaseMessagingBackgroundHandler(
        RemoteMessage message) async {
      print('background message');
    }

    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
    runApp(....)

I am getting an error for this code on Android system. Everything works except when the app is terminated.

What works on Android:

  • Notification when Terminated, onBackground and onForeground
  • Date only when onForeground

What does not work on Android:

  • Data only when Terminated and onBackground

What works on iOS:

  • Notification when Terminated, onBackground and onForeground
  • Date only when onForeground

What does not work on iOS:

  • Data only when Terminated,

I have no clue why I am getting that null value error on Android system and how can I fix this issue? Also, is it true that I can not receive the Data only push notification on iOS when the app is terminated?

like image 551
chichi Avatar asked Apr 28 '21 17:04

chichi


People also ask

How do you solve a null check operator used on a null value in Flutter?

Solution 3: Using Fallback Operator: Here, "str" is null, and we set the fallback operator with fallback value in case of "str" is null. You need to do this before using it on the code. You can use this method to handle Null values to escape the "Null check operator used on a null value" error in Flutter or Dart.

How do you handle null in check Flutter?

In Flutter you cannot explicitly initialize a variable to null. Now in the place you are trying to use this variable, you may need to unwrap to get the value from the Nullable variable. if you are trying to use just 'name', your Text widget is going to complain that it cannot accept a null value. Text(name!)

WHAT IS null check operator in Flutter?

before an expression, inserts a list into another only if it's not null. It helps add multiple values to our collection like List, Map, and Set. It is also called a Null check operator.


2 Answers

I had the same error as like you, on the same line. I checked out docs and it says 2 things about background message handler.

  1. It must not be an anonymous function.
  2. It must be a top-level function (e.g. not a class method which requires initialization).

In my case it was not a top-level function, it was declared inside a class. When you move your handler out of any class or function, so that it is a top-level function and doesn't require any class or method initialisation then the error will be gone.

like image 159
Paras khandelwal Avatar answered Sep 29 '22 04:09

Paras khandelwal


_firebaseMessagingBackgroundHandler function should be outside of the main function.

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();
}


Future<void> main() async {

  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);


  runApp(
    ...
  );
}
like image 42
Rafsan Uddin Beg Rizan Avatar answered Sep 29 '22 04:09

Rafsan Uddin Beg Rizan