flutter 当孩子变小或变大时,父控件如何知道它应该移动查尔兹?

uidvcgyl  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(117)
class ColorStatefulBox extends StatefulWidget {
  const ColorStatefulBox({Key? key, required this.color}) : super(key: key);
  final Color color;

  @override
  State<ColorStatefulBox> createState() => _ColorBoxState();
}

class _ColorBoxState extends State<ColorStatefulBox> {
  int count = 0;
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        count++;
        setState(() {});
      },
      child: Container(
        color: widget.color,
        width: 100+count.toDouble(),
        height: 100+count.toDouble(),
        child: Center(
          child: Text(
            count.toString(),
            style: TextStyle(fontSize: 30),
          ),
        ),
      ),
    );
  }
}
class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  List<Widget> widgetList = [
    ColorStatefulBox(
      color: Colors.yellow,
      key: GlobalKey(),
    ),
    ColorStatefulBox(
      color: Colors.blue,
      key: GlobalKey(),
    )
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("key test"),
        ),
        body: Container(
          padding: EdgeInsets.all(20),
          child: Column(
              children: [...widgetList],),
        ),);
  }
}

当点击ColorStatefulBox时,它会变大。另外一个ColorStatefulBox会按列移动。关键是:列如何知道它的子级更改大小并需要移动其他子级?
我在Column的重新构建中创建了一个断点,但是当单击ColorStatefulBox时它不会调用

h6my8fg2

h6my8fg21#

如果您有复杂的布局决策,不完全适合标准工作流程,请查看Boxy。它将布局从“自动驾驶仪”中移除,并为您提供完全的手动控制,解决了布局和兄弟大小调整的许多问题。甚至有一些方便的小部件来解决许多常见的布局问题,但在任何时候,你都可以拦截“这里有一个孩子的列表,让我得到他们的大小,我会为你布局”。

相关问题