onMessage static method

dynamic onMessage(
  1. JavaScriptMessage jsMessage, {
  2. required RolleeConnectConfig config,
  3. required dynamic onCompletedHandler(
    1. RolleeConnectResult result
    ),
  4. required dynamic onCloseHandler(
    1. bool close
    ),
  5. required dynamic onLoginSuccessHandler(
    1. RolleeConnectLoginResult loginResult
    ),
  6. required dynamic onHomeHandler(),
  7. required dynamic onTermsHandler(),
  8. required dynamic onSearchHandler(),
  9. required dynamic onLoginHandler(),
  10. required dynamic onFetchHandler(),
  11. required dynamic onConnectedHandler(),
})

This the method used to communicate with the web view of Rollee Connect.

Implementation

static onMessage(
  JavaScriptMessage jsMessage, {
  required RolleeConnectConfig config,
  required Function(RolleeConnectResult result) onCompletedHandler,
  required Function(bool close) onCloseHandler,
  required Function(RolleeConnectLoginResult loginResult)
      onLoginSuccessHandler,
  required Function() onHomeHandler,
  required Function() onTermsHandler,
  required Function() onSearchHandler,
  required Function() onLoginHandler,
  required Function() onFetchHandler,
  required Function() onConnectedHandler,
}) {
  String rawMessage = jsMessage.message;
  String firstLetter = rawMessage.substring(0, 1);
  bool isNotAJsonMessage = firstLetter != "{";

  if (isNotAJsonMessage) {
    switch (rawMessage) {
      case 'closeSession':
        RolleeLogger.connectLog("Session's close triggered.");
        onCloseHandler(true);
        break;

      case 'Home':
        RolleeLogger.connectLog("Home screen triggered.");
        onHomeHandler();
        break;
      case 'Terms':
        RolleeLogger.connectLog("Terms screen triggered.");
        onTermsHandler();
        break;

      case 'Search':
        RolleeLogger.connectLog("Search screen triggered.");
        onSearchHandler();
        break;

      case 'Login':
        RolleeLogger.connectLog("Login screen triggered.");
        onLoginHandler();
        break;

      case 'Fetch':
        RolleeLogger.connectLog("Fetch screen triggered.");
        onFetchHandler();
        break;

      case 'Connected':
        RolleeLogger.connectLog("Connected screen triggered.");
        onConnectedHandler();
        break;

      default:
        RolleeLogger.connectLog("An unexpected message is posted from RolleeConnect widget.");

        break;
    }
  } else {
    assert(rawMessage.startsWith("{") && rawMessage.endsWith("}"));

    Map<String, dynamic> decodedMessage =
        jsonDecode(rawMessage) as Map<String, dynamic>;
    bool onCompleted = decodedMessage["onCompleted"] ?? false;
    bool onLoginSuccess = decodedMessage["onLoginSuccess"] ?? false;

    if (onCompleted) {
      RolleeLogger.connectLog("onCompleted triggered");

      onCompletedHandler(
        RolleeConnectResult(
          isCompleted: true,
          userUUID: decodedMessage["userUUID"],
        ),
      );
    } else if (onLoginSuccess) {
      RolleeLogger.connectLog("onLoginSuccess triggered");

      onLoginSuccessHandler(
        RolleeConnectLoginResult(
          isCompleted: true,
          accountId: decodedMessage["accountID"],
          dataSourceId: decodedMessage["datasourceID"],
        ),
      );
    }
  }
}