首先要获取我想要的内容,我想在ListView中获取两个ListView.builder(具有物理学:NeverScrollableScrollPhysics()),可以滚动,这是我如何获取该代码的
工作代码!!!
CustomScrollView(slivers: <Widget>[
SliverToBoxAdapter(
child: Text("Artist"),
),
SliverList(
delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(top: 10, left: 20),
child: Stack(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: maxHeight * 0.014,
left: maxWidth * 0.159,
),
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
searchResults1[index].name == null
? Container()
: Text(
searchResults1[index].name,
style: TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w600,
),
),
],
),
),
Container(
// tag: 'recently-played1',
child: ClipRRect(
borderRadius: BorderRadius.circular(6.0),
child: searchResults1[index].image == null
? Container()
: Image(
height: maxHeight * 0.0635,
width: maxWidth * 0.1306,
image: NetworkImage(searchResults1[index].image),
fit: BoxFit.cover,
),
),
),
],
),
);
},
childCount: searchResults1.length
),
),
SliverToBoxAdapter(
child: Text("Songs"),
),
SliverList(
key: list2,
delegate: SliverChildBuilderDelegate((BuildContext context, int i) {
return Padding(
padding: const EdgeInsets.only(top: 10, left: 20),
child: Stack(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: maxHeight * 0.014,
left: maxWidth * 0.159,
),
child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
searchResults2[i].title == null
? Container()
: Text(
searchResults2[i].title,
style: TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w600,
),
),
searchResults2[i].author == null
? Container()
: Text(
searchResults2[i].author,
style: TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w600,
color: Colors.grey),
)
],
),
),
Container(
// tag: 'recently-played1',
child: ClipRRect(
borderRadius: BorderRadius.circular(6.0),
child: searchResults2[i].image == null
? Container()
: Image(
height: maxHeight * 0.0635,
width: maxWidth * 0.1306,
image: NetworkImage(searchResults2[i].image),
fit: BoxFit.cover,
),
),
),
],
),
);
},
childCount: searchResults1.length
),
),
]);
但是这里发生的情况是两个列表很长,并且我遇到了性能问题,滚动不流畅,有时甚至冻结。某件事告诉我,这是因为 shrinkWrap:true 也许我错了。我要实现的重要事情是我有Header,然后是一个listview.builder,然后又是Header,最后是listview.builder。 感谢您的帮助。
答案 0 :(得分:1)
嘿,您为此使用了错误的小部件。将CustomScrollView
与SliverList
一起使用。
请勿在非常长且动态的列表中使用shrinkWrap: true
。要使rinkleWrap正常工作,需要确定列表中所有子窗口小部件的高度,这是一项繁重的计算任务。您可以做的一个例子是
CustomScrollView(
slivers: [
SliverToBoxAdapter(child: Text("some")),
SliverList(),
SliverToBoxAdapter(child: Text("some")),
]
)
答案 1 :(得分:0)
问题可能是它是嵌套视图。不要将内部的ListView.builder与NeverScrollableScrollPhysics一起使用,而应尝试使用List.generate来填充列小部件。然后,滚动将由外部ListView处理。您的内部列表:
Column(
children: List.generate(
myList,
(index) => myWidget
更新:
代替加载空白图像
ClipRRect(
borderRadius: BorderRadius.circular(6.0),
child: searchResults1[index].image == null
? Container()
: Image(
height: maxHeight * 0.0635,
width: maxWidth * 0.1306,
image: NetworkImage(searchResults1[index].image),
fit: BoxFit.cover,