Flutter 可滑动:如何通过点击打开操作面板并同时关闭其他操作面板

问题描述 投票:0回答:1

我正在使用 flutter_slidable 库来实现项目列表。我想通过点击该项目来实现这个打开的操作面板,同时,其他项目的所有操作面板都应该关闭。

但是,我可以实现这两个功能,但它们不能同时实现。作为初始状态,所有项目的操作面板都是关闭的。当我点击一项时,该项目的操作面板将打开。然后我点击另一个项目。第一个项目的操作面板已关闭,但第二个项目的操作面板未打开。我必须再次点击第二个项目才能打开操作面板。

有人可以帮忙吗?谢谢你

这是我的代码

SlidableAutoCloseBehavior(
              closeWhenOpened: true,
              child: ListView(
                physics: const AlwaysScrollableScrollPhysics(),
                controller: ctrl.scrollCtrl,
                children: ctrl.items
                    .asMap()
                    .entries
                    .map((MapEntry<int, ListItem> entry) => _buildSlidable(context, entry))
                    .toList(),
              ),
            )

而 _buildSlidable 是

Widget _buildSlidable(BuildContext context, MapEntry<int, ListItem> entry) {
    return Slidable(
      groupTag: 'gourpTag',
      startActionPane: ActionPane(
        motion: const ScrollMotion(),
        children: [
          SlidableAction(
            onPressed: () {},
            icon: icon,
          );
        ],
      ),
      child: LayoutBuilder(
        builder: (layoutBuilderContext, constraints) {
          return GestureDetector(
            child: ListTile(
              title: Text('Title'),
            ),
            onTap: () {
              final controller = Slidable.of(layoutBuilderContext)!;
              final isClosed =
                  controller.actionPaneType.value == ActionPaneType.none; // you can use this to check if its closed
              if (isClosed) {
                controller.openStartActionPane();
              } else {
                controller.close();
              }
            },
          );
        },
      ),
    );
  }
flutter
1个回答
0
投票

为了自动关闭其他面板,可以使用SlidableAction的autoclose属性并将其设置为true,这样通过打开另一个面板,当前打开的面板就会关闭。

© www.soinside.com 2019 - 2024. All rights reserved.