提问者:小点点

如何在flutter中将Future<List>转换为List?


我正在使用一个名为search_widget的flutter插件。这个小部件的数据参数需要一个列表。但是当我使用sqlite获取数据时,我在Future中有它


共3个答案

匿名用户

使用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

我希望这有助于,如有任何疑问,请评论。

匿名用户

List list = await _fetchList();

假设_fetchList()是这样的:

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

匿名用户

借用search_widget的例子,你需要dataList在这样的小部件中:

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

当然,您可以转换Future

当Future完成时,您必须返回进度指示器之类的东西。为此,您可以使用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来完成,您可以查看本文以获取该问题的详细解释。