android - 在 Dismissible Widget 上禁用关闭方向

我正在编写一个应用程序来保存您的购物 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 格式化 Stream 的结果?

android - Flutter - 多个手势,无需抬起手指

dart - 使用 Flutter 进行底部导航

flutter - Flutter Text 是否支持长字的换行?

android - Flutter中如何解析json数据并显示在Listview中?

dart - 如何使用现有的应用程序 keystore 获取签名的 apk?

firebase - flutter |如何将数据添加到 Firestore 中的现有文档

firebase - Flutter ListView 跳转到顶部

flutter - Flutter 中的约束布局等价物是什么?