मैं खारिज करने योग्य विजेट का उपयोग करते हुए ऑफ़सेट खींचें प्राप्त करने का प्रयास कर रहा हूं। इसलिए इसे GestureDetector के साथ लपेटने का प्रयास किया, लेकिन इसका HorizontalDragStart काम नहीं कर रहा है।
किसी भी तरह से कोशिश की यानि GestureDetector को डिसमिसिबल के चाइल्ड के रूप में रखकर लेकिन फिर खारिज करने योग्य काम करना बंद कर दिया.
इसे कैसे हल करें? Thnx...

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    var item = items[index];
    return GestureDetector(
      onHorizontalDragStart: (e) {
        print(e);
      },
      child: Dismissible(
        key: ValueKey(item),
        background: Container(
          color: Colors.teal,
        ),
        child: ListTile(
          title: Text("item $item"),
        ),
        onDismissed: (d) {
          items.remove(item);
        },
      ),
    );
  },
);
0
گورو سینی 15 अप्रैल 2020, 08:18

1 उत्तर

सबसे बढ़िया उत्तर

नेस्टेड जेस्चर विजेट

आपके पास यह समस्या होने का कारण यह है कि उन दोनों विजेट्स को टच इनपुट प्राप्त होता है और जब आपके पास दो विजेट होते हैं जो टच इनपुट प्राप्त करते हैं, तो लंबी कहानी छोटी बच्ची उस लड़ाई को जीत जाती है। यहाँ लंबी कहानी है। तो आपके 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);
            }
          },
        );
      },
    );

मैं Flutter Deep Dive: Gestures के लेखक नैश को पूरा श्रेय देना चाहता हूं यह एक अच्छा लेख है, मैं आपको इसकी अत्यधिक अनुशंसा करता हूं।

2
wcyankees424 16 अप्रैल 2020, 03:03