Когда Flutter ExpansionTile и DropdownButton сбрасываются, выполняется SetState в onExpansionChanged.
У меня есть DropdownButton и ExpansionTile на моей странице. Заполнение ExpansionTile на основе данных из DropDownButton.
При нажатии на ExpansionTile он сбрасывается и обновляется. Я думаю, что это вызвано выпадающим и setState. Потому что DropDownButton также сбрасывает и обновляет себя.
Моя проблема заключается в следующем: https://drive.google.com/file/d/1lNo1mvz0y2WYFI1oIipf5pZKsPlVu3b8/view
сброс моего ExpansionTile из-за setState. также мой сброс выпадающего из-за setState
Спасибо.
MY DropDownButton
List<Year> _years = Year.getYears();
List<DropdownMenuItem<Year>> _dropdownMenuItemYear;
Year _selectedYear;
@override
void initState() {
_dropdownMenuItemYear = buildDropdownMenuYearItems(_years);
_selectedYear = _dropdownMenuItemYear[1].value;
super.initState();
}
List<DropdownMenuItem<Year>> buildDropdownMenuYearItems(List years) {
List<DropdownMenuItem<Year>> items = List();
for (Year year in years) {
items.add(DropdownMenuItem(
value: year,
child: Text(year.year),
));
}
return items;
}
onChangeDropdownYearItem(Year selectedYear) {
setState(() {
_selectedYear = selectedYear;
});
}
ButtonTheme(
alignedDropdown: true,
child: DropdownButton(
isExpanded: true,
value: _selectedYear,
items: _dropdownMenuItemYear,
onChanged: onChangeDropdownYearItem,
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 20.0,
iconEnabledColor: MyColors.grey,
underline: Container(
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide.none)),
),
style: TextStyle(
color: MyColors.greyDark,
fontSize: deviceType ? 11.5 : 17.5 )))
class Year {
String year;
Year(this.year);
static List<Year> getYears() {
DateTime now = DateTime.now();
return <Year>[
for (int i = 0; i < 11; i++) Year((now.year + 1 - i).toString())
];
}
}
MY ExpansionTile
FutureBuilder<APIResponse<List<TestModel>>>(
future: TestService.getTestList(context, _selectedMonthValue, _selectedYear.year),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return Container(child: Text('no year')); }
return snapshot.hasData ?
Column( children: <Widget>[
ListView.builder(
key: Key('builder ${selected.toString()}'),
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: snapshot.data.count,
itemBuilder: (context, index) {
return Column(
children: <Widget>[
Divider(
height: 0.0,
color: MyColors.white,
),
Theme(
data: theme,
child: ExpansionTile(
key: Key(index.toString()),
initiallyExpanded: index == selected,
title: Column( children: <Widget>[
Row(children: <Widget>[
Column(children:<Widget>[
Text(snapshot.data.source[index].eventDate)),
Text(snapshot.data.source[index].month),
]),
Expanded(child:
Padding(padding: EdgeInsets.all(10),
child: Column( children: <Widget>[
Padding(padding: EdgeInsets.all(7.5),
child:Text(snapshot.data.source[index].name,)
)])))
])] )
children: <Widget>[
Container(
child: Padding( padding: EdgeInsets.all(15),
child:Text(snapshot.data.source[index].description)),
)],
onExpansionChanged: ((newState) {
if (newState)
setState(() {
selected = index;
});
else
setState(() {
selected = -1;
});
}))),
]);
})])
: CircularProgressIndicator();
}),