search_widget
というフラッター用プラグインを使用しています。このウィジェットのデータパラメータはリストを取ります。しかし、データを取得するためにsqlite
を使用しているので、Future<List>
形式で持っています。 Future<List>
をList
に変換する方法はありますか?またはこれを機能させる他の方法。
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
を使用して行うこともできます。 問題の詳細な説明については、この記事 を確認してください。
_List list = await _fetchList();
_
_fetchList()
が次のようなものであると仮定します。
_Future<List> _fetchList() {...}
_
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
である必要があります
これが役に立てば幸いです。疑問がある場合はコメントしてください。
これがFutureである関数dataList()を返すと仮定すると、
List yourlist = new List();
dataList().then((resultat){
setState(() => yourlist.add(resultat);
});