我有一个名为ToggleButtonsList的无状态窗口小部件,并且我的实例字段之一isSelectedType未设置为final。由于这个原因,这是我收到的警告:
“该类(或该类继承的类)被标记为'@immutable',但其一个或多个实例字段不是最终的:ToggleButtonsList.isSelectedType”
这是我的代码的一部分:
class ToggleButtonsList extends StatefulWidget {
ToggleButtonsList({this.type, this.stringList});
final String type;
final List<String> stringList;
List<bool> isSelectedType = [];
@override
_ToggleButtonsListState createState() => _ToggleButtonsListState();
}
class _ToggleButtonsListState extends State<ToggleButtonsList> {
@override
Widget build(BuildContext context) {
}
}
我的问题:我认为仅对于无状态小部件(而不是有状态小部件),需要将实例字段设置为final 。这是真的?这是我应该担心的警告,因为我没有使用StatelessWidget还是可以忽略它?当我忽略警告时,我的应用程序似乎运行良好。阅读警告的部分,阅读“或该类继承自的类” ,使我尝试在我的项目中搜索该类可能继承的任何StatelessWidgets,而我的项目中唯一的StatelessWidget则来自main.dart:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(
primaryColor: Colors.blueGrey,
scaffoldBackgroundColor: Colors.blueGrey),
home: PriceScreen(),
);
}
}
将MyApp类更改为StatefulWidget并没有消除警告。 最佳答案
我认为您混合使用State
和StatefulWidget
类。 Widget
类本身是immutable
,并且StatelessWidget
和StatefulWidget
都从Widget
类扩展。
在您的特定情况下,isSelectedType
变量可以是final
,因为最终集合可以增长或收缩。只有固定的收藏不允许您增长或缩小。
你需要做什么:
class ToggleButtonsList extends StatefulWidget {
ToggleButtonsList({this.type, this.stringList});
final String type;
final List<String> stringList;
@override
_ToggleButtonsListState createState() => _ToggleButtonsListState();
}
class _ToggleButtonsListState extends State<ToggleButtonsList> {
List<bool> isSelectedType = [];
@override
Widget build(BuildContext context) {
}
}