如何修复 ListView 生成的错误?
How can I fix the error generated by the ListView?
伙计们,我有一个问题要问你:
我已经建立了一个页面视图。在这个 PageView 中是一个 ListView,在这个 ListView 中是一个小部件列表。
但不幸的是,我的代码由于某种原因不起作用......我不知道为什么。我对 Flutter 还是很陌生。我将衷心感谢您的帮助。
产生错误的代码如下:
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: ListView(
children: createHomePage(
controller: _controller,
content: widget.content,
title: widget.title,
menuButtonAction: widget.menuButton,
showShadow: widget.showShadow,
context: context),
),
);
}
}
如果你能帮助我,我将不胜感激。当我用 Colum 替换 ListView 时代码工作正常,但不幸的是我无法滚动......但它必须是可滚动的!
我不断收到以下错误:
I/flutter ( 4539): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 4539): The following assertion was thrown building NotificationListener<KeepAliveNotification>:
I/flutter ( 4539): Incorrect use of ParentDataWidget.
I/flutter ( 4539): Expanded widgets must be placed inside Flex widgets.
I/flutter ( 4539): Expanded(no depth, flex: 1, dirty) has no Flex ancestor at all.
I/flutter ( 4539): The ownership chain for the parent of the offending Expanded was:
I/flutter ( 4539): RepaintBoundary ← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
I/flutter ( 4539): AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport
I/flutter ( 4539): ← ⋯
I/flutter ( 4539):
I/flutter ( 4539): The relevant error-causing widget was:
I/flutter ( 4539): ListView
我该如何解决这个问题?我已经尝试了很多。例如,我将小部件列表放在一列中并将 ListView 更改为 SingleChildListView,但这也没有帮助。但是,我收到了另一条错误消息。这是:
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 4539): The following assertion was thrown during performLayout():
I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is
I/flutter ( 4539): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
I/flutter ( 4539): flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining
I/flutter ( 4539): space in the vertical direction.
I/flutter ( 4539): These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child
I/flutter ( 4539): cannot simultaneously expand to fit its parent.
I/flutter ( 4539): Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible
I/flutter ( 4539): children (using Flexible rather than Expanded). This will allow the flexible children to size
I/flutter ( 4539): themselves to less than the infinite remaining space they would otherwise be forced to take, and
I/flutter ( 4539): then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum
I/flutter ( 4539): constraints provided by the parent.
I/flutter ( 4539): If this message did not help you determine the problem, consider using debugDumpRenderTree():
I/flutter ( 4539): https://flutter.dev/debugging/#rendering-layer
I/flutter ( 4539): http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html
I/flutter ( 4539): The affected RenderFlex is:
I/flutter ( 4539): RenderFlex#bfee3 relayoutBoundary=up15 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯, parentData: <none> (can use size), constraints: BoxConstraints(w=411.4, 0.0<=h<=Infinity), size: MISSING, direction: vertical, mainAxisAlignment: start, mainAxisSize: max, crossAxisAlignment: center, verticalDirection: down)
I/flutter ( 4539): The creator information is set to:
I/flutter ( 4539): Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ←
I/flutter ( 4539): KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ←
I/flutter ( 4539): ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯
I/flutter ( 4539): See also: https://flutter.dev/layout/
I/flutter ( 4539): If none of the above helps enough to fix this problem, please don't hesitate to file a bug:
I/flutter ( 4539): https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 4539):
I/flutter ( 4539): The relevant error-causing widget was:
I/flutter ( 4539): Column
在第二个例子中,屏幕变白,但没有任何反应,也没有任何反应。出现第一个错误时,屏幕变红,我得到了您在图片中看到的错误!
Red Error on the Screen
I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is
我现在看不到完整的代码,但这对你来说意味着,你的列表视图需要一种高度,例如,如果你将它包装在一个容器中。
您可以做的第二件事是将 shrinkwrap: true
放入列表视图
import 'package:flutter/material.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Center(
child: Container(
margin: EdgeInsets.all(32),
decoration: BoxDecoration(border: Border.all(color: Colors.red)),
child: ListView(
shrinkWrap: true,
children: <Widget>[
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
],
),
),
),
),
);
}
}
您的列表视图然后仅采用列表视图本身内的所有小部件或项目的高度。
希望对您有所帮助。
在列表视图中使用扩展小部件无效,因为扩展小部件无法扩展任何高度,因此删除扩展小部件可以解决您的问题。
伙计们,我有一个问题要问你: 我已经建立了一个页面视图。在这个 PageView 中是一个 ListView,在这个 ListView 中是一个小部件列表。 但不幸的是,我的代码由于某种原因不起作用......我不知道为什么。我对 Flutter 还是很陌生。我将衷心感谢您的帮助。 产生错误的代码如下:
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: ListView(
children: createHomePage(
controller: _controller,
content: widget.content,
title: widget.title,
menuButtonAction: widget.menuButton,
showShadow: widget.showShadow,
context: context),
),
);
}
}
如果你能帮助我,我将不胜感激。当我用 Colum 替换 ListView 时代码工作正常,但不幸的是我无法滚动......但它必须是可滚动的! 我不断收到以下错误:
I/flutter ( 4539): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 4539): The following assertion was thrown building NotificationListener<KeepAliveNotification>:
I/flutter ( 4539): Incorrect use of ParentDataWidget.
I/flutter ( 4539): Expanded widgets must be placed inside Flex widgets.
I/flutter ( 4539): Expanded(no depth, flex: 1, dirty) has no Flex ancestor at all.
I/flutter ( 4539): The ownership chain for the parent of the offending Expanded was:
I/flutter ( 4539): RepaintBoundary ← IndexedSemantics ←
NotificationListener<KeepAliveNotification> ← KeepAlive ←
I/flutter ( 4539): AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport
I/flutter ( 4539): ← ⋯
I/flutter ( 4539):
I/flutter ( 4539): The relevant error-causing widget was:
I/flutter ( 4539): ListView
我该如何解决这个问题?我已经尝试了很多。例如,我将小部件列表放在一列中并将 ListView 更改为 SingleChildListView,但这也没有帮助。但是,我收到了另一条错误消息。这是:
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 4539): The following assertion was thrown during performLayout():
I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is
I/flutter ( 4539): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
I/flutter ( 4539): flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining
I/flutter ( 4539): space in the vertical direction.
I/flutter ( 4539): These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child
I/flutter ( 4539): cannot simultaneously expand to fit its parent.
I/flutter ( 4539): Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible
I/flutter ( 4539): children (using Flexible rather than Expanded). This will allow the flexible children to size
I/flutter ( 4539): themselves to less than the infinite remaining space they would otherwise be forced to take, and
I/flutter ( 4539): then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum
I/flutter ( 4539): constraints provided by the parent.
I/flutter ( 4539): If this message did not help you determine the problem, consider using debugDumpRenderTree():
I/flutter ( 4539): https://flutter.dev/debugging/#rendering-layer
I/flutter ( 4539): http://api.flutter.dev/flutter/rendering/debugDumpRenderTree.html
I/flutter ( 4539): The affected RenderFlex is:
I/flutter ( 4539): RenderFlex#bfee3 relayoutBoundary=up15 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE(creator: Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ← ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯, parentData: <none> (can use size), constraints: BoxConstraints(w=411.4, 0.0<=h<=Infinity), size: MISSING, direction: vertical, mainAxisAlignment: start, mainAxisSize: max, crossAxisAlignment: center, verticalDirection: down)
I/flutter ( 4539): The creator information is set to:
I/flutter ( 4539): Column ← RepaintBoundary ← IndexedSemantics ← NotificationListener<KeepAliveNotification> ←
I/flutter ( 4539): KeepAlive ← AutomaticKeepAlive ← KeyedSubtree ← SliverList ← MediaQuery ← SliverPadding ←
I/flutter ( 4539): ShrinkWrappingViewport ← IgnorePointer-[GlobalKey#665ae] ← ⋯
I/flutter ( 4539): See also: https://flutter.dev/layout/
I/flutter ( 4539): If none of the above helps enough to fix this problem, please don't hesitate to file a bug:
I/flutter ( 4539): https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 4539):
I/flutter ( 4539): The relevant error-causing widget was:
I/flutter ( 4539): Column
在第二个例子中,屏幕变白,但没有任何反应,也没有任何反应。出现第一个错误时,屏幕变红,我得到了您在图片中看到的错误!
Red Error on the Screen
I/flutter ( 4539): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter ( 4539): When a column is in a parent that does not provide a finite height constraint, for example if it is
我现在看不到完整的代码,但这对你来说意味着,你的列表视图需要一种高度,例如,如果你将它包装在一个容器中。
您可以做的第二件事是将 shrinkwrap: true
放入列表视图
import 'package:flutter/material.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Center(
child: Container(
margin: EdgeInsets.all(32),
decoration: BoxDecoration(border: Border.all(color: Colors.red)),
child: ListView(
shrinkWrap: true,
children: <Widget>[
ListTile(title: Text('Item 1')),
ListTile(title: Text('Item 2')),
ListTile(title: Text('Item 3')),
],
),
),
),
),
);
}
}
您的列表视图然后仅采用列表视图本身内的所有小部件或项目的高度。
希望对您有所帮助。
在列表视图中使用扩展小部件无效,因为扩展小部件无法扩展任何高度,因此删除扩展小部件可以解决您的问题。