假设我有以下自定义小部件:
MyWidget extends StatelessWidget{
Widget child;
......
const MyWidget(
{Key key,
this.child})
: super(key: key);
@override
Widget build(BuildContext context) {
//get child's size and use it in layout
}
}
我怎么能做到这一点?我知道我可以使用全局密钥来做到这一点,但是正如我所见,此解决方案在这里不起作用。
如果我不需要创建单独的StatelessWidget,该怎么办:我将创建GlobalKey并在构造函数中提供它,但是在这里我无法在构造函数中提供它,因为我已经在自定义中创建了子Widget小部件。
答案 0 :(得分:2)
您可以为包裹GlobalKey
小部件的小部件设置child
,例如Container
或IntrinsicHeight
(将其高度设置为其子代的高度),然后使用该键获取此小部件的大小:
class MyWidget extends StatelessWidget {
final Widget child;
MyWidget({Key key, this.child}) : super(key: key);
final GlobalKey key1 = GlobalKey();
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
IntrinsicHeight(child: child, key: key1),
FlatButton(
onPressed: () {
print(key1.currentContext.size);
},
child: Text('get height'),
)
],
);
}
}