【问题标题】:Non-nullable instance field must be initialized (data persistence)不可为空的实例字段必须被初始化(数据持久化)
【发布时间】:2022-12-03 12:07:56
【问题描述】:

我想更正代码的错误。 我的问题是:

必须初始化不可为 null 的实例字段。

【问题讨论】:

    标签: flutter android-studio dart


    【解决方案1】:

    这是我们在 Dart/Flutter 中执行此操作的常规方式:

        class Course {
          final int id;
          final String name;
          final String content;
          final int hours;
          
          const Course({
            this.id = 0;
            this.name = '';
            this.content = '';
            this.hours = 0;
          });
          
          factory Course.fromMap<String, dynamic> data) {
            return Course(
              id: data['id'] as int ?? 0,
              name: data['name'] as String ?? '',
              content: data['content'] as String ?? '',
              hours: data['hours'] as int ?? 0,
            );
          }
        }
    
        ...
        
        
        final course = Course.fromMap(data);
        
    

    我们通常不会为数据类使用下划线(私有)变量,因为 Dart 会自动提供 getter 来通过点符号访问字段。

    final name = course.name;
    

    【讨论】:

      【解决方案2】:

      不可为 null 的字段应该在对象创建期间初始化,甚至在执行构造函数主体之前。为此,请使用像这样的初始化列表

      Course(dynamic obj): _id = obj['id'], _name = obj['name'] {}
      

      【讨论】:

        猜你喜欢
        • 2021-07-06
        • 1970-01-01
        • 2021-09-14
        • 2021-09-24
        • 2021-10-11
        • 2021-08-27
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多