2017-08-28 35 views
0

我使用的是禁用項目的列表,並且想要在一個方向上滑動以刪除項目,但在另一個方向上滑動以啓動對項目的編輯。但是,Flutter堅持認爲必須從onDismissed回調中的樹中刪除Disallow項。我試過重新插入這個項目,但這不起作用。有任何想法嗎?從代碼創建列表項提取低於:顫動可能的堅持列表項目必須從樹上移除

return new Dismissible(
    key: new ObjectKey(item), 
    direction: DismissDirection.horizontal, 
    onDismissed: (DismissDirection direction) { 
     setState(() { 
     item.deleteTsk(); 
     }); 
     if (direction == DismissDirection.endToStart){ 
     //user swiped left to delete item 
     _scaffoldKey.currentState.showSnackBar(new SnackBar(
      content: new Text('You deleted: ${item.title}'), 
      action: new SnackBarAction(
      label: 'UNDO', 
      onPressed:() { handleUndo(item); } 
     ) 
     )); 
     } 
     if (direction == DismissDirection.startToEnd){ 
     //user swiped right to edit so undo the delete required by flutter 
     Async.scheduleMicrotask((){handleUndo(item);}); 
     Navigator.of(context).pushNamed('/tskedit'); 
     } 
    }, 
    ... 

回答

2

Dismissible會認爲只要項目關鍵的變化您的項目被駁回。假設您的物品類是MyItem。如果您在MyItem類實現一個構造函數MyItem.from那份領域過度,如:

class MyItem { 
    MyItem({ @required this.title, @required this.color }); 
    MyItem.from(MyItem other) : title = other.title, color = other.color; 
    final String title; 
    final Color color; 
} 

然後你就可以用handleUndo(new MyItem.from(item))替代handleUndo(item)讓你new ObjectKey(item)會從舊ObjectKey你之前使用獨特的(假設你沒有在MyItem上實施operator ==)。

+0

天才 - 謝謝!更一般地說,它有點奇怪,需要像這樣的工作。我原以爲我的用例並不那麼不尋常。 – iBob101

+0

我同意這個用於'Dismissible'的用例很尷尬。如果您有更好的行爲建議,請隨時[提出問題](https://github.com/flutter/flutter/issues/new)。 –

+0

完成:[link](https://github.com/flutter/flutter/issues/11825) – iBob101

相關問題