Я использую firebase_messaging 6.0.9
с flutter 1.12.13
. В readme репо: https://pub.dev/packages/firebase_messaging# -readme-tab- говорится, что нужно объявить обратный вызов onBackgroudMessage
как метод c или метод верхнего уровня. Что я и сделал, но он не работает, когда этот обратный вызов вызывает нестати c метод. В следующем примере демонстрируется это с одноэлементным классом:
class NotificationService {
static NotificationService _instance;
final FirebaseMessaging _firebase;
static NotificationService get instance => _instance;
NotificationService._internal() : this._firebase = FirebaseMessaging();
factory NotificationService() {
if (_instance == null) {
_instance = NotificationService._internal();
_instance._firebase.configure(
onBackgroundMessage: NotificationService.staticHandler
);
}
return _instance;
}
static Future<dynamic> staticHandler(Map<String, dynamic> msg) {
print("Static Func >>> $msg"); // Successfully prints
return NotificationService.instance.instanceFunc(msg); // Fails here, complaining that it's being invoked on null.
}
Future<dynamic> instanceFunc(Map<String, dynamic> msg) {
print("Instance Func >>> $msg");
}
void myVarFunc() {
print("This is my var func");
}
}
в main.dart
, вызывается конструктор фабрики службы уведомлений:
import 'package:myProject/services/notification/notification_service.dart';
run(MyApp());
class MyApp extends StatelessWidget {
final NotificationService _ns = NotificationService();
NotificationService.instance.myVarFunc(); // Prints successfully.
.......
.......
.......
}
Сбой вызова instanceFun c, говоря, что он вызывается на ноль. Ниже приведены журналы:
I/flutter ( 6935): Static Func >>> {data: {title: Title_is_here, message: Message_is_here}}
I/flutter ( 6935): Unable to handle incoming background message.
I/flutter ( 6935): NoSuchMethodError: The method 'instanceFunc' was called on null.
I/flutter ( 6935): Receiver: null
I/flutter ( 6935): Tried calling: instanceFunc(_LinkedHashMap len:1)
Я не совсем уверен, что это правильный способ справиться с этим сценарием. Поскольку я новичок в Дарт и Флаттер, мои знания довольно ограничены. Я не могу объявить все, что я имею в виду, и работаю, это не очень хороший дизайн IMO. Я, наверное, что-то здесь упускаю.