我使用的是更具体的 ListWheelScrollView
和 clickable
。
(clickable_list_wheel_view)
我试图在我的 button
中添加一个 itemWidget
,但我无法点击它。这是我的list
:
return ClickableListWheelScrollView(
scrollController: _scrollController,
itemHeight: _itemHeight,
itemCount: months.length,
scrollOnTap: true,
onItemTapCallback: (index) {
print(index)
},
child: ListWheelScrollView.useDelegate(
controller: _scrollController,
itemExtent: _itemHeight,
physics: FixedExtentScrollPhysics(),
diameterRatio: 3,
squeeze: 0.95,
onSelectedItemChanged: (index) {
// print(index);
},
childDelegate: ListWheelChildBuilderDelegate(
builder: (context, index) => MonthCardWidget(
month: months[index],
),
childCount: months.length,
),
),
);
在我的 MonthCardWidget
中,我有一个简单的 button
:
Container(
height: 45,
width: 45,
color: Colors.transparent,
child: IconButton(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
onPressed: () {
print('flip');
},
icon: SvgPicture.asset('assets/images/flip.svg',
height: 20, width: 20),
),
),
一切都显示得很好,但从未在我的 onPressed
上调用 button
。我猜 GestureDetector
正在覆盖按钮?有什么解决方法吗?我在这方面找不到任何内容。
GestureDetector
位于 listView
之上:
@override
Widget build(BuildContext context) {
if (_listHeight == .0) {
return MeasureSize(
child: Container(
child: widget.child,
),
onChange: (value) {
setState(() {
_listHeight = value.height;
});
},
);
}
return GestureDetector(
onTap: _onTap,
onTapUp: (tapUpDetails) {
_tapUpDetails = tapUpDetails?.localPosition;
},
child: widget.child,
);
}
答案 0 :(得分:0)
点击永远不会到达您的 GestureDetector,您需要在此处的 ClickableListWheelScrollView 中指定点击:
onItemTapCallback: (index) {
print(index)
},
如果您拥有的打印件无法打印,请与 ClickableListWheelScrollView 插件发布者联系。您将需要逻辑来根据从 ClickableListWheelScrollView 传递的索引号通过按钮实现所需的更改,我认为......所以 setState 函数的映射可能会做到这一点。
把按钮想象成一个视图,你只是根据每个按钮在列表中的位置并行运行函数逻辑。按钮被埋在列表下面,你需要在ListWheel上面一层,也就是Clickable插件,但是很明显它变得和按钮断开了,所以你需要根据index值来创建逻辑来链接它们,也就是位置列表中的对象。
我通常做什么:
onSelectedItemChanged: (index) {
// print(index);
},
这将返回列表中项目的索引位置。使用它来更改变量。
将您的滚动条包裹在 GestureDetector 中。
在手势检测器中,编写或调用一个函数,该函数接受您的索引位置变量并根据您的需要执行您的功能。
如果您需要控制滚动开始在列表中的位置,或者在重建时记住它的位置等,请使用带有 initialItem 的 FixedExtentScrollController。
一切都以这种方式从 onSelectedItemChanged 的索引脱离,并且您使用 FixedExtentScrollController 在构建时设置起始位置。请记住,列表从 0 开始。