[英]Flutter - How to get width of a FlatButton in a horizontal ListView
我想在水平 ListView 中获得 FlatButton 的宽度,但我只能获得Width: Infinity
。
我可以成功地在隔离的 FlatButton 中获得宽度,但是当 FlatButton 在 ListView 内部时,我不能,但我不知道为什么。 当 FlatButton 在 ListView 中时,你能帮我获取它的宽度吗?
谢谢。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter App'),
),
body: Container(
height: 70.0,
child: ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
_flatButtonStoreWidth(),
_flatButtonStoreWidth(),
_flatButtonStoreWidth(),
_flatButtonStoreWidth(),
_flatButtonStoreWidth(),
],
),
),
);
}
Widget _flatButtonStoreWidth (){
return FlatButton (
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
double _width = constraints.maxWidth;
print('Width: $_width');
return Text('This is a FlatButton');
},
),
onPressed: (){},
);
}
那是因为具有水平轴的 ListView 具有无限宽度。 您必须为每个 FlatButton 提供宽度。
FlatButton 从父级获取其大小。 在这种情况下,父级提供无限宽度。 因此你应该自己调整按钮的大小
要在 ListView 中获取对象的宽度,您应该:
GlobalKey
。GlobalKey
访问上下文。context
您可以通过context.size
获取大小。Size
对象获取宽度。以下是供您参考的工作代码:
Widget _flatButtonStoreWidth() {
GlobalKey globalKey = GlobalKey();
WidgetsBinding.instance.addPostFrameCallback((_) {
double _width = globalKey.currentContext.size.width;
print('Width: $_width');
});
return FlatButton(
key: globalKey,
child: Text('This is a FlatButton'),
onPressed: () {},
);
}
我希望这会有所帮助,如有任何疑问,请发表评论。 如果此答案对您有帮助,请接受并投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.