Segue a minha implementação para o desafio:
Criei o arquivo confirmation_dialog.dart em lib/core/helpers conforme segue:
import 'package:flutter/material.dart';
Future<bool?> showConfirmationDialog(
BuildContext context,
String content,
) async {
return showDialog<bool>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text("Atenção"),
content: Text(content),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(context).pop(false);
},
child: const Text("Cancelar"),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(true);
},
child: const Text("Confirmar"),
),
],
);
},
);
}
Na home_screen ajustei as funções saveOnServer, syncWithServer e clearServerData para apresentar o dialog de confirmação:
saveOnServer() async {
bool? confirma = await showConfirmationDialog(
context,
"Confirma a sobrescrita dos dados na nuvem?",
);
if (confirma != null && confirma) {
await _dioService.saveLocalToServer(_appDatabase).then((error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text((error != null) ? error : "Dados salvos."),
duration: const Duration(seconds: 3),
),
);
});
}
}
syncWithServer() async {
bool? confirma = await showConfirmationDialog(
context,
"Confirma a syncronização local com o servidor?",
);
if (confirma != null && confirma) {
await _dioService.getDataFromServer(_appDatabase).then((error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text((error != null) ? error : "Dados sincronizados."),
duration: const Duration(seconds: 3),
),
);
});
}
refresh();
}
clearServerData() async {
bool? confirma = await showConfirmationDialog(
context,
"Confirma a exclusão dos dados na nuvem?",
);
if (confirma != null && confirma) {
await _dioService.clearServerData().then((error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
(error != null) ? error : "Dados excluídos no servidor.",
),
duration: const Duration(seconds: 3),
),
);
});
}
}
...
Atenção! Esta implementação já está na versão final do projeto, contendo todas as implementações realizadas neste módulo.
Abraço!