web-dev-qa-db-fra.com

Comment convertir Future <List> en liste en flutter?

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.

3
Aether

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 .

0
Frank Treacy
List list = await _fetchList();

En supposant que _fetchList() est quelque chose comme:

Future<List> _fetchList() {...}
2
CopsOnRoad

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.

1
Kalpesh Kundanani

en supposant que c'est votre fonction de retour dataList () qui est Futur:

 List yourlist = new List();
   dataList().then((resultat){
          setState(() => yourlist.add(resultat); 
        });
0
GirlWhoCode