У меня есть виджет Slidable с ребенком Card, и мне интересно, могу ли я открыть Slidable, когда я нажимаю на Card? Я пробовал использовать SlidableController, но этот класс кажется глючным, поскольку он продолжает возвращать мне ноль. Кроме того, я также пробовал использовать свойство groupTag в Slidable, но оно также не работало в моем проекте. Ниже приведен пример кода и надеюсь, что кто-нибудь сможет помочь:
Slidable(
endActionPane: ActionPane(motion: const DrawerMotion(), children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: smallCircularRadius,
bottomRight: smallCircularRadius),
gradient: customColors.progressBarGradient),
child: ContactOptions(
contact: data.getContact(), email: data.email)))
]),
child: CustomCard(
onTap: () {
Slidable.of(context)!.openEndActionPane();
},
child: ListTile(
dense: true,
leading: Icon(Icons.supervised_user_circle, size: 50),
title:
Text('KOO KIAN KEAT'),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('----',
style: customTextStyles.bodySmall)
]))))





Следуя документации:
Вы можете сделать что-то вроде
final controller = SlidableController();
// Open the actions
void _handleOpen() {
controller.openEndActionPane();
// OR
//controller.openStartActionPane();
}
// ...
child: Slidable(
controller: controller,
endActionPane: ActionPane(
motion: const DrawerMotion(),
...
))
Итак, поместите свою карту в виджет Inkwell.
child: InkWell(
onTap: _handleOpen,
child: const Card(
margin: EdgeInsets.zero,
elevation: 0,
child: ListTile(
dense: true,
leading: Icon(Icons.supervised_user_circle, size: 50),
title: Text('KOO KIAN KEAT'),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [Text('----')],
),
),
),
),
@Leong «Не могу создать SlidableController». Какую ошибку вы получаете?
«1 позиционный аргумент ожидается SlidableController.new, но найдено 0. Попробуйте добавить недостающий аргумент».
я пробовал так: late SlidableController controller = SlidableController(this);, тогда мне удалось создать контроллер, но когда я применяю controller!.openEndActionPane(), он всегда возвращает мне нулевое значение
вы сделали горячую перезагрузку после создания поздней переменной?
Пожалуйста, замените вашего ребенка на код ниже
Slidable(
endActionPane: ActionPane(motion: const DrawerMotion(),
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: smallCircularRadius,
bottomRight: smallCircularRadius),
gradient: customColors.progressBarGradient),
child: ContactOptions(
contact: data.getContact(), email: data.email)))
]),
child: CardWidget()
)
class CardWidget extends StatelessWidget {
const CardWidget({
Key? key,
}) : super(key: key);
final Color color;
final String text;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Slidable.of(context)!.openEndActionPane();
},
child: Card(
margin: EdgeInsets.zero,
elevation: 0,
child: ListTile(
onTap: () {
Slidable.of(context)!.openEndActionPane();
},
leading: Icon(Icons.supervised_user_circle, size: 50),
title: Text('KOO KIAN KEAT'),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [Text('----')],
),
),
),
);
}
}
Могу ли я узнать, какую версию/какую библиотеку вы использовали в классе SlidableState?
@Leong Пожалуйста, проверьте ответ выше, я отредактировал некоторый код
Slidable.of(context)!.openEndActionPane() выдаст мне «Нулевая проверка, использованная для нулевого значения»...
Используйте приведенный выше код для вашего дочернего виджета и превратите этот дочерний элемент в конкретный виджет без сохранения состояния.
Я использую его в своем дочернем виджете, и это виджет без сохранения состояния.
Можете ли вы предоставить мне снимок вашего кода, чтобы я мог помочь вам больше в вашей проблеме?
Я уже обновил свой код в вопросе
вместо вашего кода используйте CardWidget в дочернем коде
CustomCard в моем коде по сути то же самое, что и ваш CardWidget (Card, завернутый в GestureDetector)
Пожалуйста, проверьте ответ выше, я отредактировал некоторый код
пока я вызываю строку Slidable.of(context)!.openEndActionPane();, мне будет предложено «Нулевая проверка используется для нулевого значения». Я думаю, это потому, что Slidable.of(context) продолжает возвращать мне нулевое значение...
Замените приведенный выше код на свой код
Могу ли я узнать, в чем проблема с моим кодом?
Я попробовал первый упомянутый метод, но не могу создать
SlidableControllerв своем проекте.