【flutter 초보자】ListView나 GridView를 중첩하려면(Vertical viewport was given unbounded height 에러)

ListView in ListView

flutter의 리스트 뷰, 그리드 뷰를 사용해 레이아웃을 짜는 경우, 이것들을 중첩(중첩)하고 싶은 장면이 있습니다만, 간단하게 하면 아래와 같은 에러가 나옵니다.

The following assertion was thrown during performResize():
Vertical viewport was given unbounded height.

Viewports expand in the scrolling direction to fill their container. In this case, a vertical viewport was given an unlimited amount of vertical space in which to expand. This situation typically happens when a scrollable widget is nested inside another scroll.

If this widget is always nested in a scrollable widget there is no need to use a viewport because there will always be enough vertical space for the children. In this case, consider using a Column instead. Otherwise, consider using the "shrinkWrap"or a ShrinkWrappingViewport) to size the height of the viewport to the sum of the heights of its children.

요컨대 「높이가 무제한이 된다고」라고 분노됩니다. 이것에 대한 해결책.

해결 방법



아이의 ListView 위젯에, 이하를 설정한다.
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),

「shrinkWrap: true 」만으로도 에러는 해소합니다만, 이것만으로는 아이의 리스트 뷰 영역에서 화면 전체의 스크롤이 효과가 없게 됩니다. 이것을 해소하려면 「physics: NeverScrollableScrollPhysics()」도 세트로 지정하는 것.

샘플 코드


class ListInList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    List<Widget> _listChild = new List();
    for(int i=0; i<20; i++){
      _listChild.add(Text('子${i}'));
    }

    return Scaffold(
      appBar: AppBar(
        title: Text('List in List'),
      ),
      body: ListView(
        children: <Widget>[
          //親1
          Column(
            children: <Widget>[
              ListTile(subtitle: Text('親1'),),
              ListView(
                shrinkWrap: true,
                physics: NeverScrollableScrollPhysics(),
                children: _listChild,
              ),
            ],
          ),

          //親2
          Column(
            children: <Widget>[
              ListTile(subtitle: Text('親2'),),
              ListView(
                shrinkWrap: true,
                physics: NeverScrollableScrollPhysics(),
                children: _listChild,
              ),
            ],
          ),

        ],
      )
    );
  }
}


스크린샷





이상이 됩니다.

좋은 웹페이지 즐겨찾기