flutter - Flutter:在无状态小部件中,我收到 “The instance member ' xy',无法在初始化程序中对其进行访问。”在数组xy上使用长度时

标签 flutter dart final stateless

现在这是我代码中遇到此问题的第二个位置(第一个仍在等待中,因为我认为这可能是由其他原因引起的)
在无状态的子类中,我基于传递给该类的参数来创建最终形式。引发。实例成员“参数”无法在初始化程序中访问。

class createParameterButtons extends StatelessWidget {
  final List<Parameter> parameters;
  final String unnknown;
  createParameterButtons({this.parameters, this.unnknown});
  final noOfButtons = parameters.length;
  final loopEnd = (noOfButtons / 7).truncate() + (noOfButtons % 7 < 5 ? 1 : 2);
  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      Text("a"),
    ],
    ),
}  }
猜想我发现我无法在无状态小部件中使用变量(尽管我可以在for循环中使用变量)。但是,为什么基于参数的最终结果不起作用?这是一般设计还是我做任何愚蠢的事情?
我知道,我可以将数组长度作为另一个参数发送,作为一种解决方法。但是我想了解这个问题。

最佳答案

它与调用构造函数时发生的事情的顺序有关。参数和noOfButtons都是字段,并且不一定要在另一个之前分配一个。如果要使用其他最终字段中的字段,则必须在初始化程序列表中进行操作。 https://dart.dev/guides/language/language-tour#initializer-list
因此,这应该工作:

class createParameterButtons extends StatelessWidget {
  final List<Parameter> parameters;
  final String unnknown;
  createParameterButtons({this.parameters, this.unnknown}) : noOfButtons = parameters.length, loopEnd = loopEnd = (noOfButtons / 7).truncate() + (noOfButtons % 7 < 5 ? 1 : 2);
  final noOfButtons;
  final loopEnd;
  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      Text("a"),
    ],
    ),
}  }

关于flutter - Flutter:在无状态小部件中,我收到 “The instance member ' xy',无法在初始化程序中对其进行访问。”在数组xy上使用长度时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63612646/

相关文章:

android - Flutter:SingleChildScrollView 内的 TabBarView

firebase - flutter 运行返回:评估项目 ':app' .“”> ASCII时发生问题

dart-io - 如何使用 "dart:io"更改文件日期属性(至少修改日期)?

java - 从内部类引用的局部变量必须是 final 或有效的 final

java - 在同一个 Scala 类上定义的抽象类和最终类

flutter - 如何在 Flutter 中检测虚拟键盘事件

android - 如何更新购物车中的项目数?

sqlite - 在flutter中将输出作为 “Instance of ' Future <dynamic >'”

dart - 在 flutter/dart-ui 中将 UInt8List 转换为图像

java - 匿名类中的最终变量