gpt4 book ai didi

flutter - 调用setState时如何强制flutter重建特定的小部件

转载 作者:行者123 更新时间:2023-12-03 04:46:31 25 4
gpt4 key购买 nike

我有一个stateful widget类。它的build方法中有一个listView。在列表 View 中,我有两个dropDownButtonFormField。最初,仅显示第一个下拉列表。在to中选择一个值后,通过调用set state绘制第二个下拉列表。第二个下拉按钮取决于第一个按钮的选择。

现在代码可以正常工作了。在第一个下拉按钮中选择值之后,第二个下拉按钮将出现,其中包含与第一个选定值相对应的选项。但是,从第二个按钮中选择一个选项并更改第一个按钮的选项时,会发生错误。

每当第一个下拉菜单的选定选项更改时,如何强制Flutter重新绘制第二个下拉菜单?

这是应用程序正在运行并崩溃的地方:

app giving error

码:

//called inside the list view childrens list
Widget showLocationDropDown() {
return Padding(
padding: const EdgeInsets.fromLTRB(0.0, 20.0, 0.0, 0.0),
child: Container(
child: Column(
children: <Widget>[
_getProvinceDropDown(),
_selectedProvince == null ? Container(): _getCityDropDown(),
],
),
),
);
}

Widget _getCityDropDown() {
return Column(
children: <Widget>[
Container(
height: 20,
),
Row(
children: <Widget>[
Icon(Icons.location_city, color: Colors.grey),
Container(
width: 17.0,
),
Expanded(
child: ButtonTheme(
alignedDropdown: true,
child: DropdownButtonFormField(
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(25.0),
borderSide: BorderSide(color: Colors.grey))),
hint: Text('Please choose your city'),
value: _selectedCity,
onChanged: (newValue) {
setState(() {
_selectedCity = newValue;
});
},
items: _getCities().map((location) {
return DropdownMenuItem(
child: Text(location),
value: location,
);
}).toList(),
),
),
),
],
),
],
);
}

List<String> _getCities() {
switch (_selectedProvince) {
case ("Sindh"):
return _sindhCities;

case ("Punjab"):
return _punjabCities;

case ("Balouchistan"):
return _balouchCities;

case ("KPK"):
return _kpkCities;
}
List<String> deflt = ['Please Select Province'];
return deflt;
}

Widget _getProvinceDropDown() {
return Row(
children: <Widget>[
Icon(Icons.map, color: Colors.grey),
Container(
width: 17.0,
),
Expanded(
child: ButtonTheme(
alignedDropdown: true,
child: DropdownButtonFormField(
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(25.0),
borderSide: BorderSide(color: Colors.grey),
),
),
hint: Text('Please choose your province'),
value: _selectedProvince,
onChanged: (newValue) {
setState(() {
_selectedProvince = newValue;
_selectedCity = null;
stateChange = !stateChange;
});
},
items: _province.map((province) {
return DropdownMenuItem(
child: Text(province),
value: province,
);
}).toList(),
),
),
),
],
);
}

最佳答案

运行$ flutter upgrade起作用。

关于flutter - 调用setState时如何强制flutter重建特定的小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62183364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com