firebaseflutterflutter-dependencieslocalnotification

MissingPluginException(No implementation found for method show on channel dexterous.com/flutter/local_notifications)


I've try implement Firebase Cloud Messaging with Flutter, and i was success until i use 'Local Notification' plugin for show notification

My notification work fine on foreground, but on background this show this error:

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method show on channel dexterous.com/flutter/local_notifications)

I use Firebase Cloud Messaging 6.0.9, Local Notification 1.2.0+4 and latest Flutter

Here is my code: NotificationHandler

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

class NotificationHandler{
  static final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // make it a static field of the class

  static void initNotification()
  {

// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
    var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
    var initializationSettingsIOS = IOSInitializationSettings(
        onDidReceiveLocalNotification: onDidReceiveLocalNotification);
    var initializationSettings = InitializationSettings(
        initializationSettingsAndroid, initializationSettingsIOS);
    flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: onSelectNotification);
  }
  static Future onSelectNotification(String payload) async {
    if (payload != null) {
      print('notification payload: ' + payload);
    }

  }
  static Future onDidReceiveLocalNotification(int id, String title, String body, String payload) {
    print(title+" "+body);
  }

}

ShowNotification method

static void showNotification(data, data2) async {
      var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
          'dexterous.com.flutter.local_notifications', 'your channel name', 'your channel description',
          importance: Importance.Max,
          priority: Priority.High);
      var iOSPlatformChannelSpecifics =
      new IOSNotificationDetails();
      var platformChannelSpecifics = new NotificationDetails(
          androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);

      await NotificationHandler.flutterLocalNotificationsPlugin
      .show(
        0,
        data,
        data2,
        platformChannelSpecifics,
        payload: 'Custom_Sound',
      );

  }

Solution

  • I have found solution, that why in platform side we don't register for outside plugin

    Add in your FCMPluginRegistrant.java like

    public final  class FirebaseCloudMessagingPluginRegistrant {
    
        public static void registerWith(PluginRegistry registry) {
    
            if (alreadyRegisteredWith(registry)) {
                return;
            }
            FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
            FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
    
    
        }
    
    
    
    
        private static boolean alreadyRegisteredWith(PluginRegistry registry) {
            final String key = FirebaseCloudMessagingPluginRegistrant.class.getCanonicalName();
            if (registry.hasPlugin(key)) {
                return true;
            }
            registry.registrarFor(key);
            return false;
        }
    }
    

    And call it on Application.java

      @Override
        public void registerWith(PluginRegistry registry) {
    
    
    
            FirebaseCloudMessagingPluginRegistrant.registerWith(registry);
    
        }