可以使用 GlobalKey 来获取子级 widget 的宽度。

  1. 在父级 widget 中创建一个 GlobalKey。

  2. 在子级 widget 中使用 LayoutBuilder 获取子级 widget 的宽度。

  3. 将子级 widget 的宽度保存到父级 widget 的 GlobalKey 中。

下面是一个简单的示例代码:

class ParentWidget extends StatefulWidget {
  @override
  _ParentWidgetState createState() => _ParentWidgetState();
}

class _ParentWidgetState extends State<ParentWidget> {
  final GlobalKey _childKey = GlobalKey();

  double _childWidth = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ChildWidget(
          key: _childKey,
        ),
        Text('Child width: $_childWidth'),
      ],
    );
  }

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback(_afterLayout);
  }

  void _afterLayout(_) {
    RenderBox renderBox =
        _childKey.currentContext.findRenderObject() as RenderBox;
    setState(() {
      _childWidth = renderBox.size.width;
    });
  }
}

class ChildWidget extends StatelessWidget {
  const ChildWidget({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints constraints) {
        return Container(
          width: constraints.maxWidth / 2,
          height: 100,
          color: Colors.blue,
        );
      },
    );
  }
}

在这个示例中,ParentWidget 包含一个 ChildWidget,并且使用 GlobalKey 来获取 ChildWidget 的宽度。在 ChildWidget 中,使用 LayoutBuilder 获取 ChildWidget 的宽度,并将宽度保存到 ParentWidget 的 GlobalKey 中。在 ParentWidget 的 initState 方法中,使用 WidgetsBinding.instance.addPostFrameCallback 方法来等待 ChildWidget 布局完成后再获取宽度,最后将宽度保存到 _parentWidth 变量中。在 ParentWidget 的 build 方法中,显示 _childWidth 变量的值。

Flutter 获取子级 Widget 宽度:使用 GlobalKey 和 LayoutBuilder

原文地址: https://www.cveoy.top/t/topic/na7y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录