Bonjour,
Ayant pourtant bien revu le cours à ce sujet, je bloque depuis ce matin sur une question : dans une structure viewmodel (avec usecase) j’ajoute un item, mais ma liste n’est rafraîchie qu’une seule fois. Si j’ajoute un second item, rien ne se passe, un 3ème et j’ai 2 item d’un coup… Forcément, il y a quelque dans la logique des notifyListeners(); qui m’échappe…
Ainsi dans ma view :
Column(
children: [
SizedBox(
height: 500,
width: 400,
child: FutureBuilder<List<GameRoomModel>>(
initialData: [],
future: widget.viewModel.getAllRoom(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return const Center(
child: Text("An error has occured"),
);
} else {
final data = snapshot.data;
Text(widget.viewModel.errorMessageList);
return AnimatedBuilder(
animation: widget.viewModel,
builder: (context, child) {
return Padding(
padding: const EdgeInsets.all(5),
child: ListView.builder(
itemCount: data!.length,
itemBuilder: (context, index) {
return LineGameRoom(
index: index,
listGameroom: data,
deleteRoom:
widget.viewModel.deletingGameRoom,
id: data.elementAt(index).id.toString(),
);
}),
);
});
}
},
),
),
],
),
et dans mon viewModel :
@override
newGameRoom(String ip, String numero) async {
_active = false;
print("state : ${_active.toString()}");
int numeroInt = int.parse(numero);
await _useCaseGameRoom.addNewGameRoom(ip, numeroInt);
_active = true;
print("state2 : ${_active.toString()}");
notifyListeners();
}
@override
Future<List<GameRoomModel>> getAllRoom() async {
List<GameRoomModel> myList = await _useCaseGameRoom.getAllGameRoom();
if (myList.isNotEmpty == true) {
print("Affichage de la liste");
} else {
print("Une erreur est survenue");
}
}
Le problème est qu’en regardant les logs, l’affichage de la liste d’effectue avant la création du nouvel item, donc ce dernier l’apparait pas. Le problème est que mon notifyListeners(); est bien envoyé après et dans une fonction async.