如何在Flutter构造函数参数上使用@required注释?

时间:2018-04-17 17:36:32

标签: annotations widget flutter

当我用@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) {
    //...
  }
}

5 个答案:

答案 0 :(得分:17)

需要导入注释

在文件顶部添加

import 'package:flutter/foundation.dart';

应该修复它。

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

为了让Flutter开发人员更轻松,Flutter团队决定将meta包添加到Flutter SDK并在flutter/foundation.dart中重新导出。因此,flutter的注释与元数据包提供的注释完全相同,您也可以metapubspec.yaml中的依赖项添加package:flutter/...,并根据需要从那里导入注释。如果您希望在AngularDart和Flutter之间重用代码,这是首选方法,因为从printf("%d\n", s); 导入的代码无法在Dart Web应用程序中使用。

答案 1 :(得分:8)

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

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

答案 2 :(得分:0)

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

import 'package:meta/meta.dart';

如果您的代码包含上面的代码,而您遇到错误,请检查pubspec.yaml文件:

dependencies:
  flutter:
    sdk: flutter

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

pub upgrade

答案 3 :(得分:0)

我发现,如果您的班级有一个名为required的变量,则会发生此问题

class TextFieldInputWidget extends StatefulWidget {
  final String title;
  final bool required;

  const TextFieldInputWidget({@required this.title, this.required = false});

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

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

答案 4 :(得分:-1)

大写R-> @必需

import 'package:meta/meta.dart';

class SubAppBar extends Container{
  final BuildContext context;
  final int noOfVendor;

   SubAppBar({Key key,@Required('context must') this.context,@Required('no of vendor must') this.noOfVendor})