“没有引用声明‘setState’。” StatefulWidget 中 DropdownButton 的警告
Posted
技术标签:
【中文标题】“没有引用声明‘setState’。” StatefulWidget 中 DropdownButton 的警告【英文标题】:"The declaration 'setState' isn't referenced." warning for DropdownButton within StatefulWidget 【发布时间】:2021-10-23 03:53:51 【问题描述】:我有一个有状态的小部件,我在其中放置了 DropdownButton。在 DropdownButton 的 onChange 事件中,我有一个 setState,但它一直警告我没有引用声明“setState”。 并且它实际上不会在 onChange 事件被触发时被调用。
任何建议都将受到高度赞赏。
更详细的请看下面的代码sn-p。
class TypeSetup extends StatefulWidget
const TypeSetup(Key? key) : super(key: key);
@override
_TypeSetupState createState() => _TypeSetupState();
class _TypeSetupState extends State<TypeSetup>
var _selectedType;
List<Type>? _types;
@override
void initState()
super.initState();
loadTypeJson();
Future loadTypeJson() async
String typeJson = await DefaultAssetBundle.of(context)
.loadString("assets/data/types.json");
Iterable typeIter = json.decode(typeJson)["accommodation-types"];
setState(()
_types = List<Type>.from(typeIter.map((model) => Type.fromJson(model)));
);
@override
Widget build(BuildContext context)
final typeList = _types?.map((model)
return new DropdownMenuItem<String>(
value: model.type,`enter code here`
child: new Text(model.name),
);
).toList();
return Container(
padding: EdgeInsets.all(DefaultPalette.defaultPadding),
decoration: BoxDecoration(
color: DefaultPalette.secondaryColor,
borderRadius: const BorderRadius.all(Radius.circular(10)),
),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Text(
"Set up",
style: Theme.of(context).textTheme.subtitle1,
),
SizedBox(
width: double.infinity,
child: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
padding: EdgeInsets.only(left: 16, right: 16),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1),
borderRadius: BorderRadius.circular(13)),
child: DropdownButton(
hint: Text('Select Type'),
dropdownColor: Colors.white,
icon: Icon(Icons.arrow_drop_down),
iconSize: 30,
isExpanded: true,
underline: SizedBox(),
style: TextStyle(color: Colors.black, fontSize: 22),
value: _selectedType,
onChanged: (newValue)
setState()
_selectedType = newValue;
print("Selected type changed.");
,
items: typeList,
),
)
)
)
)
]),
);
【问题讨论】:
【参考方案1】:你需要像这样拨打setState
setState(()
_selectedType = newValue;
);
【讨论】:
以上是关于“没有引用声明‘setState’。” StatefulWidget 中 DropdownButton 的警告的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:'State'和'State' PYTHON 3的实例之间不支持'<'
Angular ui-router 中 $state.transitionTo() 和 $state.go() 之间的区别