login function

Future login({
  1. required String appId,
  2. required String userId,
  3. String? userHash,
  4. String? name,
  5. String? email,
  6. String? phoneNumber,
  7. AtlasCustomFields? customFields,
})

Implementation

Future login(
    {required String appId,
    required String userId,
    String? userHash,
    String? name,
    String? email,
    String? phoneNumber,
    AtlasCustomFields? customFields}) {
  var uri = Uri.parse(_loginUrl);

  return http
      .post(uri,
          headers: {'Content-Type': 'application/json'},
          body: jsonEncode({
            'appId': appId,
            'userId': userId,
            ...(userHash == null ? {} : {'userHash': userHash}),
            ...(name == null ? {} : {'name': name}),
            ...(email == null ? {} : {'email': email}),
            ...(phoneNumber == null ? {} : {'phoneNumber': phoneNumber}),
            ...(customFields == null ? {} : {'customFields': customFields}),
          }))
      .then(
    (response) {
      if (response.statusCode >= 200 && response.statusCode < 300) {
        return jsonDecode(response.body);
      }

      var text = response.body;

      try {
        var body = jsonDecode(text);
        var errorMessage =
            body is Map && body.containsKey('detail') && body['detail'] is String ? body['detail'] : jsonEncode(body);

        throw Exception("Login failed: $errorMessage");
      } catch (err) {
        throw Exception("Login failed: HTTP(${response.statusCode}) $text");
      }
    },
  );
}