【问题标题】:Dart: Error: Setter not found (when defining constructor of a class)Dart:错误:未找到 Setter(定义类的构造函数时)
【发布时间】:2019-07-11 00:39:55
【问题描述】:

我使用这个非常简单的构造函数得到以下错误:

class MyHomePage extends StatefulWidget {
  MyHomePage(String title, String lang, {Key key}) {
    this.title = title;
    this.lang = lang.substring(0,2).toLowerCase();
    super(key: key);
  }


  final String title;
  final String lang;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

错误信息:

Compiler message:                                                       
lib/main.dart:34:10: Error: Setter not found: 'title'.                  
    this.title = title;                                                 
         ^^^^^                                                          
lib/main.dart:35:10: Error: Setter not found: 'lang'.                   
    this.lang = lang.substring(0,2).toLowerCase();                      
         ^^^^                                                           
lib/main.dart:36:5: Error: Can't use 'super' as an expression.          
To delegate a constructor to a super constructor, put the super call as an initializer.
    super(key: key);                                                    
    ^                                                                   
lib/main.dart:34:10: Error: The setter 'title' isn't defined for the class 'MyHomePage

这是为什么呢?我不明白那是什么意思。 是否有关于如何在 dart 中定义构造函数的全面解释?我在 dart.dev 网站上找不到。

编辑: 修改后代码如下:

class MyHomePage extends StatefulWidget {
  MyHomePage(String title, String lang, {Key key}) {
    title = title;
    lang = lang.substring(0,2).toLowerCase();
    super(key: key);
  }

  final String title;
  final String lang;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

我有以下来自编译器的抱怨:

Compiler message:                                                       
lib/main.dart:36:5: Error: Can't use 'super' as an expression.          
To delegate a constructor to a super constructor, put the super call as an initializer.
    super(key: key);                                                    
    ^                                                                   
lib/main.dart:39:16: Error: Final field 'title' is not initialized.     
Try to initialize the field in the declaration or in every constructor. 
  final String title;                                                   
               ^^^^^                                                    
lib/main.dart:40:16: Error: Final field 'lang' is not initialized.      
Try to initialize the field in the declaration or in every constructor. 
  final String lang;     

【问题讨论】:

    标签: flutter dart constructor this super


    【解决方案1】:

    在构造函数中初始化final变量有特殊的语法,在这里回答:

    https://stackoverflow.com/a/42864979/64435

    使用这种语法,工作代码是:

    class MyHomePage extends StatefulWidget {
      MyHomePage(String title, String lang, {Key key})
          : this.title = title,
            this.lang = lang.substring(0, 2).toLowerCase(),
            super(key: key);
    
      final String title;
      final String lang;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    

    【讨论】:

    • 但是我贴了,抱歉我没有贴这部分,但是我贴了
    • 我刚刚使用MyHomePage 小部件的完整代码编辑了我的问题。
    • 现在可以使用完整的代码了,我看看发生了什么,并编辑了我的答案
    • 谢谢。我编辑了我的代码(删除了构造函数中的this.)。但在这种情况下,我会遇到错误(不同的错误)。我错过了什么吗?
    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多