如何在 Flutter 的 ListView 中添加列?
How do I add Columns inside of a ListView in Flutter?
我是 Flutter 新手,最近几天一直在练习 UI 构建。
我的假音乐播放器应用程序的主页是由部分(新歌、最新歌曲、热门歌曲等)的 ListView 组成的。每个部分都有一个标题,以及另一个最近音乐的 ListView,如此 link 所示:Using Column
这张照片是使用列而不是列表拍摄的。但是,当我到达屏幕底部时,该列就不再有用了(它本应如此)。所以我需要改用 ListView。但是,一旦我这样做,应用程序的 body 上就没有任何显示。像这样:Using List View 这是代码的这一部分:
class PageBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
alignment: Alignment.center,
padding: const EdgeInsets.fromLTRB(18.0, 0.0, 0.0, 0.0),
child: new ListView( // <-- If it's a column, it 'works'
children: [
new SectionTitle(title: 'Trending now'), // <-- Makes the section title
new Padding(padding: new EdgeInsets.all(4.0)), // <-- Add some space
new Expanded(child: new MusicsListView(musics: _trendingSongsList)), // <-- Makes the music List view
],
)
);
}
}
如果您查看日志,您可能会看到一个错误 Expanded widgets must be placed inside Flex widgets
。
如果您随后删除 Expanded
小部件,则会收到另一个错误 Horizontal viewport was given unbounded height
。这是有道理的。你的嵌套列表是水平的,所以它试图在交叉轴上扩展,但交叉轴是另一个列表,所以它可以无限扩展。
所以你需要限制这个水平列表视图的高度。一种方法是通过 SizedBox
,例如
ListView(
children: [
new SectionTitle(title: 'Trending now'),
new Padding(padding: new EdgeInsets.all(4.0)),
new SizedBox(
height: 300.0 // -> or whatever makes sense for you
child: new MusicsListView(musics: _trendingSongsList)),
],
)
解决这个问题的简单方法是直接使用 SingleChildScrollView
。如果您需要一个可滚动的列,请用它包裹该列。
SingleChildScrollView(
child: Column(
children: <Widget>[
喜欢使用列表视图
Column(
children: <Widget>[
Flexible(
child: ListView(...), // It will provide scroll functionality with your column
)
],
)
我是 Flutter 新手,最近几天一直在练习 UI 构建。 我的假音乐播放器应用程序的主页是由部分(新歌、最新歌曲、热门歌曲等)的 ListView 组成的。每个部分都有一个标题,以及另一个最近音乐的 ListView,如此 link 所示:Using Column
这张照片是使用列而不是列表拍摄的。但是,当我到达屏幕底部时,该列就不再有用了(它本应如此)。所以我需要改用 ListView。但是,一旦我这样做,应用程序的 body 上就没有任何显示。像这样:Using List View 这是代码的这一部分:
class PageBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
alignment: Alignment.center,
padding: const EdgeInsets.fromLTRB(18.0, 0.0, 0.0, 0.0),
child: new ListView( // <-- If it's a column, it 'works'
children: [
new SectionTitle(title: 'Trending now'), // <-- Makes the section title
new Padding(padding: new EdgeInsets.all(4.0)), // <-- Add some space
new Expanded(child: new MusicsListView(musics: _trendingSongsList)), // <-- Makes the music List view
],
)
);
}
}
如果您查看日志,您可能会看到一个错误 Expanded widgets must be placed inside Flex widgets
。
如果您随后删除 Expanded
小部件,则会收到另一个错误 Horizontal viewport was given unbounded height
。这是有道理的。你的嵌套列表是水平的,所以它试图在交叉轴上扩展,但交叉轴是另一个列表,所以它可以无限扩展。
所以你需要限制这个水平列表视图的高度。一种方法是通过 SizedBox
,例如
ListView(
children: [
new SectionTitle(title: 'Trending now'),
new Padding(padding: new EdgeInsets.all(4.0)),
new SizedBox(
height: 300.0 // -> or whatever makes sense for you
child: new MusicsListView(musics: _trendingSongsList)),
],
)
解决这个问题的简单方法是直接使用 SingleChildScrollView
。如果您需要一个可滚动的列,请用它包裹该列。
SingleChildScrollView(
child: Column(
children: <Widget>[
喜欢使用列表视图
Column(
children: <Widget>[
Flexible(
child: ListView(...), // It will provide scroll functionality with your column
)
],
)