您好,我正在制作一个Flutter应用程序,其中在ScrollView中需要放置Expandable列表视图。首先是我的build
方法。
return Scaffold(
appBar: AppBar(
backgroundColor: app_color,
iconTheme: IconThemeData(
color: Colors.white, //change your color here
)),
//debugShowCheckedModeBanner: false,
//key: scaffoldKey,
backgroundColor: app_color,
body: SingleChildScrollView(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children:<Widget>[
Text("Header"),
new ListView.builder(
itemCount: datas.length,
shrinkWrap: true,
itemBuilder: (context, i) {
return new ExpansionTile(
title: new Text(datas[i].title, style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold, fontStyle: FontStyle.italic),),
children: <Widget>[
new Column(
children: _buildExpandableContent(datas[i]),
),
],
);
},
),
Text("Footer"),
],
),
)
)
);
}
现在的问题是,没有SingleScrollChidView
的情况就可以正常工作,但是在使用SingleScrollChidView
之后,它什么也不会显示,并且会出现错误RenderBox was not laid out
。这是怎么回事?如何在Flutter的Singlechildscroll视图内使用可扩展列表视图。
答案 0 :(得分:0)
使用ListView
或类似方法将SizedBox
设置为固定高度
SingleChildScrollView(
child: Column(
children: <Widget>[
Text("Header"),// tested with 20 of these for scrolling
SizedBox(
height: MediaQuery.of(context).size.height / 2,
child: new ListView.builder(
itemCount: 20,
shrinkWrap: true,
itemBuilder: (context, i) {
return new ExpansionTile(/* whatever */ );
},
),
),
Text("Footer"),// tested with 20 of these for scrolling
],
),
)
答案 1 :(得分:0)
修改后的答案
尝试一下,您将获得所需的输出。
您可以找到输出here.
Column(
children: <Widget>[
Text(),
Expanded(
child: ListView.Builder()
),
Text()
]
)
考虑到布局也会发生变化,在函数_buildExpandableContent()
下返回的内容仍然未知。
答案 2 :(得分:0)
使用SizedBox.expand解决此问题,
char **contents = storeContents(...);
答案 3 :(得分:0)
我能够在ScrollView中用以下文字实现Expanded ListView:
-在Wrap
内使用SingleChildScrollView
,前提是您使用ListView
shrinkWrap: true
SingleChildScrollView(
child: Wrap(
direction: Axis.horizontal,
children: <Widget>[
_textBody, // text body, with 1000+ words
Padding(
padding: const EdgeInsets.all(15.0),
child: Column(
children: <Widget>[
ListViewOne(_genericListDataOne()),
],
),
),
Column(
children: <Widget>[
ListViewTwo(_genericListDataTwo())
],
)
],
),
),
ListViewOne
的代码的一部分
ListViewOne(
shrinkWrap: true,
padding: new EdgeInsets.symmetric(vertical: 8.0),
children: // build list here,
);