title: firebase_messaging flutter plugin crashing on startup if handling background messages
body: <p>I integrated <a href="https://pub.dev/packages/firebase_messaging" rel="nofollow noreferrer">firebase_messaging v5.1.6</a> with my flutter app as mentioned in README with "handling of background messages" option.</p>
  
  <p>Here are how my files look.</p>
  
  <p>MyApplication.kt</p>
  
  <pre><code>class MyApplication : FlutterApplication(), PluginRegistrantCallback {
      override fun onCreate() {
          super.onCreate()
          FlutterFirebaseMessagingService.setPluginRegistrant(this)
      }
  
      override fun registerWith(registry: PluginRegistry) {
          GeneratedPluginRegistrant.registerWith(registry)
      }
  }
  </code></pre>
  
  <p>firebase_util.dart</p>
  
  <pre class="lang-dart prettyprint-override"><code>import 'package:firebase_analytics/firebase_analytics.dart';
  import 'package:firebase_analytics/observer.dart';
  import 'package:firebase_messaging/firebase_messaging.dart';
  
  final kFirebaseAnalyticsObserver =
      FirebaseAnalyticsObserver(analytics: FirebaseUtil().analytics);
  
  Future&lt;dynamic&gt; kFirebaseMessagingBackgroundMessageHandler(
      Map&lt;String, dynamic&gt; message) async {
    if (message.containsKey('data')) {
      // Handle data message
      final dynamic data = message['data'];
    }
  
    if (message.containsKey('notification')) {
      // Handle notification message
      final dynamic notification = message['notification'];
    }
  }
  
  class FirebaseUtil {
    static final FirebaseUtil _firebaseUtil = FirebaseUtil._internal();
  
    factory FirebaseUtil() {
      return _firebaseUtil;
    }
  
    FirebaseUtil._internal();
  
    final analytics = FirebaseAnalytics();
    final messaging = FirebaseMessaging();
  
    void messagingInit() {
      messaging.requestNotificationPermissions();
      messaging.configure(
        onMessage: (Map&lt;String, dynamic&gt; message) async {
          print("onMessage: $message");
        },
        onBackgroundMessage: kFirebaseMessagingBackgroundMessageHandler,
        onLaunch: (Map&lt;String, dynamic&gt; message) async {
          print("onLaunch: $message");
        },
        onResume: (Map&lt;String, dynamic&gt; message) async {
          print("onResume: $message");
        },
      );
    }
  }
  </code></pre>
  
  <p>I call <code>FirebaseUtil().messagingInit()</code> in <code>initState</code> of the root App widget.</p>
  
  <p>Here is the error log I get when the app is starting up.</p>
  
  <pre><code>E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252): Failed to handle method call
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252): java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.app.Activity.getApplicationContext()' on a null object reference
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at com.alternadom.wifiiot.WifiIotPlugin.&lt;init&gt;(WifiIotPlugin.java:65)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at com.alternadom.wifiiot.WifiIotPlugin.registerWith(WifiIotPlugin.java:76)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:40)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at &lt;&lt;package_name&gt;&gt;.MyApplication.registerWith(MyApplication.kt:18)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService.startBackgroundIsolate(FlutterFirebaseMessagingService.java:164)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.onMethodCall(FirebaseMessagingPlugin.java:134)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:222)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:96)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:656)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at android.os.MessageQueue.nativePollOnce(Native Method)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at android.os.MessageQueue.next(MessageQueue.java:326)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at android.os.Looper.loop(Looper.java:160)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at android.app.ActivityThread.main(ActivityThread.java:6669)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at java.lang.reflect.Method.invoke(Native Method)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
  E/MethodChannel#plugins.flutter.io/firebase_messaging( 6252):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
  ...
  E/flutter ( 6252): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'android.content.Context android.app.Activity.getApplicationContext()' on a null object reference, null)
  E/flutter ( 6252): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
  E/flutter ( 6252): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:316:33)
  E/flutter ( 6252): &lt;asynchronous suspension&gt;
  E/flutter ( 6252): #2      FirebaseMessaging.configure (package:firebase_messaging/firebase_messaging.dart:118:16)
  E/flutter ( 6252): #3      FirebaseUtil.messagingInit (package:&lt;&lt;package_name&gt;&gt;/util/firebase_util.dart:37:15)
  E/flutter ( 6252): #4      _MainPageState.initState (package:&lt;&lt;package_name&gt;&gt;/pages/main.dart:29:20)
  E/flutter ( 6252): #5      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4068:58)
  E/flutter ( 6252): #6      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3919:5)
  E/flutter ( 6252): #7      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3101:14)
  E/flutter ( 6252): #8      Element.updateChild (package:flutter/src/widgets/framework.dart:2904:12)
  E/flutter ( 6252): #9      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
  E/flutter ( 6252): #10     Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
  E/flutter ( 6252): #11     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2348:33)
  E/flutter ( 6252): #12     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:760:20)
  E/flutter ( 6252): #13     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
  E/flutter ( 6252): #14     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
  E/flutter ( 6252): #15     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
  E/flutter ( 6252): #16     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:891:5)
  E/flutter ( 6252): #17     _rootRun (dart:async/zone.dart:1124:13)
  E/flutter ( 6252): #18     _CustomZone.run (dart:async/zone.dart:1021:19)
  E/flutter ( 6252): #19     _CustomZone.runGuarded (dart:async/zone.dart:923:7)
  E/flutter ( 6252): #20     _invoke (dart:ui/hooks.dart:249:10)
  E/flutter ( 6252): #21     _drawFrame (dart:ui/hooks.dart:207:3)
  </code></pre>
  
  <p>$ flutter doctor -v</p>
  
  <pre><code>[✓] Flutter (Channel stable, v1.9.1+hotfix.2, on Linux, locale en_IN)
      • Flutter version 1.9.1+hotfix.2 at /home/harsh/flutter
      • Framework revision 2d2a1ffec9 (3 weeks ago), 2019-09-06 18:39:49 -0700
      • Engine revision b863200c37
      • Dart version 2.5.0
  
   [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
      • Android SDK at /home/harsh/Android/Sdk
      • Android NDK location not configured (optional; useful for native profiling support)
      • Platform android-28, build-tools 28.0.3
      • Java binary at: /home/harsh/android-studio/jre/bin/java
      • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
      • All Android licenses accepted.
  
  [✓] Android Studio (version 3.5)
      • Android Studio at /home/harsh/android-studio
      • Flutter plugin version 39.0.3
      • Dart plugin version 191.8423
      • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
  
  [✓] Connected device (1 available)
      • Android SDK built for x86 • emulator-5554 • android-x86 • Android 9 (API 28) (emulator)
  
  • No issues found!
  </code></pre>
  
  <p>I checked the README carefully and checked the implementation. It looks good to me. Don't know what is wrong? Is there any bug in the plugin? </p>
  
  <p>This exact code works if I don't pass <code>onBackgroundMessage</code> argument in <code>FirebaseMessaging.configure</code> method.</p>