Android 在ListView中颤振两个ListView.builder
好的,首先我想得到的是,我想在ListView中得到两个ListView.builder(使用physics:NeverScrollableScrollPhysics()),它们可以滚动,下面是我如何得到它的代码 工作代码Android 在ListView中颤振两个ListView.builder,android,ios,flutter,listview,dart,Android,Ios,Flutter,Listview,Dart,好的,首先我想得到的是,我想在ListView中得到两个ListView.builder(使用physics:NeverScrollableScrollPhysics()),它们可以滚动,下面是我如何得到它的代码 工作代码 CustomScrollView(slivers: <Widget>[ SliverToBoxAdapter( child: Text("Artist"), ), SliverLi
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
),
),
]);
CustomScrollView(片段:[
滑动双轴适配器(
儿童:文本(“艺术家”),
),
银表(
委托:SliverChildBuilderDelegate((BuildContext上下文,int索引){
返回填充(
填充:仅限常量边集(顶部:10,左侧:20),
子:堆栈(
儿童:[
填充物(
填充:仅限边缘设置(
顶部:最大高度*0.014,
左:最大宽度*0.159,
),
子:列(
//mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
searchResults1[索引]。名称==null
?容器()
:文本(
searchResults1[索引]。名称,
样式:TextStyle(
字体大小:12.0,
fontWeight:fontWeight.w600,
),
),
],
),
),
容器(
//标签:“最近播放的1”,
孩子:ClipRRect(
边界半径:边界半径。圆形(6.0),
子项:searchResults1[索引]。图像==null
?容器()
:图像(
高度:最大高度*0.0635,
宽度:最大宽度*0.1306,
image:NetworkImage(searchResults1[index].image),
适合:BoxFit.cover,
),
),
),
],
),
);
},
childCount:searchResults1.length
),
),
滑动双轴适配器(
儿童:文本(“歌曲”),
),
银表(
关键字:列表2,
委托:SliverChildBuilderDelegate((BuildContext上下文,inti){
返回填充(
填充:仅限常量边集(顶部:10,左侧:20),
子:堆栈(
儿童:[
填充物(
填充:仅限边缘设置(
顶部:最大高度*0.014,
左:最大宽度*0.159,
),
子:列(
//mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
searchResults2[i]。标题==null
?容器()
:文本(
searchResults2[i]。标题,
样式:TextStyle(
字体大小:12.0,
fontWeight:fontWeight.w600,
),
),
searchResults2[i]。作者==null
?容器()
:文本(
searchResults2[i].作者:,
样式:TextStyle(
字体大小:12.0,
fontWeight:fontWeight.w600,
颜色:颜色。灰色),
)
],
),
),
容器(
//标签:“最近播放的1”,
孩子:ClipRRect(
边界半径:边界半径。圆形(6.0),
子项:searchResults2[i]。图像==null
?容器()
:图像(
高度:最大高度*0.0635,
宽度:最大宽度*0.1306,
image:NetworkImage(searchResults2[i].image),
适合:BoxFit.cover,
),
),
),
],
),
);
},
childCount:searchResults1.length
),
),
]);
但这里发生的事情是,两个列表很长,我有一个性能问题,滚动不平稳,有时甚至冻结。有东西告诉我这是因为收缩包装:真的,也许我错了。我想实现的重要一点是,我有一个标题,然后是一个listview.builder,然后是一个标题,最后是一个listview.builder。
谢谢大家的帮助。问题可能是它是嵌套视图。尝试使用List.generate填充列小部件,而不是将内部ListView.builder与NeverScrollableScrollPhysics一起使用。然后,滚动将由外部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,
嘿,你为此使用了错误的小部件。将
CustomScrollView
与SliverList
一起使用
不要在非常长的动态列表中使用shrinkWrap:true
。为了使包覆面收缩能够工作,颤振需要确定列表中所有子窗口小部件的高度,这是一项繁重的计算任务。你能做的一个例子是
CustomScrollView(
slivers: [
SliverToBoxAdapter(child: Text("some")),
SliverList(),
SliverToBoxAdapter(child: Text("some")),
]
)
我试着像你们说的那个样,我可以告诉你们滚动更好,但当我滚动到接近第二个标题的某个地方时,整个应用程序在几秒钟内冻结,然后我可以继续滚动。谢谢你的快速回复啊,我会更新问题的。但我认为发生此错误是因为并非所有图像的文件路径中都有“Http”。这可能是个问题,为什么不试试
searchResults1[index]。image==null