saveUserTask method
Update or delete a task queue entry.
Implementation
Future<void> saveUserTask(UserTask task) async {
debug("$runtimeType - Saving task to database '$task'.");
switch (task.state) {
case UserTaskState.initialized:
case UserTaskState.enqueued:
case UserTaskState.notified:
case UserTaskState.started:
case UserTaskState.canceled:
case UserTaskState.done:
case UserTaskState.expired:
case UserTaskState.undefined:
// all these cases we need to create or update the record
var snapshot = UserTaskSnapshot.fromUserTask(task);
final Map<String, dynamic> map = {
TASK_ID_COLUMN: task.id,
STUDY_DEPLOYMENT_ID_COLUMN: snapshot.studyDeploymentId,
DEVICE_ROLE_NAME_COLUMN: snapshot.deviceRoleName,
TASK_COLUMN: jsonEncode(snapshot),
};
int count =
await _database?.update(
TASK_QUEUE_TABLE_NAME,
map,
where: '$TASK_ID_COLUMN = ?',
whereArgs: [task.id],
conflictAlgorithm: ConflictAlgorithm.replace,
) ??
0;
if (count == 0) {
await _database?.insert(
TASK_QUEUE_TABLE_NAME,
map,
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
break;
case UserTaskState.dequeued:
// in this case we need to remove the record
await _database?.delete(
TASK_QUEUE_TABLE_NAME,
where: '$TASK_ID_COLUMN = ?',
whereArgs: [task.id],
);
break;
}
}