首页 > 解决方案 > 颤振吸气剂问题

问题描述

我的代码有问题

    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”。尝试添加初始化表达式,或在此构造函数中添加字段初始化程序,或将其标记为“延迟”。dartnot_initialized_non_nullable_instance_field 必须初始化不可为空的实例字段“_name”。尝试添加初始化表达式,或在此构造函数中添加字段初始化程序,或将其标记为“延迟”。dartnot_initialized_non_nullable_instance_field 必须初始化不可为空的实例字段“_id”。尝试添加初始化表达式,或在此构造函数中添加字段初始化程序,或将其标记为“延迟”。dartnot_initialized_non_nullable_instance_field

错误请有人帮忙。

标签: androidfirebaseflutterdart

解决方案


您可以通过 2 种方式修复错误:

选项1:

确保字段不被分配到null

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";
  }
}

选项 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]; //snapshot or snapshot.data[NAME] may be null
    _email = snapshot?.data[EMAIL];
    _id = snapshot?.data[ID];
  }
}

在您的代码中,_name是不可为空的字段,这意味着它需要使用某个值进行初始化,并且将来也不能将其分配给 null 或任何可以为 null 的变量。否则_name应明确声明为空。修复可以确保满足此规则


推荐阅读