flutter - Flutter - 自动调整大小的 AlertDialog 以适应列表内容
问题描述
我需要从 REST Web 服务动态加载列表城市,并让用户从警报对话框中选择一个城市。我的代码:
createDialog() {
fetchCities().then((response) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Wybierz miasto'),
content: Container(
height: 200.0,
width: 400.0,
child: ListView.builder(
shrinkWrap: true,
itemCount: response.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(response[index].name),
onTap: () => citySelected(response[index].id),
);
},
),
),
);
}
);
});
}
结果 - 对话框始终为 200x400,即使只有 2 个城市可用,底部仍有不必要的空间:
如何使对话框宽度/高度适合实际项目大小?如果我省略height
和width
参数,我会得到异常并且没有显示对话框。在原生 Android Java 中,我从不需要指定任何尺寸,因为对话框会自动调整大小以适应。
如何修复我的代码以正确调整对话框大小?请注意,我不知道项目数,它是动态的。
[编辑]
按照建议,我用列包装了内容:
createDialog() {
fetchCities().then((response) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Wybierz miasto'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: response.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(response[index].name),
onTap: () => citySelected(response[index].id),
);
},
),
)
]
),
);
}
);
});
}
结果 - 例外:
我/颤振(5917):══╡渲染库╞═════════════════════════════════════════════════ ═══════════════════════ I/flutter(5917):在performLayout()期间抛出了以下断言:I/flutter(5917):RenderViewport没有支持返回内在维度。I/flutter (5917):计算内在尺寸需要实例化视口的每个子项,I/flutter (5917):消除视口懒惰的观点。
更通用的代码来测试:
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Select city'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(
child: ListView.builder(
shrinkWrap: true,
itemCount: 2,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text("City"),
onTap: () => {},
);
},
),
)
]
),
);
}
);
解决方案
Container
将您的内部包装Column
在内容参数中,在其中设置mainAxisSize.min
, in Column 属性
推荐阅读
- visual-studio-code - “ANY_NODE_APP”在 Windows 10 上不是内部或外部命令、可运行程序或批处理文件
- sql - 有没有办法使用 SQL 将字符串转换为列名?
- python - 进度条 - 类型错误:“模块”对象不可调用
- python - KeyError: 'mae' 绘制 Keras 模型训练进度时
- tensorflow - Tensorflow - 使用 GPU 时 CPU 使用率高
- geoserver - Geoserver 启动时间长
- c# - 运行代理场景时,“期望用双引号括起来的属性名称”
- r - 如何多次进行简单回归?
- tensorflow - 为什么一个简单的操作会在 TensorFlow 上占用这么多内存?
- bash - 在 bash 脚本的变量中获取 kubectl 命令错误消息