首先,我知道这样做不是很可行,但是我有一个问题,我不知道该怎么办。
我想使用DropDown,但它不会更改没有setState的文本,因此我无法将此代码转换为StatefulWidget。我该怎么办?该代码并不重要,但在这里(不是整个代码):
Widget buildAboutDialog(
BuildContext context, _myHomePageState, bool isEdit, Clothes clothes){
if(clothes != null){
this.clothes = clothes;
teCategoryName = clothes.category;
teBrandName.text = clothes.brand;
teColorName.text = clothes.color;
teSizeName.text = clothes.size;
teQtyName.text = clothes.qty;
}
return new AlertDialog(
title: new Text(isEdit ? 'Edit' : 'Add new Clothes'),
content: new SingleChildScrollView(
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
child: Center(
child: DropdownButton(
hint: Text("Choose Category"),
value: teCategoryName,
isExpanded: true,
onChanged: (newValue){
teCategoryName = newValue;
**setState(() {
teCategoryName = newValue;
});**
},
items: _categorynames.map((location){
return DropdownMenuItem(
child: new Text(location),
value: location,
);
}).toList(),
),
),
),
最佳答案
您不能。 setState
方法更新小部件的状态。根据定义,StatelessWidget
没有要更新的状态。因此,如果您希望能够调用setState
,则需要将小部件转换为StatefulWidget
。 (但是,可以很容易地将任何StatelessWidget
转换为StatefulWidget
。)