J'utilise un plugin pour flutter appelé search_widget
. Le paramètre data de ce widget prend une liste. Mais comme j'utilise sqlite
pour récupérer des données, je les ai dans Future<List>
forme. Est-il possible que je puisse convertir Future<List>
à List
? Ou tout autre moyen de faire fonctionner cela.
En empruntant l'exemple de search_widget vous avez besoin de dataList
dans un widget comme celui-ci:
SearchWidget<LeaderBoard>(
dataList: list,
textFieldBuilder: (TextEditingController controller, FocusNode focusNode) {
return MyTextField(controller, focusNode);
},
)
Bien sûr, vous pouvez convertir Future<List>
En List
comme le suggèrent d'autres réponses. Mais vous ne serez pas capable de faire dataList: await _sqliteCall();
parce que les méthodes build
sont conçues pour être pures et symétriques.
Pendant que le futur se termine, vous devrez renvoyer quelque chose comme un indicateur de progression. Pour cela, vous pouvez utiliser un FutureBuilder
:
FutureBuilder<List<Leaderboard>>(
future: _sqliteCall(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return SearchWidget<LeaderBoard>(
dataList: snapshot.data,
textFieldBuilder: (TextEditingController controller, FocusNode focusNode) {
return MyTextField(controller, focusNode);
},
)
}
return CircularProgressIndicator();
}
),
Bien sûr, cela peut également être fait avec un StatefulWidget
, vous pouvez vérifier cet article pour une explication détaillée du problème .
List list = await _fetchList();
En supposant que _fetchList()
est quelque chose comme:
Future<List> _fetchList() {...}
L'utilisation du mot-clé await
attendra que Future soit terminé et une fois que votre Future sera exécuté, son résultat vous sera retourné.
import 'Dart:async';
void main() async {
Future<List> _futureOfList = _getList();
List list = await _futureOfList ;
print(list); // will print [1, 2, 3, 4] on console.
}
Future<List> _getList(){
return Future.value([1,2,3,4]);
}
pour que cela fonctionne, la méthode que vous appelez doit être async
J'espère que cela aide, en cas de doute, veuillez commenter.
en supposant que c'est votre fonction de retour dataList () qui est Futur:
List yourlist = new List();
dataList().then((resultat){
setState(() => yourlist.add(resultat);
});