我正在使用 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();
}
},
);
},
),
);
}
为了自动关闭其他面板,可以使用SlidableAction的autoclose属性并将其设置为true,这样通过打开另一个面板,当前打开的面板就会关闭。