Скрыть или показать Stateful дочерний класс при нажатии переключателей родительского класса - PullRequest
0 голосов
/ 10 июля 2019

У меня есть два класса с сохранением состояния, которые имеют свои собственные переключатели.Радиокнопка родительского класса с отслеживанием состояния должна запускать отображение или скрытие видимости дочерних классов с отслеживанием состояния.

Я пытаюсь активировать дочерний класс с сохранением состояния, чтобы он был видимым или скрытым, когда я щелкаю одну из переключателей в родительском классе.Но функция сборки дочернего класса с сохранением состояния не срабатывает, даже если я запускаю ее с помощью setState ().Я пытался выполнить это, используя виджеты в одном классе с сохранением состояния, но я не смог скрыть или показать дочерний виджет, потому что сборка не будет перезапущена.

Виджет RadioWidget Stateful (родительский) -

class RadioWidget extends StatefulWidget{
  final IncidentComponent data;
  RadioWidget(this.data);
  @override
  _CustomWidgetState createState() => _CustomWidgetState();
}

class _CustomWidgetState extends State<RadioWidget>{
  int _radioValue1 = -1;
  bool _visible = false;
  String textFontFamily;

  void _handleRadioValueChange1(int value) {
    setState(() {
      _radioValue1 = value;
      switch (_radioValue1) {
        case 0:
          setState(() {
            _visible = true;
            RadioDependentWidget(widget.data, false);
          });
          break;
      }
    });
  }

@override
  Widget build(BuildContext context) {
return Column(children: <Widget>[
     ListView.builder(
     scrollDirection: Axis.vertical,
     shrinkWrap: true,
     itemCount: widget.data.options.length,
     itemBuilder: (context, index) {
     return Row(
       children: <Widget>[
       Radio(
       value: 0 + index,
       groupValue: _radioValue1,
       onChanged: _handleRadioValueChange1,),

       Text(widget.data.options[index].dataText,
       style: TextStyle(color: AppColors.blueDarkColor,
       fontSize: 16.0,fontFamily: 'Euclid-Medium'),
       )
       ],
      );
    }),
  ],
 );
}

RadioDependentWidget Stateful Widget (дочерний) -

class RadioDependentWidget extends StatefulWidget{
  final IncidentComponent data;
  final bool _visible;
  RadioDependentWidget(this.data, this._visible);
  @override
  _CustomWidgetState createState() => _CustomWidgetState();
}

class _CustomWidgetState extends State<RadioDependentWidget>{
  int _radioValue2 = -1;

  void _handleRadioValueChange2(int value) {

    setState(() {
      _radioValue2 = value;
      print('index value is 22222 -> ' + _radioValue2.toString());
      switch (_radioValue2) {
        case 0:
          break;
        case 1:
          break;
      }
    });
  }

@override
      Widget build(BuildContext context) {
    return Column(children: <Widget>[
         ListView.builder(
         scrollDirection: Axis.vertical,
         shrinkWrap: true,
         itemCount: widget.data.options.length,
         itemBuilder: (context, index) {
         return Row(
           children: <Widget>[
           Radio(
           value: 0 + index,
           groupValue: _radioValue2,
           onChanged: _handleRadioValueChange2,),

           Text(widget.data.options[index].dataText,
           style: TextStyle(color: AppColors.blueDarkColor,
           fontSize: 16.0,fontFamily: 'Euclid-Medium'),
           )
           ],
          );
        }),
      ],
     );
    }

Я хочу, чтобы дочерний класс с сохранением состояния загружался снова, когда состояние видимости было изменено по сравнению с родительским классом с сохранением состояния.

ОБНОВЛЕНО Оба виджета с состоянием создаются в основном классе -

 if (snapshot.data[index].dependencyId == '0'){
                              return Column(
                                children: <Widget>[
                                  RadioWidget(snapshot.data[index]),
                                  buttonsWidget
                                ],
                              );
                            } else {
                              return Column(
                                children: <Widget>[
                                  RadioDependentWidget(snapshot.data[index],
                                  true),
                                  buttonsWidget
                                ],
                              );
                            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...