flutter 展开的小部件抛出“未布局RenderBox”异常

sdnqo3pr  于 2023-01-27  发布在  Flutter
关注(0)|答案(1)|浏览(154)

嗨,我是Flutter的新手,遇到了"渲染框没有布局"的异常。我正在尝试创建MyDialog,它是内置对话框的扩展。它可以从其他小部件注入内容。我想放置Expanded小部件 Package Text小部件作为内容,以便所有文本都可以看到换行符。
我打算内容如下所示:

这是我的MyDialog小部件。

class MyDialog extends StatelessWidget {
  String label;
  Widget contents;
  const MyDialog({required this.label, required this.contents, Key? key}) : super(key : key)

  @override
  Widget build(BuildContext context) {
    return MyButtonTip(    // This is an extension of outlined button.
      label     : label,
      onPressed : () {
        showDialog(
          context : context,
          builder : (BuildContext context) => AlertDialog(
            insetPadding    : const EdgeInsets.all(15),
            content         : SizedBox(
              width : MediaQuery.of(context).size.width,
              child : contents
            )
          )
        );
      }
    );
  }
}

这是使用MyDialog的小部件。

...
MyDialog(
  label : 'Profile',
  contents : SizedBox(
    child : Stack(
      children : [
        Column(
          children : [
            Row(
              children : [
                Column(
                  crossAxisAlignment : CrossAxisAlignment.end,
                  children           : const [
                    Text('name'),
                    Text('nickname')
                  ]
                ),
                const SizedBox(width : 10),
                Column(
                  crossAxisAlignment : CrossAxisAlignment.start,
                  children           : [
                    Text(name),
                    Expanded(
                      child : Text(nickname)
                    )
                  ]
                )
              ]
            )
          ]
        )
      ]
    ))
  )
);
...

(我使用Stack是为了瞄准不同的东西,所以请不要在意它。)
我想知道正确的解决方案,因为我以前遇到过很多次这种异常,每次都以某种方式解决了。请让我知道详细情况。
谢谢你,
PS控制台:

3wabscal

3wabscal1#

作为我的意见,你把小部件错误,请尝试下面的代码:

MyDialog(
  label : 'Profile',
  contents : Column(children: [
          Row(children: const [
            Text('name : '),
            Text("hello"),
          ]),
          const SizedBox(width: 10),
          Row(crossAxisAlignment: CrossAxisAlignment.start, children: const [
            Text('taro yamuda : '),
            Expanded(
              child: Text(
                "someting sometingsometingsometingsometingsometingsometingsometingsometingsometingsometingsometingsometing",
                style: TextStyle(),
              ),
            )
          ])
        ]);
      
      
      }

相关问题