Flutter FCM onBackgroundMessage не работает для вложенных вызовов не-stati c методов - PullRequest
1 голос
/ 19 февраля 2020

Я использую 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. Я, наверное, что-то здесь упускаю.

...