如何检查用户向左或向右(可忽略)轻拂

时间:2019-08-10 07:09:51

标签: flutter dart

我在Flutter中使用了可禁用的小部件。
我知道ondismiss()可以为我们提供有关用户向左或向右滑动的位置的一条信息,但是只有在从屏幕上消除了某个元素后才能提供该信息。我可以检测用户是否要向左或向右滑动吗? 也许,我可以检查背景是否可见,我正在谈论背景和第二个背景

1 个答案:

答案 0 :(得分:0)

在关闭前,可以使用confirmDismiss执行任何逻辑,如果返回true,则必须返回true或false值,否则元素将被删除并在onDismissed中执行操作。

Dismissible(
          key: ValueKey(id),
          background: Container(
            color: Theme.of(context).errorColor,
            child: Icon(
              Icons.delete,
              color: Colors.white,
              size: 40,
            ),
            alignment: Alignment.centerRight,
            padding: EdgeInsets.only(right: 20),
            margin: EdgeInsets.symmetric(
              horizontal: 15,
              vertical: 4,
            ),
          ),
          direction: DismissDirection.endToStart,
          confirmDismiss: (direction) {
            return showDialog(
              context: context,
              builder: (ctx) => AlertDialog(
                    title: Text('Are you sure?'),
                    content: Text(
                      'Do you want to remove the item from the cart?',
                    ),
                    actions: <Widget>[
                      FlatButton(
                        child: Text('No'),
                        onPressed: () {
                          Navigator.of(ctx).pop(false);
                        },
                      ),
                      FlatButton(
                        child: Text('Yes'),
                        onPressed: () {
                          Navigator.of(ctx).pop(true);
                        },
                      ),
                    ],
                  ),
            );
          },
          onDismissed: (direction) {
            Provider.of<Cart>(context, listen: false).removeItem(productId);
          },
          child: Card(
            margin: EdgeInsets.symmetric(
              horizontal: 15,
              vertical: 4,
            ),
            child: Padding(
              padding: EdgeInsets.all(8),
              child: ListTile(
                leading: CircleAvatar(
                  child: Padding(
                    padding: EdgeInsets.all(5),
                    child: FittedBox(
                      child: Text('\$$price'),
                    ),
                  ),
                ),
                title: Text(title),
                subtitle: Text('Total: \$${(price * quantity)}'),
                trailing: Text('$quantity x'),
              ),
            ),
          ),
        );