当我用@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) {
//...
}
}
答案 0 :(得分:17)
需要导入注释
在文件顶部添加
import 'package:flutter/foundation.dart';
应该修复它。
DartAnalyzer理解的注释由meta包提供。
为了让Flutter开发人员更轻松,Flutter团队决定将meta
包添加到Flutter SDK并在flutter/foundation.dart
中重新导出。因此,flutter的注释与元数据包提供的注释完全相同,您也可以meta
向pubspec.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})