我的代码有问题
import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel {
static const NAME = 'name';
static const EMAIL = 'email';
static const ID = 'id';
String _name;
String _email;
String _id;
//getters
String get name => _name;
String get email => _email;
String get id => _id;
UserModel.fromSnapshot(DocumentSnapshot snapshot){
_name = snapshot.data[NAME];
_email = snapshot.data[EMAIL];
_id = snapshot.data[ID];
}
}
我收到了这个错误。
<块引用>不可为空的实例字段“_email”必须被初始化。尝试添加 初始化表达式,或在此添加字段初始化器 构造函数,或标记它 'late'.dartnot_initialized_non_nullable_instance_field 不可为空 必须初始化实例字段“_name”。尝试添加初始化程序 表达式,或在此构造函数中添加字段初始值设定项,或标记它 'late'.dartnot_initialized_non_nullable_instance_field 不可为空 必须初始化实例字段“_id”。尝试添加初始化程序 表达式,或在此构造函数中添加字段初始值设定项,或标记它 '晚'.dartnot_initialized_non_nullable_instance_field
Error 请有人帮忙。
答案 0 :(得分:0)
您可以通过两种方式修复错误:
选项 1:
确保不会将字段分配给 <input type="text" id="myjarinput" onkeyup="run()"><br>
<div id="outjar"></div>
<script type="text/javascript">
var run = function() {
var injar = document.getElementById("myjarinput").value;
var outjar = document.getElementById("outjar");
if (injar.charAt(0) == "x") {
outjar.innerHTML = 'begins with x';
} else {
outjar.innerHTML = '';
}
}
</script>
null
选项 2:
将字段声明为可空,以便将来可以将它们分配为空
import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel {
static const NAME = 'name';
static const EMAIL = 'email';
static const ID = 'id';
String _name = NAME;
String _email = EMAIL;
String _id = ID;
//getters
String get name => _name;
String get email => _email;
String get id => _id;
UserModel.fromSnapshot(DocumentSnapshot snapshot){
_name = snapshot?.data[NAME] ?? "Predefined Name";
_email = snapshot?.data[EMAIL] ?? "Predefined email";
_id = snapshot?.data[ID] ?? "Predefined Data";
}
}
在您的代码中,import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel {
static const NAME = 'name';
static const EMAIL = 'email';
static const ID = 'id';
String? _name = NAME;
String? _email = EMAIL;
String? _id = ID;
//getters
String? get name => _name;
String? get email => _email;
String? get id => _id;
UserModel.fromSnapshot(DocumentSnapshot snapshot){
_name = snapshot?.data[NAME]; //snapshot or snapshot.data[NAME] may be null
_email = snapshot?.data[EMAIL];
_id = snapshot?.data[ID];
}
}
是不可为空的字段,这意味着它需要使用某个值进行初始化,并且将来也不能将其分配给 null 或任何可以为 null 的变量。否则 _name
应明确声明为空。修复可以是确保满足此规则
答案 1 :(得分:0)
您已将字段定义为:
String _name
这意味着 _name
必须 是字符串,不能是 null
。但是,在您的构造函数中,您没有为 _name
赋值,这意味着可以构造一个 User
,其中 _name
未设置(并且将为空),因此无效。< /p>
您要么需要确保在构造函数初始值设定项中分配了 _name
,或者您应该将字段定义为 String?
(这意味着它们可以是 String
或 null
) .
您可以在 https://dart.dev/null-safety 中找到有关 Dart 中不可空性的更多信息。