如何等到列表不为空? - 颤振期货

Posted

技术标签:

【中文标题】如何等到列表不为空? - 颤振期货【英文标题】:How to wait until list is not empty? - Flutter futures 【发布时间】:2021-11-19 22:32:18 【问题描述】:

这是我的主屏幕代码:


class HomeScreen extends StatelessWidget 


  @override
  Widget build(BuildContext context) 

    final enterpriseProvider = Provider.of<EnterpriseProvider>(context);
    final resp = enterpriseProvider.indicator;
    final List<IpcData> data = createIpcList(resp);

    print(data);

    return Scaffold(
      appBar: AppBar(
        title: Text('Hola'),
      ),
      body: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Expanded(
            child: Container(
              child: ResultList( formattedData: data )
            ),
          ),
        ],
      )
    );
  

  createIpcList(List<List<dynamic>> resp) 

    List<IpcData> ipcList = resp.map((e) => IpcData(e[0], e[1])).toList();
    return ipcList;

  


发生的情况是“resp”值来自 http 请求。所以当我第一次调用 createIpcList(resp);它返回一个空列表。这里的问题是我在返回的 Scaffold 中使用的 ResultList 小部件使用该数据来构建图表。当我加载应用程序时,图表是空白的,好像没有传递任何数据。我注意到当我进行热重启时,它会打印一个空列表,但几秒钟后,它会打印数据,就好像我再次调用了打印一样。问题是图表保持空白。我想提出一个条件,所以如果数据=! [] 它返回我的脚手架,如果没有,它返回一个加载屏幕。我知道这可以通过 Futures 实现,但我不知道如何。我想在获得数据后返回 Scaffold,否则我的图表将始终为空。

【问题讨论】:

【参考方案1】:

为此,您必须使用 FutureBuilder 小部件

FutureBuilder(
    future: createIpcList(resp),
    builder: (context, snapshot)
        if (snapshot.hasData)
            return ResultList(formattedData: snapshot.data);
    
);

如果您愿意,您可以在从服务器获取数据时显示加载指示器。

【讨论】:

createIpcList 不返回未来。你不能在 FutureBuilder 中使用它。

以上是关于如何等到列表不为空? - 颤振期货的主要内容,如果未能解决你的问题,请参考以下文章

胡子渲染列表如果不为空[重复]

如何断言 Unittest 上的可迭代对象不为空?

如果使用我的服务使用Java 8 lambda / streams列表不为空,如何从列表中删除每个元素

新创建线程的信号挂起列表不为空?

列表不为空时不调用字段设置器

swiftui列表没有出现但数组不为空