如何在列表中(Flutter / Dart)编辑自定义模型的属性?

在flutter应用程序中,我具有此日志食物功能。有两种添加食物的方法(1)添加到列表中很容易,因为我要做的就是listName.add(ModelName(properties:value);但是,(2)方法是通过编辑初始列表如下所示:

import 'package:thesis/foodAPICalls/food.dart';

class MealsListData {
  int id;
  String imagePath;
  String titleTxt;
  String startColor;
  String endColor;
  DateTime date;
  Nutritionix nutritionix;
  String meals;
  double totalCalories;

  MealsListData({
    this.id,this.imagePath = '',this.titleTxt = '',this.startColor = "",this.endColor = "",this.date,this.nutritionix,this.meals,this.totalCalories = 0,});

  static List<MealsListData> mealEntry = [
     MealsListData(
      id: 1,imagePath: 'assets/fitness_app/breakfast.png',titleTxt: 'Breakfast',totalCalories:  0,meals: '',date: DateTime.now(),startColor: "#FA7D82",endColor: "#FFB295",),MealsListData(
      id: 2,imagePath: 'assets/fitness_app/lunch.png',titleTxt: 'Lunch',totalCalories: 0,startColor: "#738AE6",endColor: "#5C5EDD",MealsListData(
      id: 3,imagePath: 'assets/fitness_app/snack.png',titleTxt: 'snack',meals: 'Recommend: 800 kcal',startColor: "#FE95B6",endColor: "#FF5287",MealsListData(
      id: 4,imagePath: 'assets/fitness_app/dinner.png',titleTxt: 'Dinner',meals: 'Recommend: 703 kcal',startColor: "#6F72CA",endColor: "#1E1466",];
}

这就是UI-Wise的样子:

如何在列表中(Flutter / Dart)编辑自定义模型的属性?

我已经在UI中创建了一个将列表ID传递到我的addFood()屏幕中的函数

onTap:(){
 Navigator.push( context,MaterialPageRoute
(builder: (context) => AddFood(id: mealsListData.id,)),);
},

在添加的“食物”屏幕中,我创建了一个冗长的嵌套if-else,以检查用户是否尝试使用方法1或方法2添加

 void _submitData() {
  List<MealsListData> mealEntry = MealsListData.mealEntry;
    if (_formKey.currentState.validate()) {
      _formKey.currentState.save();
      double totalCalories = 0;
      print(nutritionix.food.length);
      for (int i = 0; i < nutritionix.food.length; i++) {
        totalCalories = nutritionix.food[i].calories + totalCalories;
      }
      print(totalCalories);

      if (idcount == null) { // WAY 1 (adding to initial List)
        switch (_foodTypeInput) {
          case 'Breakfast':
            {
              mealEntry.add(MealsListData(
                id: idcount++,titleTxt: _foodTypeInput,totalCalories: totalCalories,meals: _food,date: _selectedDate,nutritionix: nutritionix,));
              Navigator.pop(context);
            }
            break;

          case 'Lunch':
            {
              mealEntry.add(MealsListData(
                id: idcount++,totalCalories: 590,));
              Navigator.pop(context);
            }
            break;

          case 'snack':
            {
              mealEntry.add(MealsListData(
                id: idcount++,totalCalories: 200,));
              Navigator.pop(context);
            }
            break;

          case 'Dinner':
            {
              mealEntry.add(MealsListData(
                id: idcount++,totalCalories: 600,));
              Navigator.pop(context);
            }
            break;
        }
      } else{ // WAY 2 editing index based on id
        var newEntry = mealEntry.firstWhere((id) => id.id == idcount,orElse: null );
        if(newEntry!=null){
        newEntry.totalCalories = totalCalories;
        newEntry.meals= _food;
        newEntry.nutritionix= nutritionix;
        Navigator.pop(context);
        } else{}

      }

      print(mealEntry);
      print(_foodTypeInput);
      print(_food);
      print(_selectedDate);
    }
  }

对于方式2:首先在我的自定义模型中创建了我所做的事情,但是我不断收到此错误“状态错误:无元素”,该如何解决?感谢您阅读我冗长的帖子。感谢您的帮助!

daguai123456 回答:如何在列表中(Flutter / Dart)编辑自定义模型的属性?

糟糕,事实证明我没有使用传递给Widget的数据。我应该使用widget.idcount而不只是idcount。

本文链接:https://www.f2er.com/3130383.html

大家都在问