Arrays 如何编辑列表中自定义模型的属性(颤振/省道)?
我在flutter应用程序中有这个日志食物功能。有两种添加食物的方法(1)是添加到列表中,这相当简单,因为我所要做的就是listName.add(ModelName(properties:value));然而,(2)方法是编辑初始列表的索引,如下所示:Arrays 如何编辑列表中自定义模型的属性(颤振/省道)?,arrays,list,flutter,dart,Arrays,List,Flutter,Dart,我在flutter应用程序中有这个日志食物功能。有两种添加食物的方法(1)是添加到列表中,这相当简单,因为我所要做的就是listName.add(ModelName(properties:value));然而,(2)方法是编辑初始列表的索引,如下所示: import 'package:thesis/foodAPICalls/food.dart'; class MealsListData { int id; String imagePath; String titleTxt; S
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,
meals: '',
date: DateTime.now(),
startColor: "#738AE6",
endColor: "#5C5EDD",
),
MealsListData(
id: 3,
imagePath: 'assets/fitness_app/snack.png',
titleTxt: 'Snack',
totalCalories: 0,
meals: 'Recommend: 800 kcal',
startColor: "#FE95B6",
endColor: "#FF5287",
),
MealsListData(
id: 4,
imagePath: 'assets/fitness_app/dinner.png',
titleTxt: 'Dinner',
totalCalories: 0,
meals: 'Recommend: 703 kcal',
startColor: "#6F72CA",
endColor: "#1E1466",
),
];
}
在添加食物屏幕内,我创建了一个冗长的嵌套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++,
imagePath: 'assets/fitness_app/breakfast.png',
titleTxt: _foodTypeInput,
totalCalories: totalCalories,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#FA7D82",
endColor: "#FFB295",
));
Navigator.pop(context);
}
break;
case 'Lunch':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/lunch.png',
titleTxt: _foodTypeInput,
totalCalories: 590,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#738AE6",
endColor: "#5C5EDD",
));
Navigator.pop(context);
}
break;
case 'Snack':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/snack.png',
titleTxt: _foodTypeInput,
totalCalories: 200,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#FE95B6",
endColor: "#FF5287",
));
Navigator.pop(context);
}
break;
case 'Dinner':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/dinner.png',
titleTxt: _foodTypeInput,
totalCalories: 600,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#6F72CA",
endColor: "#1E1466",
));
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);
}
}
void\u submitData(){
List mealEntry=MealsListData.mealEntry;
if(_formKey.currentState.validate()){
_formKey.currentState.save();
两倍总热量=0;
印刷品(营养品、食品、长度);
对于(int i=0;iid.id==idcount,orElse:null);
if(newEntry!=null){
newEntry.totalcarries=总卡路里;
新条目。膳食=食物;
newEntry.nutritionix=nutritionix;
Navigator.pop(上下文);
}else{}
}
印刷(测量);
打印(食物类型输入);
印刷品;
打印(_selectedDate);
}
}
对于方法2:我所做的是为我的自定义模型创建firstWhere,但是我不断得到这个错误“Bad state:No element”我如何解决这个问题?感谢您阅读我的长篇文章。我感谢您的帮助!Woops,原来我没有使用传递给小部件的数据。我应该使用Widget.idcount而不仅仅是idcount
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++,
imagePath: 'assets/fitness_app/breakfast.png',
titleTxt: _foodTypeInput,
totalCalories: totalCalories,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#FA7D82",
endColor: "#FFB295",
));
Navigator.pop(context);
}
break;
case 'Lunch':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/lunch.png',
titleTxt: _foodTypeInput,
totalCalories: 590,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#738AE6",
endColor: "#5C5EDD",
));
Navigator.pop(context);
}
break;
case 'Snack':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/snack.png',
titleTxt: _foodTypeInput,
totalCalories: 200,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#FE95B6",
endColor: "#FF5287",
));
Navigator.pop(context);
}
break;
case 'Dinner':
{
mealEntry.add(MealsListData(
id: idcount++,
imagePath: 'assets/fitness_app/dinner.png',
titleTxt: _foodTypeInput,
totalCalories: 600,
meals: _food,
date: _selectedDate,
nutritionix: nutritionix,
startColor: "#6F72CA",
endColor: "#1E1466",
));
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);
}
}