결론은 아래 코드 느낌으로 SingleChildScrollView 를 사용하면 된다. 내부의 Listview 에 shrinkWrap: true (리스트뷰 크기 고정), primary: false (리스트뷰 내부는 스크롤 없음) 를 지정하는 것이 포인트!!
import'package:flutter/material.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(home:Scaffold(appBar:AppBar(title:constText('ListView inside SingleChildScrollView'),),body:SingleChildScrollView(// <==== 주인공. Column 하나를 child로 가짐
child:Column(// 물론 Row도 가능
children:[Container(height:150,color:Colors.red,child:constCenter(child:Text("Some Widgets"),),),ListView.builder(// <=== 성능을 생각한다면 ListView.builder 로 사용
shrinkWrap:true,// <==== limit height. 리스트뷰 크기 고정
primary:false,// <==== disable scrolling. 리스트뷰 내부는 스크롤 안할거임
itemCount:10,itemBuilder:(context,index)=>ListTile(title:Text("Item ${index+1}"),),),Container(height:150,color:Colors.green,child:constCenter(child:Text("Some Widgets"),),),Container(height:150,color:Colors.blue,child:constCenter(child:Text("Some Widgets"),),),],),),),);}}
이렇게 하면 ListView 도 크기가 정해진 하나의 위젯으로 보고 Column 안에 적절히 배치할 수 있다. (물론, Column 대신에 Row도 가능하다.) 전체 스크롤은 SingleChildScrollView 책임지고 있다.