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

标签 android ios dart flutter

我正在编写一个应用程序来保存您的购物 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,
  ...
);

关于android - 在 Dismissible Widget 上禁用关闭方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52478469/

相关文章:

flutter - 更改程序包名称时Flutter App不起作用

intellij-idea - 如何将数据记录到 Flutter 控制台?

android - 获取SeekBar触摸位置(无进度变化)

java - 在处理程序上调用时, TextView 为空

java - 声明 SQLite getWritableDatabase() 的正确位置

ios - 如何使用模数和指数生成公钥?

java - NPE 当 getArguments() 来自扩展 fragment 的类时

iOS Facebook sdk 打开相册选择和图像选择屏幕

ios - 使用 CGRectMake Swift 使椭圆居中

android - 如何在两个不同的项目中使用 firebase?