如何从Flutter中的自定义小部件获取小部件的大小?

时间:2020-08-10 09:23:00

标签: flutter

假设我有以下自定义小部件:

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小部件。

1 个答案:

答案 0 :(得分:2)

您可以为包裹GlobalKey小部件的小部件设置child,例如ContainerIntrinsicHeight(将其高度设置为其子代的高度),然后使用该键获取此小部件的大小:

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'),
        )
      ],
    );
  }
}