AnimatedContainer中的溢出警告调整高度

使用CupertinoPicker,我希望它使用AnimatedContainer在文本输入下方进行动画显示,但是当它可见时,我会收到溢出警告。从我所看到的,您不能调整CupertinoPicker的大小,只能调整它的父项。

有更好的解决方案吗?

Column(

children: <Widget>[

buildTextField(

field: 'limit',

label: 'How Many Guests?',

controller: TextEditingController(

text: eventModel.event['limit']),

onTap: () {

showPicker.value = !showPicker.value;

},

),

AnimatedContainer(

height: showPicker.value ? 150 : 0,

duration: Duration(milliseconds: 150),

child: showPicker.value

? CupertinoPicker(

backgroundColor: Colors.transparent,

itemExtent: 40,

children: List<Widget>.generate(

98,

(index) => Center(

child: Text(

'${index + 2}',

style: TextStyle(

color: Colors.black,

fontSize: 16),

),

),

),

onSelectedItemChanged: (item) {

print((item + 2).toString());

},

)

: null,

),

]

)

例外:

flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════

flutter: The following message was thrown during layout:

flutter: A RenderFlex overflowed by 22 pixels on the bottom.

flutter:

flutter: The overflowing RenderFlex has an orientation of Axis.vertical.

flutter: The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and

flutter: black striped pattern. This is usually caused by the contents being too big for the RenderFlex.

flutter: Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the

flutter: RenderFlex to fit within the available space instead of being sized to their natural size.

flutter: This is considered an error condition because it indicates that there is content that cannot be

flutter: seen. If the content is legitimately bigger than the available space, consider clipping it with a

flutter: ClipRect widget before putting it in the flex, or using a scrollable container rather than a Flex,

flutter: like a ListView.

flutter: The specific RenderFlex in question is:

flutter: RenderFlex#73b9d relayoutBoundary=up16 OVERFLOWING

flutter: creator: Column ← Stack ← CupertinoPicker ← ConstrainedBox ← Container ← AnimatedContainer ←

flutter: Column ← Observer ← _FormScope ← WillPopScope ← Form ← Padding ← ⋯

flutter: parentData: not positioned; offset=Offset(0.0, 0.0) (can use size)

flutter: constraints: BoxConstraints(0.0<=w<=346.9, 0.0<=h<=18.2)

flutter: size: Size(346.9, 18.2)

flutter: direction: vertical

flutter: mainAxisAlignment: start

flutter: mainAxisSize: max

flutter: crossAxisAlignment: center

flutter: verticalDirection: down

flutter: ◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤

flutter: Another exception was thrown: A RenderFlex overflowed by 22 pixels on the bottom.

回答:

有有一个问题AnimatedContainerCupertinoPicker,因为它使用了孩子一个固定的高度itemExtent: 40

尝试使用SizeTransition以达到相同的效果。这是一个示例:

    class _MySampleWidgetState extends State<MySampleWidget>

with SingleTickerProviderStateMixin {

bool showPicker = false;

AnimationController _controller;

@override

void initState() {

_controller = AnimationController(

vsync: this,

duration: Duration(milliseconds: 200),

);

super.initState();

}

@override

void dispose() {

_controller.dispose();

super.dispose();

}

@override

Widget build(BuildContext context) {

return Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: <Widget>[

RaisedButton(

child: Text("text"),

onPressed: () {

showPicker = !showPicker;

if (showPicker) {

_controller.forward();

} else {

_controller.reverse();

}

},

),

SizeTransition(

sizeFactor: _controller,

child: Container(

height: 150,

child: CupertinoPicker(

backgroundColor: Colors.transparent,

itemExtent: 40,

children: List<Widget>.generate(

98,

(index) => Center(

child: Text(

'${index + 2}',

style: TextStyle(color: Colors.black, fontSize: 16),

),

)),

onSelectedItemChanged: (item) {

print((item + 2).toString());

},

),

),

),

],

),

);

}

}

以上是 AnimatedContainer中的溢出警告调整高度 的全部内容, 来源链接: utcz.com/qa/416035.html

回到顶部