MissingPluginException(реализация для инициализации метода на канале dexterous.com/flutter/local_notifications не найдена)
Я пытаюсь настроить самую простую версию локальных уведомлений flutter, но продолжаю получать эту ошибку
[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: MissingPluginException(No implementation found for method initialize on channel dexterous.com/flutter/local_notifications)
Когда я смотрю на мой автоматически сгенерированный java-файл регистранта плагина
package io.flutter.plugins;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.FlutterEngine;
/**
* Generated file. Do not edit.
* This file is generated by the Flutter tool based on the
* plugins that support the Android platform.
*/
@Keep
public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.firestore.FlutterFirebaseFirestorePlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.auth.FlutterFirebaseAuthPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebasedynamiclinks.FirebaseDynamicLinksPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.storage.FlutterFirebaseStoragePlugin());
flutterEngine.getPlugins().add(new com.byneapp.flutter_config.FlutterConfigPlugin());
flutterEngine.getPlugins().add(new app.meedu.flutter_facebook_auth.FlutterFacebookAuthPlugin());
flutterEngine.getPlugins().add(new com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.googlesignin.GoogleSignInPlugin());
}
}
Я считаю, что плагин зарегистрирован. Так почему же тогда возникает ошибка? Это код, который я использую
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class FirebaseMessagingProvider extends PushNotificationProvider {
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
FirebaseMessagingProvider() {
initializeLocalNotifications();
}
Future<void> initializeLocalNotifications() async {
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('app_icon');
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'high_importance_channel', // id
'High Importance Notifications', // title
'This channel is used for important notifications.', // description
importance: Importance.max,
);
final InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (_) async => print("notified"));
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
}
}
Ошибка возникает в этой строке
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (_) async => print("notified"));
Я посмотрел на следующую проблему github
https://github.com/MaikuB/flutter_local_notifications/issues/238
но, похоже, он нацелен в основном на проекты flutter 1, где вам приходилось регистрировать плагины самостоятельно. Я попробовал с application.kt, но это не сработало.
Так почему же появляется эта ошибка?
Версия Flutter: Flutter 2.2.0 • стабильный канал • https://github.com/flutter/flutter.git
2 ответа
решение здесь простое, я только сегодня столкнулся с ним, дело в том, что нужно позвонить
flutterLocalNotificationsPlugin.initialize()
на ранней стадии жизненного цикла вашего виджета, особенно потому, что плагин не может быть правильно инициализирован
@override
void initState() {
super.initState();
}
так что в вашем случае просто создайте свой
initState()
метод и движение
FirebaseMessagingProvider()
внутри него
Просто остановите запущенное приложение
запустить флаттер чистый и флаттер паб получить
и снова запустите ваше приложение
и проблема больше никогда не повторится
Попробуйте один раз.