颤振吸气剂问题

时间:2021-05-16 13:46:16

标签: android firebase flutter dart

我的代码有问题

    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 请有人帮忙。

2 个答案:

答案 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?(这意味着它们可以是 Stringnull) .

您可以在 https://dart.dev/null-safety 中找到有关 Dart 中不可空性的更多信息。