【问题标题】:How to use @required annotation on Flutter constructor parameters?如何在 Flutter 构造函数参数上使用 @required 注解?
【发布时间】:2018-09-27 18:49:14
【问题描述】:

当我使用@required IntelliJ 注释构造函数参数时显示错误:

注解必须是 const 变量引用或 const 构造函数调用

谁能建议我做错了什么?

class StatusBar extends StatelessWidget {
  final String text;

  const StatusBar({Key key, @required this.text})
      : assert(text != null),
        super(key: key);

  @override
  Widget build(BuildContext context) {
    //...
  }
}

【问题讨论】:

    标签: annotations widget flutter


    【解决方案1】:

    需要导入注解

    在文件顶部添加

    import 'package:flutter/foundation.dart';
    

    应该修复它。

    DartAnalyzer 理解的注解由 meta 包提供。

    为了方便 Flutter 开发者,Flutter 团队决定将 meta 包添加到 Flutter SDK 并在 flutter/foundation.dart 中重新导出。因此,flutter 的注解与 meta 包提供的注解完全相同,您也可以将 meta 添加到 pubspec.yaml 中的依赖项中,并根据需要从那里导入注解。如果您想在 AngularDart 和 Flutter 之间重用代码,这是首选方式,因为从 package:flutter/... 导入的代码不能在 Dart Web 应用程序中使用。

    【讨论】:

    • 很好的答案,可以避免在 web 和 android 上同时使用 dart 存储库时出现问题。
    • 我正在使用安卓工作室。如果我没有传递变量,为什么它不显示错误
    【解决方案2】:

    请在源文件开头导入包“meta”。

    // @required is defined in the meta.dart package
    import 'package:meta/meta.dart';
    

    【讨论】:

      【解决方案3】:

      您的代码是否包含以下代码?

      import 'package:meta/meta.dart';
      

      如果您的代码包含上述代码并且出现错误,请检查pubspec.yaml 文件:

      dependencies:
        meta: ^1.4.0
        flutter:
          sdk: flutter
      

      注意上述示例中的 meta 部分。

      如果错误仍然存​​在,请在 CLI 上尝试以下操作:

      pub upgrade
      

      【讨论】:

      • 您的解决方案完全增加了新价值。首先,import 'package:meta/meta.dart'; 解决方案已经由某人提供,其次,在导入meta.dart 包时,您额外编写的内容没有任何意义,因为您没有在pubspec.yaml 文件中使用meta。不知道你是如何获得 2 票的。
      【解决方案4】:

      我发现如果你的类有一个名为 required 的变量,就会发生这个问题

      class TextFieldInputWidget extends StatefulWidget {
        final String title;
        final bool required;
      
        const TextFieldInputWidget({@required this.title, this.required = false});
      
        @override
        _TextFieldInputWidget createState() => _TextFieldInputWidget();
      }
      

      只需将变量名称更改为其他名称,例如“require”

      【讨论】:

        【解决方案5】:

        如果您启用了 null 安全,则 required 关键字是实际关键字而不是 @ 表示法:

        DateTime startDate;
          YourWidget(required this.startDate);
        

        【讨论】:

          猜你喜欢
          • 2018-03-27
          • 2019-12-19
          • 2011-05-11
          • 2016-11-26
          • 2017-02-23
          • 1970-01-01
          • 2017-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多