updateChanges method
Updates the device details in Appwrite with the current values from the controllers.
Only allows update if the current user has the UserRoles.admin role. Emits DeviceEditSaving while saving, and DeviceEditLoaded or DeviceEditError on completion.
Implementation
Future<void> updateChanges() async {
emit(DeviceEditSaving());
UserModel? user = prefs.getUser();
if (user?.role == UserRoles.admin) {
try {
await db.updateDocument(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.deviceCollectionId,
documentId: documentId,
data: {
'deviceCode': deviceCodeController.text.trim(),
'deviceName': deviceNameController.text.trim(),
},
);
final tabletResult = await db.listDocuments(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.deviceCollectionId,
queries: [Query.equal('documentId', documentId)],
);
if (tabletResult.documents.isNotEmpty) {
final tabletDocId = tabletResult.documents.first.$id;
await db.updateDocument(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.deviceCollectionId,
documentId: tabletDocId,
data: {
'tabletSerialNumber': tabletSerialNumberController.text.trim(),
},
);
}
emit(DeviceEditSaved());
} catch (e) {
emit(DeviceEditError("Failed to update device: $e"));
}
} else {
emit(DeviceEditError("${user?.role} role cannot edit device"));
}
}