首页 > 解决方案 > 根据 ListView 的大小将 ListView 放入/取出 Expanded

问题描述

我有一个可能很大/很小的 ListView,取决于 API 调用的结果。我想要做的是,如果结果太大,把这个 ListView 放在 Expanded 里面。

客户端可以是任何东西,电话或标签,都具有不同的大小,支持水平和垂直方向。

如何在构建 ListView 之前检测它的大小?

if (MyListView.height > this.container.height) {  // ListView isn't built yet, so how can I know the size?
  return Expanded(child: MyListView);
}
return MyListView();

// MyListView is just a ListView inside a Container

标签: flutter

解决方案


API 调用应该在 initState 函数中进行,这样您就不会在每次重建时都到达端点。(可能发生很多次)您可以在有状态的小部件中创建一个空的未来对象,并在 initState 函数中将您的 api 调用分配给未来对象。在 build 方法中添加一个 FutureBuilder 小部件来控制 api 调用的状态。(加载,错误?等)一旦你得到数据,只需检查列表的长度,根据它你可以决定做什么:

data.length < 20 ? MyListView() : Expanded (child: MyListView())

推荐阅读