Flutter 将对象添加到对象列表

时间:2021-05-11 19:05:18

标签: flutter dart

我有一个名为 RecipeModel 的模型,它基本上包含有关食谱的详细信息(recipeName、recipeAuthor 等)。

现在我希望用户将任何食谱标记为最喜欢的,这基本上是一个 RecipeModel 列表。

这是我的FavoriteRecipeModel

class FavoriteRecipeModel {
  List<RecipeModel>? recipeList;
  FavoriteRecipeModel({this.recipeList});
  factory FavoriteRecipeModel.fromJson(Map<String, dynamic> json) =>
      FavoriteRecipeModel(
        recipeList: json["recipeList"] == null ? null : json["recipeList"],
      );
  Map<String, dynamic> toJson() => {
        "recipe": recipeList == null ? null : recipeList,
      };
}

这是我打算在我的 recipe_details_screen 中使用它的方式:

class RecipeDetailsScreen extends StatefulWidget {
  final RecipeModel? recipe;

  RecipeDetailsScreen({required this.recipe});

  @override
  _RecipeDetailsScreenState createState() => _RecipeDetailsScreenState();
}

class _RecipeDetailsScreenState extends State<RecipeDetailsScreen> {
  FavoriteRecipeModel favoriteRecipeList = FavoriteRecipeModel();
  void addToFavorites() {
    favoriteRecipeList.recipeList!.add(widget.recipe!);
  }
  ......some other widgets
}

问题是每当我尝试调用 addToFavorites 方法时都会收到此错误:

Null check operator used on a null value

我的计划是将已传递到此页面的 recipeModel 添加到列表中,然后使用 Hive 将列表保存在本地存储中的 json 文件中。

但我不明白如何解决错误。

更新 1:

我将模型更改为

List<RecipeModel>? recipeList = [];

在我的 details_screen 中:

FavoriteRecipeModel favoriteRecipeList = FavoriteRecipeModel(); favoriteRecipeList.recipeList!.add(widget.recipe!);

但仍然得到空检查错误

1 个答案:

答案 0 :(得分:2)

您正在尝试向不存在的列表添加值。

List<RecipeModel>? recipeList;

当你打电话时:

favoriteRecipeList.recipeList!.add(widget.recipe!);

recipeList 未初始化。

你可以默认为空:

List<RecipeModel>? recipeList = [];

或者在实例化类时传递一个空列表:

List<RecipeModel> emptyList = [];
FavoriteRecipeModel favoriteRecipeList = FavoriteRecipeModel(emptyList);