【问题标题】:Non-nullable instance field 'id' must be initialized必须初始化不可为空的实例字段“id”
【发布时间】:2022-01-25 20:21:04
【问题描述】:

谁能帮我解决这个问题?我是 Flutter 的新手,我正在尝试编写与课程视频完全一样的代码,但我遇到了这个问题: 2. 如何更改“状态”项可选?

class Task {
 int id;
 String title;
 DateTime date;
 String priority;
 int status; // 0 - Incomplete, 1 - Complete

 Task({this.title, this.date, this.priority, this.status});
 Task.withId({this.id, this.title, this.date, this.priority, this.status});

【问题讨论】:

    标签: flutter class null required


    【解决方案1】:

    这是一个零安全问题

    解决方案

    使 int 可以为空

    int? id; // preferred
    

    调用构造函数时使用 required 关键字

     Task({required this.id})
    

    将默认值初始化为id

    int id = 0;
    

    【讨论】:

      【解决方案2】:

      当你有命名参数构造函数时

      Task({...});
      

      并且您没有在变量前面指定required 关键字,该变量是可选的。但是,由于您的代码是以 null 安全的方式编写的,因此您必须为其赋值或以其他方式将其分配为 null(在这种情况下这是非法的)。

      可为空的变量
      如果你希望你的值可以赋值为空,你可以这样写:

      int? status;
      

      那么你必须记得在使用它之前检查变量是否为空。

      默认值
      另一种方法是在构造函数中使用默认值:

      Task({..., this.status = 0});
      

      必填值
      或者你可以强制开发者给它一个值:

      Task({..., required this.status});
      

      达茨
      另一种方法是使用 Dartz 包中的 Option 变量:

      import 'package:dartz/dartz.dart';
      ...
      Option<int> status;
      Task({..., required this.status});
      

      那么你可以传递 none() 或 some(1) 作为状态。

      Task(..., status: none());
      Task(..., status: some(0));
      

      【讨论】:

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