首页 文章

列内的ListView导致'Vertical viewport was given unbounded height'

提问于
浏览
1

我是新手,因为布局有问题 .

我想要这样的东西:
a sticky header and a scroll view below

一个粘性 Headers 和它下面的滚动视图 . 我想过使用带有两个子节点的Column小部件 - 首先是 Headers ,第二个是ListView .

这是我的代码

Widget build(BuildContext context) {
 return Material(
   elevation: 8.0,
   child: Column(
     crossAxisAlignment: CrossAxisAlignment.start,
     children: <Widget>[
       Padding(
         padding: const EdgeInsets.all(16.0),
         child: Text(
           title,
           style:
               Theme.of(context).textTheme.subhead.copyWith(fontSize: 18.0),
           textAlign: TextAlign.left,
         ),
       ),
       Divider(height: 4.0),
       ListView.builder(itemBuilder: (context, i) {
         return ListTile(
           title: Text("Title $i"),
           subtitle: Text("Subtitle $i"),
         );
       }),
     ],
   ),
 );
}

我收到以下错误 .

I/flutter ( 5725): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 5725): The following assertion was thrown during performResize():
I/flutter ( 5725): Vertical viewport was given unbounded height.
I/flutter ( 5725): Viewports expand in the scrolling direction to fill their container.In this case, a vertical
I/flutter ( 5725): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 5725): typically happens when a scrollable widget is nested inside another scrollable widget.
I/flutter ( 5725): If this widget is always nested in a scrollable widget there is no need to use a viewport because
I/flutter ( 5725): there will always be enough vertical space for the children. In this case, consider using a Column
I/flutter ( 5725): instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
I/flutter ( 5725): the height of the viewport to the sum of the heights of its children.

我添加了ListView的shrinkWrap,如消息中所述,但是这也没有用 .

此布局的父级是一个包含各种此类布局页面的堆栈,所有这些布局页面都在前台,期望一个用户选择 .

我究竟做错了什么?

1 回答

  • 2

    尝试使用 FlexibleExpanded 小部件包装 ListView.builder

    Flexible(
                child: ListView.builder(
                  itemBuilder: (context, i) {
                    return ListTile(
                      title: Text("Title $i"),
                      subtitle: Text("Subtitle $i"),
                    );
                  },
                ),
              ),
    

相关问题