Вложенные виджеты жестов
Причиной возникновения этой проблемы является то, что оба этих виджета получают сенсорный ввод, а когда у вас есть два виджета, которые получают сенсорный ввод, короткая история о ребенке выигрывает эту битву. Вот длинная история. Таким образом, оба ваших ввода от ваших Dismissible
и GestureDetector
отправляются на то, что называется GestureArena
. Здесь арена учитывает множество различных факторов, но в конце истории ребенок всегда побеждает. Вы можете решить эту проблему, определив свой собственный RawGestureDetector
с его собственным GestureFactory
, который изменит способ работы арены.
ListView.builder(
physics: AlwaysScrollableScrollPhysics(),
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
var item = items[index];
return Listener(
child: Dismissible(
key: ValueKey(item),
child: ListTile(
title: Text('This is some text'),
),
onDismissed: (DismissDirection direction) {
items.remove(index);
},
),
onPointerMove: (PointerMoveEvent move) {
if (move.localDelta.dx > 1) {//Ideally this number whould be
//(move.localDelta.dx != 0) but that is too sensitive so you can play with
//this number till you find something you like.
print(move.position);
}
},
);
},
);
Я хочу отдать должное Na sh, автору Flutter Deep Dive: Gestures это отличная статья, я настоятельно рекомендую вам ознакомиться с ней.