#flutter
Вопрос:
Я пытаюсь изменить цвета SVG, когда нажимаю на него. Я использую boolean
вход parent widget
и устанавливаю значение true/false при нажатии svg. Затем я читаю boolean
в своем child widget
и пытаюсь настроить цвета для ребенка conditional logic
. В debugging
, я вижу boolean
изменения true
и false
, как и ожидалось. Но цвет не меняется. Как изменить цвет в этом случае?
Ошибка: No errors, it just don't change colour when tap
Дочерний виджет
class ToolSetButton extends StatefulWidget { final double width; final double height; ... const ToolSetButton( {Key? key, ... this.checkedColour = iconColourUnchecked, this.unCheckedColour = iconColourChecked, ... required this.buttonType , }) : super(key: key); @override Statelt;ToolSetButtongt; createState() =gt; _ToolSetButtonState(); } class _ToolSetButtonState extends Statelt;ToolSetButtongt; { @override Widget build(BuildContext context) { return Column(children: lt;Widgetgt;[ InkWell( splashColor: Colors.white, onTap: () { widget.functionReceiverforButtonandSVG(); }, child: Container( child: Padding( padding: EdgeInsets.all( functionCalculatePadding(widget.height)), child: FittedBox( fit: BoxFit.contain, child: widget.icon == null ? SvgPicture.asset( widget.svgPicPath!, color: buttonChecked == true ? widget.checkedColour : widget.unCheckedColour )
Родительский виджет
class _ToolSetBottomState extends Statelt;ToolSetBottomgt; { @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.center, children: lt;Widgetgt;[ Row( children: [ ToolSetButton( svgPicPath: svgVectorImagePath, buttonType: myButtonTypeList.SVGOnly, checkedColour: Colors.green, unCheckedColour: Colors.grey, width: 80, height: 80, functionReceiverforButtonandSVG: () { funcForTapsandClicks (myButtonList.Two);}), funcForTapsandClicks( myButtonList tappedOn) { if (tappedOn == myButtonList.Two ){ print('Two'); buttonChecked = buttonChecked == true ?false : true; } }
Комментарии:
1. Вам нужно позвонить
setState
, чтобы запустить обновление виджета.
Ответ №1:
Отправьте переменную, отмеченную кнопкой, в дочерний виджет вместо передачи функции. В дочернем виджете используйте setState((){ widget.buttonChecked = !widget.buttonChecked; });
Комментарии:
1. куда вы его помещаете? под
onTap: ()
этим ? там написаноbuttonChecked is not defined for "toolSetButton"
2. если (tappedOn == Мой список кнопок. Два ){ печать(«Два»); Кнопка отмечена = Кнопка отмечена == верно ? false : true; } Вы можете удалить эти строки и добавить строки, которые я вам дал