dart Flutter:类型'Null'不是类型'bool'的子类型

jtw3ybtb  于 2022-12-06  发布在  Flutter
关注(0)|答案(2)|浏览(216)

我尝试在单击复选框时将其从false更改为true,但它返回null不是bool类型子类型。
下面是我的代码:

// my function for checkbox
  void checkBoxChanged(bool? value, int index) {
    setState(() {
      db.folderTask[index].isChecked = !db.folderTask[index].isChecked;
    });
    db.updateDatabase();
  }

错误在这里:

class FolderTask {
  String? name;
  bool isChecked = false;
  FolderTask({required this.name, required this.isChecked});
  factory FolderTask.fromJson(json) {
    return FolderTask(name: json['name'], isChecked: json['isChecked']);
  }
  Map<String, dynamic> toJson() => {
        "name": name,
        "task": [isChecked]
      };
}
l7wslrjt

l7wslrjt1#

您可以在空情况下提供默认值,例如:

return FolderTask(name: json['name'], isChecked: json['isChecked']??false);
3ks5zfa0

3ks5zfa02#

问题似乎出在FolderTask类的isChecked属性上。在FolderTask类的构造函数中,您已按要求声明了isChecked参数,但在fromJson工厂方法中,当从JSON对象创建新的FolderTask示例时,您没有为isChecked属性提供值。
若要修正此问题,您可以从建构函式的isChecked参数中移除必要的保留字,或在fromJson方法中提供isChecked属性的预设值。
以下示例说明如何更新FolderTask类以解决此问题:

String? name;
  bool isChecked = false;

  FolderTask({required this.name}); // remove the required keyword from isChecked

  factory FolderTask.fromJson(json) {
    return FolderTask(
      name: json['name'],
      isChecked: json['isChecked'] ?? false, // provide a default value for isChecked
    );
  }

  Map<String, dynamic> toJson() => {
        "name": name,
        "task": [isChecked]
      };
}

或者,您可以在建构函式中提供isChecked属性的预设值,如下所示:

String? name;
  bool isChecked = false;

  FolderTask({required this.name, this.isChecked = false}); // provide a default value for isChecked

  factory FolderTask.fromJson(json) {
    return FolderTask(
      name: json['name'],
      isChecked: json['isChecked'],
    );
  }

  Map<String, dynamic> toJson() => {
        "name": name,
        "task": [isChecked]
      };
}

这两种方法都可以解决此问题,并允许您切换FolderTask类的isChecked属性,而不会遇到“null不是bool类型的子类型”错误。
我希望这对你有帮助!

相关问题