Я пытаюсь сбросить значение String (dropdownValue) моего класса DropdownButton (SomeButton) из другого класса, который является родственным. Если быть точнее, вот код с комментариями
Родитель (содержит обоих братьев и сестер)
class Parent extends StatelessWidget {
const Parent({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Stackoverflow(),
SomeButton(),
],
);
}
}
Выпадающий класс (содержит раскрывающееся значение, которое я хочу сбросить из класса кнопок)
class Stackoverflow extends StatefulWidget {
const Stackoverflow({Key? key}) : super(key: key);
@override
State<Stackoverflow> createState() => _StackoverflowState();
}
class _StackoverflowState extends State<Stackoverflow> {
String? dropdownValue;
@override
Widget build(BuildContext context) {
return DropdownButtonHideUnderline(
child: DropdownButton2(
items: someItems,
onChanged: (value) {
setState(() {
dropdownValue = value as String;
});
},
value: dropdownValue),
);
}
}
Кнопка (onTap -> очистить выпадающее значение от верхнего класса)
class SomeButton extends StatelessWidget {
const SomeButton({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
// reset dropdownValue
},
);
}
}
Когда я искал решения, ключи могли быть вариантом. Но, честно говоря, я никогда не использовал ключи и не видел подробной документации по своей проблеме. Провайдер также можно использовать, но у меня возникли проблемы с инициализацией моего раскрывающегося значения, потому что я должен быть пустым, когда до сих пор не выполняется взаимодействие с пользователем. Буду признателен за любую помощь :)
Вы можете использовать функции обратного вызова из родительского класса.
class Parent extends StatefulWidget {
const Parent({Key? key}) : super(key: key);
@override
State<Parent> createState() => _ParentState();
}
class _ParentState extends State<Parent> {
String? dropdownValue;
@override
Widget build(BuildContext context) {
return Column(
children: [
Stackoverflow(
dropdownValue: dropdownValue,
onChanged: (value) {
setState(() {
dropdownValue = value;
});
},
),
SomeButton(
dropdownValue: dropdownValue,
onTap: () {
//reset dropdownValue to whatever you want
},
),
],
);
}
}
Я бы рекомендовал использовать решения State Management, такие как провайдер или блок, но да, конечно
Я проверю, вы имеете в виду, что GlobalKey и FormState также являются хорошим вариантом?