web-dev-qa-db-ja.com

FlutterでFuture <List>をListに変換する方法は?

search_widgetというフラッター用プラグインを使用しています。このウィジェットのデータパラメータはリストを取ります。しかし、データを取得するためにsqliteを使用しているので、Future<List>形式で持っています。 Future<List>Listに変換する方法はありますか?またはこれを機能させる他の方法。

3
Aether

search_widget から例を借用するには、次のようなウィジェットでdataListが必要です。

_SearchWidget<LeaderBoard>(
   dataList: list,
   textFieldBuilder: (TextEditingController controller, FocusNode focusNode) {
     return MyTextField(controller, focusNode);
   },
 )
_

もちろん、他の回答が示唆するように、_Future<List>_をListに変換できます。ただし、buildメソッドは純粋で同期的であるように設計されているため、dataList: await _sqliteCall();を実行することはできません。

フューチャーが完了すると、進捗インジケーターのようなものを返す必要があります。そのためには、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();
  }
),
_

もちろん、これはStatefulWidgetを使用して行うこともできます。 問題の詳細な説明については、この記事 を確認してください。

0
Frank Treacy
_List list = await _fetchList();
_

_fetchList()が次のようなものであると仮定します。

_Future<List> _fetchList() {...}
_
2
CopsOnRoad

awaitキーワードを使用すると、Futureが完了するまで待機し、Futureが実行されると、その結果が返されます。

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]);
}

これが機能するには、呼び出すメソッドがasyncである必要があります

これが役に立てば幸いです。疑問がある場合はコメントしてください。

1

これがFutureである関数dataList()を返すと仮定すると、

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