doInit method

Future<RemoteMessage?> doInit({
  1. FCMRequestFunc? requestFunc,
  2. TargetPlatform? platform,
})

get current platform from

Theme.of(context).platform

or

defaultTargetPlatform

Implementation

Future<RemoteMessage?> doInit({
  FCMRequestFunc? requestFunc,
  TargetPlatform? platform,
}) async {
  platform ??= defaultTargetPlatform;
  //disable on windows and linux
  _canUseFCM = kIsWeb ||
      (platform != TargetPlatform.windows &&
          platform != TargetPlatform.linux);

  if (canUseFCM &&
      (kIsWeb ||
          platform == TargetPlatform.iOS ||
          platform == TargetPlatform.macOS)) {
    final settings = await requestFunc?.call();
    if (settings != null) {
      print('User permission: ${settings.authorizationStatus}');
      if (settings.authorizationStatus == AuthorizationStatus.denied ||
          settings.authorizationStatus == AuthorizationStatus.notDetermined) {
        _canUseFCM = false;
      }
    }
  }

  if (canUseFCM) {
    final initMessage = await FirebaseMessaging.instance.getInitialMessage();

    _streamSubs['onMessage'] = FirebaseMessaging.onMessage.listen((event) {
      _raiseEvent(NotificationSource.OnMessage, event);
    });
    FirebaseMessaging.onBackgroundMessage(_handleBackgroundNotifs);
    _streamSubs['onMessageOpenedApp'] =
        FirebaseMessaging.onMessageOpenedApp.listen((event) {
      _raiseEvent(NotificationSource.OnMessageOpenedApp, event);
    });
    return initMessage;
  } else {
    return null;
  }
}