Search code examples
flutterfirebasedartfirebase-cloud-messaging

i want to send notification when receive a meesage in my chat app but it didn't work


i tried method using firebase_messaging: 7.0.1 but now its firebase_messaging: 14.0.2. i got this error :

Converting object to an encodable object failed: Instance of 'Future<String?>'

sendNotif(String? title, String? body, String? id) async {
  try {
    await http
        .post(
          Uri.parse('https://fcm.googleapis.com/fcm/send'),
          headers: <String, String>{
            'Content-Type': 'application/json',
            'Authorization': 'key=$serverToken',
          },
          body: jsonEncode(
            <String, dynamic>{
              'notification': <String, dynamic>{
                'body': body.toString(),
                'title': title.toString()
              },
              'priority': 'high',
              'data': <String, dynamic>{
                'click_action': 'FLUTTER_NOTIFICATION_CLICK',
                'id': id.toString(),
              },
              'to': FirebaseMessaging.instance.getToken(),
            },
          ),
        )
        .then((value) => (value) {
              print("send succeffuly");
            });
  } catch (e) {
    print("THe ERROR : $e");
  }
}

Solution

  • As the error message says, FirebaseMessaging.instance.getToken() returns a Future<String>, while the post API expects only current (non-Future) values.

    The simplest fix is to await the value:

    'to': await FirebaseMessaging.instance.getToken(),