How to get the finger movement event in flutter like 'recyclerview alphabet index in android' check the sample image.
I have created a Positioned alphabet index listview but I can't find the current index in DragUpdate.
var alphabet = ["#","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
new Positioned(
top: .0,
left: 1,
bottom: 10,
width: 55,
child: Material(
borderRadius: BorderRadius.circular(15.0),
elevation: 10.0,
child: ListView.builder(
itemCount: alphabet.length,
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
onVerticalDragUpdate:
(DragUpdateDetails detail) {
setState(() {
_barOffset += detail.delta.dy;
});
print("$detail");
print("Update ${alphabet[index]}");
},
onVerticalDragStart: (DragStartDetails detail) {
print("onVerticalDragStart");
print("Start ${alphabet[index]}");
},
onVerticalDragEnd: (DragEndDetails detail) {
print("onVerticalDragEnd");
print("End ${alphabet[index]}");
},
onTap: () => print(alphabet[index]),
child: new Container(
margin: EdgeInsets.only(
left: 20.0, right: 10.0, top: 6.5),
height: 15.0,
child: new Text('${alphabet[index]}'),
));
}),
),
Do the following steps to achieve this.
Step1: Gesture detector for A to Z slider
onVerticalDragUpdate: _onVerticalDragUpdate
onVerticalDragStart: _onVerticalDragStart
Step 2: Add the speech bubble for scrolled alphabet.
Step 3: calculate the index with vertically scrolled position
if ((_offsetContainer + details.delta.dy) >= 0 &&
(_offsetContainer + details.delta.dy) <=
(_sizeheightcontainer - _heightscroller)) {
_offsetContainer += details.delta.dy;
posSelected =
((_offsetContainer / _heightscroller) % _alphabet.length).round();
_text = _alphabet[posSelected];
if (_text != _oldtext) {
for (var i = 0; i < exampleList.length; i++) {
if (_text
.toString()
.compareTo(exampleList[i].toString().toUpperCase()[0]) == 0) {
_controller.jumpTo(i * _itemsizeheight);
break;
}
}
_oldtext = _text;
}
}
For the complete implementation, check this: