markSessionStart function

Future<void> markSessionStart()

Implementation

Future<void> markSessionStart() async {
  var currentTime = DateTime.now().millisecondsSinceEpoch;

  SharedPreferences prefs = await SharedPreferences.getInstance();

  var sessionStart = prefs.getInt("session-start") ?? 0;
  var sessionEnd = prefs.getInt("session-end") ?? sessionStart;
  var sessionLength = prefs.getInt("session-length") ?? 0;

  sessionLength += sessionEnd - sessionStart;

  prefs.setInt("session-length", sessionLength);

  prefs.setInt("session-start", currentTime);

  if (currentTime - sessionEnd > const Duration(seconds: 10).inMilliseconds) {
    var sessionId = prefs.getString("session-id");

    prefs.setString("session-id", randomAlphaNumeric(10));
    prefs.setInt("session-length", 0);
    prefs.setInt("session-end", 0);

    if (sessionLength > 0) {
      LogEvent event = LogEvent();
      event.name = "session_length";
      event.value = sessionLength.toString();
      event.params = {"id": sessionId, "time": sessionLength};
      LogApi().logEvent(event);
    }
  }

  await prefs.setString("app_state", "resumed");
}