在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卡了几个小时。