当我使用ListView时,ListTile OnTap正常工作。但是,当我使用ListWheelScrollView时,它不起作用。我的意思是它不会被窃听。视图改变。但是我似乎无法点击它。我在很多地方和链接中都找到了解决方案,但仍然找不到解决方案。
这些是我编写的代码。
@override
Widget build(BuildContext context) {
return new ListWheelScrollView(
physics:FixedExtentScrollPhysics(),
children: getPostList(),
itemExtent: 100.0,
);
}
List<PostListItem> getPostList() {
return _postModal
.map((contact) => new PostListItem(contact))
.toList();
}
这是我构建ListTile的地方
@override
Widget build(BuildContext context) {
return new ListTile(
onTap: () {
var route = new MaterialPageRoute(
builder: (BuildContext context) =>
new OnTapPost(value: _postModal.fullName),
);
Navigator.of(context).push(route);
},
leading: new Image.asset('assets/images/logo.png'),
title: new Text(_postModal.fullName),
subtitle: new Text(_postModal.email)
);
}
在上面的代码中,列表项没有被点击。但是,如果我将ListWheelScrollView替换为ListView,如下所示,则可以正常工作。
@override
Widget build(BuildContext context) {
return new ListView(
children: getPostList(),
);
}
List<PostListItem> getPostList() {
return _postModal
.map((contact) => new PostListItem(contact))
.toList();
}
答案 0 :(得分:0)
在互联网上寻找解决方案后,未找到。看来它现在也用谷歌搜索了。
要获得另一种接近效果,请尝试使用CarouselSlider小部件,然后将方向滚动到垂直。随着“ enlargecenterpage为true”。没有接近,但足够好。对于使用某种构建器的商品。
答案 1 :(得分:-1)
我有同样的问题 如果您仍然要使用ListWheelScrollView而不是ListView,
您可以将ListWheelScrollView包裹在GestureDetector中,并制作_postModals的列表。 使用onSelectedItemChanged确定当前选择的列表项索引,然后创建一个全局Index变量。这是我的意思的示例:
import 'package:flutter/material.dart';
class ListScrollWheelExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<PostModal> _postModals = [
//Add your postModals here
];
int Index;
return GestureDetector(
onTap: (){
var route = new MaterialPageRoute(
builder: (BuildContext context) =>
new OnTapPost(value: _postModals[Index].fullName),
);
Navigator.of(context).push(route);
},
child: ListWheelScrollView(
onSelectedItemChanged: (int index){
Index = index;
},
offAxisFraction: -0.85,
diameterRatio: 0.75,
physics: FixedExtentScrollPhysics(),
itemExtent: 100,
children: <Widget>[
getPostList(),
],
),
);
}
}
并在您的ListTile中:
leading: new Image.asset('assets/images/logo.png'),
title: new Text(_postModals[Index].fullName),
subtitle: new Text(_postModals[Index].email)
之所以使用这种方式,是因为我仍然喜欢转轮的外观,并且我不想转换为ListView,但是请尽量不要将ListWheelScrollView的直径设置得太大,以使攻丝功能正常工作。
编辑: 如果要单击多个项目(3个或4个可见项目),则可以将ListWheelScrollView包装在具有3个或4个Gesture检测器的堆栈中。然后使用Index-1和Index + 1,... etc