我正在编写一个应用程序来保存您的购物 list 。这些项目应该可以关闭以编辑内容或删除项目。如果要编辑的文本字段中已经有其他内容,则应禁用特定方向的滑动。现在我的 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")));
}
},
)
解决方案:
添加这样的解雇指示
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")));
}
},
)
最佳答案
要实现这一点,您需要声明一个局部变量来操作 dismiss direction并根据您的条件设置其值:
// 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,
...
);
https://stackoverflow.com/questions/52478469/
相关文章:
java - 在 Flutter 应用程序中使用 Java 或其他语言
dart - 如何使 Sink
android - Flutter - 多个手势,无需抬起手指
flutter - Flutter Text 是否支持长字的换行?
android - Flutter中如何解析json数据并显示在Listview中?
dart - 如何使用现有的应用程序 keystore 获取签名的 apk?
firebase - flutter |如何将数据添加到 Firestore 中的现有文档