I’m facing an issue where I receive a 422 error when attempting to update records in my Airtable database using my Flutter application. The error message is [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Exception: 422. While I’m able to read and delete records without any problems, updates just refuse to go through, no matter how I approach it.
employee_service.dart
import 'package:http/http.dart' as http;
import 'package:myapp/models/employee_model.dart';
import 'package:myapp/config/app_config.dart';
class EmployeeService {
final Uri baseUrl = Uri.https(
"api.airtable.com",
"/v0/${AppConfig.baseId}/employees",
{"maxRecords": "100", "view": "Main view"},
);
Future<List<Employee>> fetchEmployees() async {
final response = await http.get(
baseUrl,
headers: {"Authorization": "Bearer ${AppConfig.apiToken}"},
);
if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
var records = jsonData['records'];
List<Employee> employees = [];
records.forEach((record) => {
employees.add(
Employee(
recordId: record['id'],
firstName: record['fields']['firstName'],
lastName: record['fields']['lastName'],
profileImage: record['fields']['profileImage'][0]['url'],
status: record['fields']['status'],
email: record['fields']['email'],
city: record['fields']['city'],
phone: record['fields']['phone'],
approved: record['fields']['approved'],
resume: record['fields']['resume'][0]['url'],
latitude: record['fields']['latitude'].toDouble(),
longitude: record['fields']['longitude'].toDouble(),
),
)
});
return employees;
} else {
throw "Request failed";
}
}
Future<String> removeEmployee(String recordId) async {
final response = await http.delete(
Uri.https("api.airtable.com", "/v0/${AppConfig.baseId}/employees/$recordId"),
headers: {"Authorization": "Bearer ${AppConfig.apiToken}"},
);
if (response.statusCode == 200) {
return recordId;
} else {
throw Exception(response.statusCode);
}
}
Future<Employee> modifyEmployee(String recordId, String approvalStatus) async {
final response = await http.patch(
Uri.https("api.airtable.com", "/v0/${AppConfig.baseId}/employees/$recordId"),
headers: {
"Authorization": "Bearer ${AppConfig.apiToken}",
"Content-Type": "application/json",
},
body: jsonEncode({
'fields': {
'approved': approvalStatus,
}
}),
);
if (response.statusCode == 200) {
return Employee.fromJson(jsonDecode(response.body));
} else {
throw Exception(response.statusCode);
}
}
}
employee_model.dart
class Employee {
String recordId;
String firstName;
String lastName;
String profileImage;
String status;
String phone;
String email;
String city;
String resume;
String approved;
double latitude;
double longitude;
Employee({
required this.recordId,
required this.firstName,
required this.lastName,
required this.profileImage,
required this.status,
required this.phone,
required this.email,
required this.city,
required this.resume,
required this.latitude,
required this.longitude,
required this.approved,
});
factory Employee.fromJson(Map<String, dynamic> data) {
return Employee(
recordId: data['id'],
firstName: data['fields']['firstName'],
lastName: data['fields']['lastName'],
profileImage: data['fields']['profileImage'][0]['url'],
status: data['fields']['status'],
email: data['fields']['email'],
city: data['fields']['city'],
phone: data['fields']['phone'],
approved: data['fields']['approved'],
resume: data['fields']['resume'][0]['url'],
latitude: data['fields']['latitude'].toDouble(),
longitude: data['fields']['longitude'].toDouble(),
);
}
}
Can anyone help me understand what’s causing this 422 error? I’m completely stuck and would really appreciate any assistance!