Как запустить конкретный экран c при появлении уведомления во флаттере - PullRequest
1 голос
/ 09 мая 2020

Я использую firebase_messaging для уведомления, все работает нормально. У меня есть экран видеозвонка. Я хочу запускать этот экран при уведомлении, когда приложение работает в фоновом режиме. Он отлично работает, когда приложение находится на переднем плане.

вот мой код интеграции firebase:

final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        Map data = message["data"];
        if (data.isNotEmpty){
          Fcm.startRinging(data);
        } else {
          showNotification(title: "Message", body: "Telemedicine");
        }
      },
      onLaunch: (Map<String, dynamic> message) async {
        Map data = message["data"];
        print("OnLaunch::: $message");
        showNotification(title: "Message", body: "Telemedicine Call");
      },
      onBackgroundMessage: Fcm.myBackgroundMessageHandler,
      onResume: (Map<String, dynamic> message) async {
        Map data = message["data"];
        print("onResume::: $message");

      },
    );

Здесь я обрабатываю уведомление о полезной нагрузке, когда приложение находится в фоновом режиме:

class Fcm{
  static Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
    print("hello"+message.toString());

    if (message.containsKey('data')) {
      // Handle data message
      final dynamic data = message['data'];
      await startRinging(data);
      print(data);
    }

    if (message.containsKey('notification')) {
      // Handle notification message
      final dynamic notification = message['notification'];
      print(notification);
    }

    return Future<void>.value();
    // Or do other work.
  }


  static void startRinging(Map<dynamic, dynamic> data) async {
    print("start");
    String docName = data["DoctorName"];
    String docImage = data["DoctorImage"];
    String room = data["RoomName"];
    String token = data["PatientToken"];
    Route route = MaterialPageRoute(builder: (_)=> CallResponse(
        docName: docName,
        docImage: docImage,
        token: token,
        roomName: room
    ));
    <Here I am trying to start next route but i don't have BuildContext>
//    await Navigator.push(context, route);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...