RadioListTile 不适用于 setstate

时间:2021-03-11 07:05:50

标签: flutter

当我点击单选按钮时,它不会改变什么

class OnBoardingCheckBoxWithActionWidget extends StatefulWidget {
  String label;
  Function onClick;
  OnBoardingCheckBoxWithActionWidget(this.label, {this.onClick});
  @override
  _OnBoardingCheckBoxWithActionWidgetState createState() =>
      _OnBoardingCheckBoxWithActionWidgetState();
}

class _OnBoardingCheckBoxWithActionWidgetState
    extends State<OnBoardingCheckBoxWithActionWidget> {
  bool checked = true;
  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: RadioListTile(
          value: checked,
          groupValue: checked,
          toggleable: true,
          title: Text("${widget.label}"),
          onChanged: (val) {
            if (widget.onClick != null) {
              widget.onClick(val);
            }
            setState(() {
              print("$checked");
              checked = !checked;
              print("$checked");
            });
          },
        ),
      ),
    ); // Card(child: Row(children: [Expanded(child: RadioListTile())],),);
  }
}

1 个答案:

答案 0 :(得分:0)

您正在尝试更改父状态小部件的某些值。

尝试更改您当前的小部件,例如

class OnBoardingCheckBoxWithActionWidget
    extends StatelessWidget {
  String label;
  Function onClick;
  var groupValue;
  var buttonValue;

  OnBoardingCheckBoxWithActionWidget(this.label, {this.onClick, this.groupValue,, this.buttonValue});

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: RadioListTile(
          value: buttonValue,
          groupValue: groupValue,
          toggleable: true,
          title: Text("${this.label}"),
          onChanged: (val) {
            if (this.onClick != null) {
              this.onClick(val);
            }
          },
        ),
      ),
    ); // Card(child: Row(children: [Expanded(child: RadioListTile())],),);
  }
}

然后像这样调用

   OnBoardingCheckBoxWithActionWidget("Button1", onClick: (value){ 
    setState((){
     ///Your Other Code
     if(value){
      groupValue = 'button1';
     }
    }); 
   }, 
   groupValue: someGroupValueVariableInState, buttonValue: 'button1')

请注意, groupValue 和 buttonValue 变量将始终是布尔值以外的一些其他变量。当 groupValue == buttonValue 时,对应的按钮会自动标记为选中。