Com estudo de algumas práticas que são mais recomendadas dentro do desenvolvimento mobile, me deparei com o conceito de otimistic update. Com isso, temos que é primeiro atualizado a interface a qual está sendo trabalhada, e depois disso, enviamos os dados para o back-end para que eles sejam processados. Temos que esse processo se cosntroi assim, por intuir maior responsividade ao usuário, e perimitir que o mesmo tenta uma experiência mais facilitada de assimilar os conhecimentos que estão sendo adquiridos com a aplicação.
Temos que um exemplo desse conceito na prova, é o seguinte:
Future<void> toggleTaskConclusion(int id, int index) async {
final currentTask = _taskList[index];
final previousValue = currentTask["conclusion"];
final newValue = !previousValue;
// ✅ 1. Atualiza a UI primeiro
_taskList[index]["conclusion"] = newValue;
notifyListeners();
try {
// ✅ 2. Faz o update real no banco de dados
await Supabase.instance.client
.from("tasks")
.update({"conclusion": newValue})
.eq("id", id);
} catch (e) {
// ✅ 3. Se der erro, reverte a UI
_taskList[index]["conclusion"] = previousValue;
notifyListeners();
debugPrint("Erro ao atualizar: $e");
}
}
Future<void> toggleTaskConclusion(int id, int index) async {
try {
// 1. Busca o valor atual do banco
final task = await Supabase.instance.client
.from("tasks")
.select()
.eq("id", id)
.single();
final newValue = !(task["conclusion"]);
// 2. Atualiza no banco
await Supabase.instance.client
.from("tasks")
.update({"conclusion": newValue})
.eq("id", id);
// 3. Só depois atualiza a UI
_taskList[index]["conclusion"] = newValue;
notifyListeners();
} catch (e) {
debugPrint("Erro ao atualizar: $e");
}
}Com isso, temos que a busca dentro do banco de dados, atrasa a responsividade que devemos ter dentro da nossa interface, dificultando o entendimento do usuário, do funcionamento ou do erro da task. Portanto, deve-se ter em mente a necessidade de ao fazer o uso de alguma API, ou comunicação com o back-end, primeiro responder dentro da interface, de modo a facilitar o entendimento imediato da ação do usuário, e somente posteriormente, fazer a ação dentro do back-end