我有一个名为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并没有消除警告。

最佳答案

我认为您混合使用StateStatefulWidget类。 Widget类本身是immutable,并且StatelessWidgetStatefulWidget都从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) {


  }
}

08-05 09:06