flutter - 根据 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
解决方案
API 调用应该在 initState 函数中进行,这样您就不会在每次重建时都到达端点。(可能发生很多次)您可以在有状态的小部件中创建一个空的未来对象,并在 initState 函数中将您的 api 调用分配给未来对象。在 build 方法中添加一个 FutureBuilder 小部件来控制 api 调用的状态。(加载,错误?等)一旦你得到数据,只需检查列表的长度,根据它你可以决定做什么:
data.length < 20 ? MyListView() : Expanded (child: MyListView())
推荐阅读
- group-by - 如何按边属性分组并在结果中获取顶点+边属性?
- react-router - 在 React Router 中添加路由
- javascript - 这种动态合并两个对象的解决方案可以更简单吗?
- r - 如何在不增加旋转 (90°) 列名的表的列宽的情况下冻结 DT 中的第一列?
- element - Element组件中的SELECT选择器级别太高
- sympy - 在 sympy 中,如何组成微分算子并调用乘积规则?
- node.js - 简化不同的查询响应
- c# - ASP.NET Core MongoDB - 将位图列表存储在集合中
- windows - 这个 X.509 证书安装脚本有什么问题(私钥被删除)
- python - 在生成器层 Pytorch 中将 Conv2Dtranspose 转换为 Upsample 和 conv