具体原因就是:
在Flutter 的Column或者Rowt内使用ListView.builder()需要对改ListView的大小进行指定.
具体的解决办法就是 在该ListView.builder()外嵌套一个SizeBox或者Container即可…
比如:
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 3,
itemBuilder: (context, index) => showRecommendItem(index));
}
就不行,直接整个页面白屏,然后log提示RenderBox 相关的信息,
但是在外面嵌套一个SizeBox,指定一下高度,就可以了.
@override
Widget build(BuildContext context) {
return SizedBox(
height: ScreenUtil().setHeight(900.0),
child: ListView.builder(
itemCount: 3,
itemBuilder: (context, index) => showRecommendItem(index)),
);
}
2 或者是使用 ExpansionPanelList 外面没嵌套SingleChildScrollView
body: Container( child: SingleChildScrollView( child: ExpansionPanelList( //开关动画时长 animationDuration: Duration(milliseconds: 500), //开关回调 expansionCallback: (panelIndex, isExpanded) { setState(() { setState(() { isSelecet = !isSelecet; }); }); }, children: getListData().map<ExpansionPanel>((value) { return ExpansionPanel( //标题 headerBuilder: (context, isExpanded) { return ListTile( contentPadding: EdgeInsets.all(10.0), title: Text( "一级标题名字", style: TextStyle(color: Theme.of(context).primaryColor), ), //取随机icon leading: Icon(Icons.ac_unit), ); }, //展开内容 body: Container( height: 200, padding: EdgeInsets.symmetric(horizontal: 5.0), child: ListView.builder( itemCount: getListData().length, itemBuilder: (BuildContext context, int position) { return getRow(position, value); }, ), ), //是否展开 isExpanded: isSelecet, ); }).toList(), ))), ); }