flutter - 使用 StatefulWidget 标记为 @immutable 的类,实例字段不是最终的

标签 flutter dart final instance-variables statefulwidget

我有一个名为 ToggleButtonsList 的无状态小部件,我的实例字段之一 isSelectedType 未设置为最终字段。这是我因此收到的警告:

“此类(或此类继承自的类)被标记为‘@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) {
   
   
  }
}

我的问题:我认为需要将实例字段设置为最终仅适用于无状态小部件,而非有状态小部件。这是真的?这是我应该担心的警告,因为我没有使用 StatelessWidget 还是可以忽略它?当我忽略警告时,我的应用似乎运行良好。

阅读警告的“或此类继承自的类” 部分让我尝试在我的项目中搜索此类可能继承自的任何 StatelessWidget,而我的项目中唯一的 StatelessWidget 是来 self 的 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) {
   
   
  }
}

关于flutter - 使用 StatefulWidget 标记为 @immutable 的类,实例字段不是最终的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64207910/

相关文章:

flutter - 如何通过 Sentry 发送设备信息

dart - Dart Web套接字中是否有心跳,超时或断开连接支持?

java - 私有(private)最终 int 空白;私有(private)最终int空白j;

java - java中static final transient的作用是什么?

flutter - 如何在tabBar中的选项卡之间制作垂直线?

flutter - 卡住构造函数初始值设定项

dart - 使用 Providers 在流中流式传输

java - 为什么 Java 8 中引入了 'effectively final'?

flutter - json_serializable - 为生成的文件指定自定义路径

Flutter:如何使用 AnimatedContainer 在列中展开?