根据孩子的大小调整的小部件?

问题描述 投票:0回答:1

在Flutter中有没有一个小部件可以根据它的子代的内容进行自我调整,而子代的内容是在Rows和Columns中的?

我似乎找不到相关的东西,而且我经常遇到无限溢出的错误......。

举个例子,假设我在一个行里有3个Widget,其中1个是文本,我无法猜测它有多长,但我需要根据Widget的需要扩展父节点,同时包裹文本。

我会有这样的东西。

Row(
children: [
Expanded(child: Widget1(....)),
Expended(child: Text(.....)),
Expanded(child: Widget2(....))
]
)

对吗?

我想让行的父行扩大到需要显示的子行的大小,我想用不同的方式对齐Widget1和Widget2(1-center, 2-bottom).如果我把它们放在Column中,我可以把Widget1放在中心,但我不能把Widget2放在底部,因为如果我把Column放到最大,它就会溢出,如果我不把它放到最大,它就不会对齐。

你会怎么做呢?

我真的不明白inifnite布局背后的逻辑...。

举个例子,这是我目前被卡住的地方。

return Column(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(
                    color: Global.findCategory(event.categId).color.withAlpha(150),
                    blurRadius: 20,
                    spreadRadius: -20,
                    offset: Offset(0, 5)
                )
              ],
              color: Colors.white,
              borderRadius: BorderRadius.circular(30)
          ),
          child: Row(
            children: <Widget>[
              Align(
                alignment: Alignment.center,
                child: Padding(
                  padding: const EdgeInsets.all(5.0),
                  child: Container(
                      width: Global.scaleSmallDevice(context) * 64,
                      height: Global.scaleSmallDevice(context) * 64,
                      decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          borderRadius: BorderRadius.circular(10),
                          image: DecorationImage(
                              fit: BoxFit.cover,
                              image: event.image
                          )
                      )
                  ),
                )
                ,
              ),
              Flexible(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    CustomText(
                      text: title,
                      color: Global.findCategory(event.categId).color,
                      fontSize: 16,
                    ),
                    Flexible(
                      child: CustomText(
                        text: shortInfo,
                        color: Global.findCategory(event.categId).color,
                        fontSize: 12,
                      ),
                    )
                  ],
                ),
              ),
              Stack(
                alignment: Alignment.bottomCenter,
                children: <Widget>[
                  Align(
                    alignment: Alignment.bottomCenter,
                    child: StatefulBuilder(
                      builder: (context, setState) {
                        IconData buttonIcon = (event.favorite) ? Icons.favorite : Icons.favorite_border;
                        return SplashButton(
                            splashColor: Global.findCategory(event.categId).color,
                            child: Icon(buttonIcon, color: Global.findCategory(event.categId).color, size: 30),
                            onTap: () async {
                              await event.setFavorite(context);
                              setState(() {
                                buttonIcon = (event.favorite) ? Icons.favorite : Icons.favorite_border;
                              });
                            }
                        );
                      },
                    ),
                  ),
                ],
              ),
        ),
      ],
    );
  }

在这种情况下,我希望StatefulBuilder小部件在底部,整个容器和CustomText小部件的列一样小。

里面有图像的widget我希望它是居中的,而文本是完全可以给用户使用的。

如果我不添加一个Column作为Container,它就会在高度允许的情况下,StatefulBuilder部件在底部居中,而在目前的代码中,它在中心......。

对不起,如果我说的不连贯,时间有点晚了,我编了一天的代码,累了,对着这个widget卡了几个小时。

flutter overflow flutter-layout
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.