Flutter - 遍历异步/ future 列表

标签 flutter asynchronous dart future

我正在尝试创建一个包含由 SharedPreferences 获取的值的列表。但是,如果我想使用 SharedPreference,我必须使用异步方法/ future 类型,但我不知道如何使用它们。我尝试遍历 sports 列表,但它是异步的/ future 的。那么我该如何迭代它(使用 map )?

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        Center(
          child: Align(
            alignment: Alignment.bottomCenter,
            child: CarouselSlider(
              options: CarouselOptions(
                height: 565,
                aspectRatio: 16/9,
                enlargeCenterPage: true,
                viewportFraction: .8,
              ),
              items: sportsList.map((i) {
                return Builder(builder: (BuildContext context) {
                  return Container(
                    .......
                    .........
                    .......
}


  static Future<bool> initSharedPreference(String key) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    
    return prefs.getBool(key) ?? false;
  }


  Future<List> sportsList() async {
    List sports=[
      await initSharedPreference("test")), 
        ....,
        ....,
        ....
    ];
  }

由于以下原因,此代码不起作用:

方法“map”没有为类型“Future”定义。

最佳答案

为什么会出现这个问题?

Future<List> sportsList() async {
    List sports=[
      await initSharedPreference("test")), 
        ....,
        ....,
        ....
    ];
  }

上面的代码不是一个简单的列表,这里可以直接渲染列表。它正在返回 Future<List>必须作为后台工作获取。 所以使用 FutureBuilder

FutureBuilder 是一次性调用,在其生命周期内只会运行一次。所以您可以信赖它。

FutureBuilder(
            future: sportsList(),
            builder: (context, snapshot) {
              if (!snapshot.hasData) {
                return CircularProgressIndicator();
              } else {
                List<Widget> list = snapshot.data;
                return CarouselSlider(
                     options: CarouselOptions(
                     height: 565,
                     aspectRatio: 16/9,
                     enlargeCenterPage: true,
                     viewportFraction: .8,
                    ),
                      items: list.map(.....).toList(),
                       
                    );
              }
            })

关于Flutter - 遍历异步/ future 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62933016/

相关文章:

c# - 循环中委托(delegate)的异步调用

flutter - flutter 中的信号量

dart - Flutter - 如何让带有 child 的容器占据整个屏幕

flutter - 为什么发送以下请求会出现未捕获的异常?

recursion - 多个可滚动小部件的滚动同步

android - flutter 错误无法确定任务 ':app:compileDebugJavaWithJavac'的依赖关系

Android:BLE如何读取多个特征?

java - 多线程代码和条件变量的使用

android - iOS中Webview Flutter字体太小

flutter - 流未在另一个流监听函数中更新