在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的样子:
我已经在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:首先在我的自定义模型中创建了我所做的事情,但是我不断收到此错误“状态错误:无元素”,该如何解决?感谢您阅读我冗长的帖子。感谢您的帮助!