我正在写一个应用程序来保存您的购物清单。那些项目对于编辑内容或删除项目应该是可忽略的。如果文本字段中已经有其他内容要编辑,则应禁用特定方向的滑动。就目前而言,我的Dismissible看起来像这样。
Dismissible(
background: Container(
alignment: Alignment.centerLeft,
padding: EdgeInsets.only(left: 20.0),
color: Colors.redAccent,
child: Icon(Icons.delete, color: Colors.white),
),
secondaryBackground: Container(
alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 20.0),
color: Colors.orangeAccent,
child: Icon(Icons.edit, color: Colors.white),
),
child: Text("This is my dismissible widget"),
onDismissed: (direction){
if(direction == DismissDirection.startToEnd){
Scaffold.of(context).showSnackBar(SnackBar(content: Text("Swipe to right")));
} else if(direction == DismissDirection.endToStart){
Scaffold.of(context).showSnackBar(SnackBar(content: Text("Swipe to right")));
}
},
)
Run Code Online (Sandbox Code Playgroud)
解:
添加这样的撤消路线
Dismissible(
background: Container(
alignment: Alignment.centerLeft,
padding: EdgeInsets.only(left: 20.0),
color: Colors.redAccent,
child: Icon(Icons.delete, color: Colors.white),
),
secondaryBackground: Container(
alignment: Alignment.centerRight,
padding: EdgeInsets.only(right: 20.0),
color: Colors.orangeAccent,
child: Icon(Icons.edit, color: Colors.white),
),
child: Text("This is my dismissible widget"),
/*New*/
direction: (textController.text.isEmpty
? DismissDirection.horizontal
: DismissDirection.startToEnd
),
/*New*/
onDismissed: (direction){
if(direction == DismissDirection.startToEnd){
Scaffold.of(context).showSnackBar(SnackBar(content: Text("Swipe to right")));
} else if(direction == DismissDirection.endToStart){
Scaffold.of(context).showSnackBar(SnackBar(content: Text("Swipe to right")));
}
},
)
Run Code Online (Sandbox Code Playgroud)
要实现这一点,您需要声明一个局部变量来操纵解雇 方向并根据您的条件设置其值:
// Set required dismiss direction
DismissDirection dismissDirection;
if(OneConditionSatisfies && AnotherConditionSatisfies) {
dismissDirection = DismissDirection.horizontal; // two side dismission
} else if(OneConditionSatisfies) {
dismissDirection = DismissDirection.startToEnd; // only this one
} else if(AnotherConditionSatisfies) {
dismissDirection = DismissDirection.endToStart; // only this one
}
// Return widget from `build` function
return Dismissible(
...
direction: dismissDirection,
...
);
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以通过使用 TextItem 填充列表而不是使用 TextItem 填充 Dismissable 来禁用列表项上的可关闭操作。
return new ListView(
children: snapshot.data.documents.map((document) {
// Convert snapshot to user item
MyFBDocuments.ChatMessageItem documentData =
new MyFBDocuments.ChatMessageItem.fromDocumentSnapshot(
document);
// One List Item
Widget listItem = new _ChatMessageItem(
loading: false,
openedGroupChat: chatInfoDoc.isGroupChat,
messageDocument: documentData);
// Determine if dismiss action should be shown
if (documentData.senderId == MyAuthentication.authenticatedUser.uid){
// Create item with dismiss action
DismissDirection _dismissDirection = DismissDirection.startToEnd;
return _DismissableListItem(
messageDocData: documentData,
listItem: listItem,
onRightAction: _handleRightAction,
onDelete: _handleLeftAction,
dismissDirection: _dismissDirection,
);
} else {
// display item without dismiss action
return listItem;
}
}).toList(),
reverse: true,
padding: new EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 0.0),
);
Run Code Online (Sandbox Code Playgroud)
^代码来自 CaughtUp:https://www.caughtup-app.com/
归档时间: |
|
查看次数: |
2538 次 |
最近记录: |