相关疑难解决方法(0)

不可为空的实例字段必须被初始化

class Foo {
  int count; // Error
  void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我已经在bar方法中初始化它时看到错误?如果count被标记为 ,我可以理解这个错误final

dart dart-null-safety

12
推荐指数
2
解决办法
2万
查看次数

错误:实例成员...无法在初始化程序中访问

为什么这段代码:

class _SequentialTextPageState {
  String jsonTextPref = 'seqtext';
  int jsonTextSuff = 10;
  String jsonText = jsonTextPref + jsonTextSuff.toString();
}
Run Code Online (Sandbox Code Playgroud)

产生这些错误?

Error: The instance member 'jsonTextPref' can't be accessed in an initializer.

Error: The instance member 'jsonTextSuff' can't be accessed in an initializer.
Run Code Online (Sandbox Code Playgroud)

在我看来,String和之间的串联int是正确的吗?

dart

10
推荐指数
2
解决办法
1万
查看次数

空安全颤振上命名参数不能以下划线开头

我不确定为什么会失败?如何解决这个问题?

根据此 https://dart.dev/tools/diagnostic-messages#private_Optional_parameter ,它被告知要使它们不带下划线。但这使得变量成为公共变量而不是私有变量?

class ContactElement extends StatelessWidget {


  final IconData _icon;
  final String _heading;
  final String _describer;

  const ContactElement({
    Key? key,
    required this._icon,
    required this._heading,
    required this._describer,
  }) : super(key: key);
}
Run Code Online (Sandbox Code Playgroud)

请帮忙

dart flutter

5
推荐指数
1
解决办法
4182
查看次数

在参数列表和初始值设定项列表中分配值之间的区别

class A {
  A(int value);
}

class B extends A{
  final int foo;

  B.one(this.foo) : super(foo); // Works

  B.two(int foo) : foo = foo, super(this.foo); // Doesn't work
}
Run Code Online (Sandbox Code Playgroud)

在 中B.one,我可以轻松地将 的值传递给footosuper但在 中B.two,我不能这样做。在这两种情况下,该字段foo都是在调用之前分配的super,在一种情况下它有效,在另一种情况下它失败。所以,问题是在构造函数中什么时候创建字段。

dart

4
推荐指数
1
解决办法
1908
查看次数

在 Dart 中使用 Setter 和构造函数

如何从 Dart 的默认构造函数中使用私有实例变量的 setter?

给定示例类:

class A {
  String name;
  int _age;

  int get age => _age;

  set age(age) {
    _age = age ?? 0;
  }

  A(this.name, this._age);
}
Run Code Online (Sandbox Code Playgroud)

我如何使用这个构造函数来遍历该set age()函数?除了使用 a 之外还有什么办法factory吗?我想做这样的事情

A(this.name, newAge): age = newAge;
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误,迫使我只从构造函数中设置实例变量,这让我只需复制设置器:

A(this.name, newAge): _age = newAge ?? 0;
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些东西,或者这对于 dart 来说是不可能的?

dart flutter

3
推荐指数
1
解决办法
2096
查看次数

为什么会发生此错误:无法在初始化程序中访问实例成员“*”。”?

我来自 python 背景,试图学习类似 java 的语言。这是用 dart 编写的,用于颤振。

当我尝试运行以下命令时出现错误。

class _MyGameState extends State<MyGame> {
  int _numberOfTeams = 4;

  List<int> _teamPoints = List.filled(_numberOfTeams, 0);
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

无法在初始化程序中访问实例成员“_numberOfTeams”。尝试用不同的表达式替换对实例成员的引用

为什么会这样,如何避免呢?(显然,这个例子被简化了,我可以很容易地简单地省略变量_numberOfTeams并规避问题,但这不是重点。)

(这里有很多非常相似的问题。这些问题的所有答案都提供了解决特定问题的方法,但不是“为什么”会出现问题或在用这种常见的语言写作时如何思考。一些相关的搜索我可以查看的词,或者指南/教程/文章的链接将不胜感激:)

initialization instance dart flutter

1
推荐指数
1
解决办法
327
查看次数

如何在构造函数体中初始化不可为空的成员?

我已经以这种方式在 Dart 中创建了我的类,但是我Non-nullable instance field 'text' must be initialized. Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.想知道是否有一种方法可以以“Python”风格来创建这种类,在此先感谢您。

class Lexer {
  String _text;
  int _pos;
  String _current_char;

  Lexer(String text) {
    this._text = text;
    this._pos = -1;
    this._current_char = '';
    this.advance();
  }

  void advance() {
    this._pos++;
    this._current_char = this._pos < this._text.length ? this._text[this._pos] : '';
  }
}
Run Code Online (Sandbox Code Playgroud)

dart

0
推荐指数
1
解决办法
2233
查看次数