12.索引条:手势及clamp函数
前言
一、 一个索引条包含什么?
二、 开始布局
import 'package:flutter/material.dart';
class IndexBar extends StatefulWidget {
IndexBar({
required this.dataSource,
});
final List<String> dataSource;
final double _indexItemHeight = 22;
@override
_IndexBarState createState() => _IndexBarState();
}
class _IndexBarState extends State<IndexBar> {
List<Widget> _indexsWidgets = [];
@override
void initState() {
super.initState();
for (int i = 0; i < widget.dataSource.length; i++) {
_indexsWidgets.add(Container(
height: widget._indexItemHeight,
child: Text(
widget.dataSource[i],
style: const TextStyle(color: Colors.grey),
),
));
}
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapUp: (details) {
RenderBox box = context.findRenderObject() as RenderBox;
Offset point = box.globalToLocal(details.globalPosition);
double y = point.dy;
// 在当前 Widget 内的 Offset
print(y);
},
child: Container(
width: 22,
color: const Color.fromRGBO(1, 1, 1, 0.2),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: _indexsWidgets,
),
),
);
}
}
三、 点击事件



四、 滑动事件
五、 事件回调
定义回调类型
调整事件处理及回调
外部传入回调

六、 Clamp 函数
七、 最终代码
Last updated