繁体   English   中英

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

[英]Expanded widget throws "RenderBox was not laid out" exception

嗨,我是 Flutter 的新手,我遇到了异常“RenderBox 未布局”的麻烦。 我正在尝试创建MyDialog ,它是内置对话框的扩展。 它可以从其他小部件中注入内容。 我想将Expanded widget wrapping Text widget 作为内容放置,以便可以看到所有带有换行符的文本。

我打算这样显示内容: 在此处输入图像描述

这是我的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来瞄准不同的东西,所以请不要关心它。)

我想知道正确的解决方案,因为我之前多次遇到此异常,并且每次都以某种方式解决了。 请详细告诉我。

谢谢,

附言。 安慰: 在此处输入图像描述

我认为您将小部件放错了,请尝试使用以下代码:

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM