У меня есть два класса с сохранением состояния, которые имеют свои собственные переключатели.Радиокнопка родительского класса с отслеживанием состояния должна запускать отображение или скрытие видимости дочерних классов с отслеживанием состояния.
Я пытаюсь активировать дочерний класс с сохранением состояния, чтобы он был видимым или скрытым, когда я щелкаю одну из переключателей в родительском классе.Но функция сборки дочернего класса с сохранением состояния не срабатывает, даже если я запускаю ее с помощью 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
],
);
}