uuu*_*uuk 1 initialization instance dart flutter
我来自 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并规避问题,但这不是重点。)
(这里有很多非常相似的问题。这些问题的所有答案都提供了解决特定问题的方法,但不是“为什么”会出现问题或在用这种常见的语言写作时如何思考。一些相关的搜索我可以查看的词,或者指南/教程/文章的链接将不胜感激:)
当你是一个对象的内部,而不是在一个方法的属性_numberOfTeams,并_teamPoints不能依赖于其他属性被创建,因为他们可能还没有被初始化。看下面的例子,是的,这有点傻,但编译器的情况是一样的,它不能保证一个在另一个之前创建。
List<int> _teamPoints = List.filled(_numberOfTeams, 0);
int _numberOfTeams = _teamPoints.length;
Run Code Online (Sandbox Code Playgroud)
使依赖值静态:
List<int> _teamPoints = List.filled(_numberOfTeams, 0);
int _numberOfTeams = _teamPoints.length;
Run Code Online (Sandbox Code Playgroud)
class TeamList {
int _numberOfTeams;
List<int> _teamPoints;
TeamList(
this._numberOfTeams,
) : _teamPoints = List.filled(_numberOfTeams, 0);
}
Run Code Online (Sandbox Code Playgroud)
State你可以@overrideinitStateclass _HomeState extends State<Home> {
int _numberOfTeams = 4;
late List<int> _teamPoints;
@override
void initState() {
super.initState();
_teamPoints = List.filled(_numberOfTeams, 0)
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢方法 2 或 3,因为它们仍然是您的对象内部状态的实例,您只需稍微推迟它的创建。
dart.dev 中有更多信息
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |