button - Flutter:如何更改 SingleChildScrollView 中按钮的位置?
问题描述
我想要一个带有可变数量按钮的屏幕。这是通过 MaterialButtons 列表实现的。因为我不知道按钮的数量(可能太大而无法在屏幕上显示所有按钮),所以我使用 SingleChildScrollView 使按钮列表可滚动。如果按钮较少,导致屏幕没有完全填满,则按钮应始终显示在屏幕中间。目前,按钮列表总是从我的屏幕顶部开始。
有人知道如何实现这种自动位置调整吗?是否可以更改按钮之间的空间?
这是我的代码(目前有 3 个按钮的固定数量,但很快就会改变):
class PlanState extends State<PlanForm> {
var namesList = new List<String>();
List<MaterialButton> buttonsList = new List<MaterialButton>();
@override
void initState() {
super.initState();
namesList.add("Button1");
namesList.add("Button2");
namesList.add("Button3");
List<Widget> _buildButtonsWithNames() {
int length = namesList.length;
for (int i = 0; i < length; i++) {
buttonsList
.add(new MaterialButton(
height: 40.0,
minWidth: 300.0,
color: Colors.blue,
textColor: Colors.white,
child: new Text(namesList[0], textScaleFactor: 2.0,),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(builder: (context) => new viewPlanScreen()),);
}
));
namesList.removeAt(0);
}
return buttonsList;
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child:Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: _buildButtonsWithNames()
)
)
);
}
}
解决方案
因为 SilgheChildScrollView 在主轴方向上具有“无限”大小,所以您不能像在其他情况下那样居中。如果您查看文档 [1],则有一些示例说明如何在有足够空间的情况下实现此目的,例如居中。我没有尝试过,但应该是这样的:
LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: viewportConstraints.maxHeight,
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: _buildButtonsWithNames(),
)
)
)
}
)
[1] https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html
推荐阅读
- c++ - 不能将结构传递给另一个文件中声明的函数?
- mongodb - 连接多个集合、组、排序推送数组并重组结果的 MongoDB 查询
- python - 从 python 程序导出数据我做错了什么?
- php - AMPHP 抛出无法捕获的 MultiReasonException - 这是一个错误吗?
- java - Connect 4 check win方法抛出索引越界错误
- python - 在 Python 中使用堆的前 K 个常用词
- twilio - 收集后针对多个 Twilio 类型和自定义字段类型检查 Twilio 自动驾驶仪用户输入
- react-native - 如果项目位于 React Native 的状态数组中,那么在复选框中显示检查的正确方法是什么?
- azure - Airflow 无法从 Azure 存储中获取日志
- python - Python 中的新列