Renderflex 底部溢出
Renderflex overflowed at bottom
我正在尝试制作动画,每当我滚动列表视图时 HomePageTop 小部件就会缩小,并且
listview 的偏移量大于 > 100。
动画有效,但在动画结束时显示 renderflex 溢出错误。
class HomePageView extends StatefulWidget {
@override
_HomePageViewState createState() => _HomePageViewState();
}
class _HomePageViewState extends State<HomePageView> {
ScrollController scrollController = ScrollController();
bool closeTopContainer = false;
@override
void initState() {
super.initState();
scrollController.addListener(() {
setState(() {
closeTopContainer = scrollController.offset > 100;
});
});
}
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Color.fromRGBO(235, 236, 240, 1),
body: Container(
height: size.height,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AnimatedContainer(
color: Colors.redAccent,
width: size.width,
duration: const Duration(milliseconds: 200),
height: closeTopContainer ? 0 : size.width * .33,
child: HomePageTop(
size: size,
)),
Expanded(
child: ListView(
controller: scrollcontroller),
],
),
),
);
}
}
此处动画容器的大小由列表视图滚动控制器控制。
每当我向下滚动时,都会出现此错误
错误
The following assertion was thrown during layout:
A RenderFlex overflowed by 5.4 pixels on the bottom.
The relevant error-causing widget was:
Column file:///D:/flutter/app/app/lib/views/Widgets/widgets.dart:94:12
The overflowing RenderFlex has an orientation of Axis.vertical.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
RenderFlex to fit within the available space instead of being sized to their natural size.
The specific RenderFlex in question is: RenderFlex#a37e0 OVERFLOWING:
needs compositing
creator: Column ← HomePageTop ← DecoratedBox ← ConstrainedBox ← Container ← AnimatedContainer ← Flex
← ConstrainedBox ← Container ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← ⋯
parentData: <none> (can use size)
constraints: BoxConstraints(w=470.2, h=49.6)
size: Size(470.2, 49.6)
direction: vertical
mainAxisAlignment: start
mainAxisSize: min
crossAxisAlignment: center
verticalDirection: down
我的主页顶部小部件
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(
height: 55,
),
Expanded(
child: Stack(children: [
Positioned(right: 20, child: FittedBox(fit:BoxFit.fill,child: LogoutButton())),
Positioned(
top: 50,
child: Container(
alignment: Alignment.topCenter,
padding: EdgeInsets.all(20),
width: size.width,
child: searchField())),
]),
),
],
);
}
用expanded包裹动画容器可以消除错误,但不会出现尺寸减小的动画。
searchField() 是一个文本 field.Wrapping 它在一个合适的框中也会给出错误。
任何帮助都是appreciated.Thanks提前
这是因为HomePageTop widget里面的SizedBox有一个固定的高度。如果删除它,则不会出现错误,反正您也不需要它。
我正在尝试制作动画,每当我滚动列表视图时 HomePageTop 小部件就会缩小,并且 listview 的偏移量大于 > 100。 动画有效,但在动画结束时显示 renderflex 溢出错误。
class HomePageView extends StatefulWidget {
@override
_HomePageViewState createState() => _HomePageViewState();
}
class _HomePageViewState extends State<HomePageView> {
ScrollController scrollController = ScrollController();
bool closeTopContainer = false;
@override
void initState() {
super.initState();
scrollController.addListener(() {
setState(() {
closeTopContainer = scrollController.offset > 100;
});
});
}
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Color.fromRGBO(235, 236, 240, 1),
body: Container(
height: size.height,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AnimatedContainer(
color: Colors.redAccent,
width: size.width,
duration: const Duration(milliseconds: 200),
height: closeTopContainer ? 0 : size.width * .33,
child: HomePageTop(
size: size,
)),
Expanded(
child: ListView(
controller: scrollcontroller),
],
),
),
);
}
}
此处动画容器的大小由列表视图滚动控制器控制。 每当我向下滚动时,都会出现此错误
错误
The following assertion was thrown during layout:
A RenderFlex overflowed by 5.4 pixels on the bottom.
The relevant error-causing widget was:
Column file:///D:/flutter/app/app/lib/views/Widgets/widgets.dart:94:12
The overflowing RenderFlex has an orientation of Axis.vertical.
The edge of the RenderFlex that is overflowing has been marked in the rendering with a yellow and
black striped pattern. This is usually caused by the contents being too big for the RenderFlex.
Consider applying a flex factor (e.g. using an Expanded widget) to force the children of the
RenderFlex to fit within the available space instead of being sized to their natural size.
The specific RenderFlex in question is: RenderFlex#a37e0 OVERFLOWING:
needs compositing
creator: Column ← HomePageTop ← DecoratedBox ← ConstrainedBox ← Container ← AnimatedContainer ← Flex
← ConstrainedBox ← Container ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← ⋯
parentData: <none> (can use size)
constraints: BoxConstraints(w=470.2, h=49.6)
size: Size(470.2, 49.6)
direction: vertical
mainAxisAlignment: start
mainAxisSize: min
crossAxisAlignment: center
verticalDirection: down
我的主页顶部小部件
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(
height: 55,
),
Expanded(
child: Stack(children: [
Positioned(right: 20, child: FittedBox(fit:BoxFit.fill,child: LogoutButton())),
Positioned(
top: 50,
child: Container(
alignment: Alignment.topCenter,
padding: EdgeInsets.all(20),
width: size.width,
child: searchField())),
]),
),
],
);
}
用expanded包裹动画容器可以消除错误,但不会出现尺寸减小的动画。 searchField() 是一个文本 field.Wrapping 它在一个合适的框中也会给出错误。 任何帮助都是appreciated.Thanks提前
这是因为HomePageTop widget里面的SizedBox有一个固定的高度。如果删除它,则不会出现错误,反正您也不需要它。