Dictionary 颤振:将两个列表映射到另一个列表

Dictionary 颤振:将两个列表映射到另一个列表,dictionary,flutter,Dictionary,Flutter,这里我只映射了一个列表,但是我想把两个列表映射在一起,这样日期就会出现,之后的照片就像这里的图片一样。所以,我想知道如何制作列表1和日期的地图,这是我拥有的两个列表。他们将是唯一一个列表,我可以用在脚手架的身体 List _list1=[一餐(dis:'it is a chick sandwich',name:'chekin filla'), 餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”), 餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”), 餐

这里我只映射了一个列表,但是我想把两个列表映射在一起,这样日期就会出现,之后的照片就像这里的图片一样。所以,我想知道如何制作列表1和日期的地图,这是我拥有的两个列表。他们将是唯一一个列表,我可以用在脚手架的身体

List _list1=[一餐(dis:'it is a chick sandwich',name:'chekin filla'),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“ChekinFilla”);
列表日期=[日期(日期:2018年9月20日),日期(日期:2018年9月21日),日期(日期:2018年9月22日),
日期(日期:2018年9月23日)
,日期(日期:2018年9月24日);
映射列表2={dates,_list1};
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本('listviewww'),
),
正文:
ListView(子项:_list2
.map((元素){
返回列(
儿童:[
容器(
孩子:文本(‘我的名字叫阿亚阿亚’),
),
容器(
边距:所有边缘集(9.0),
约束:新建框约束。展开(高度:300.0),
装饰:新盒子装饰(
边框:新边框。全部(颜色:Colors.blueAccent),
borderRadius:borderRadius.水平(左:半径.圆形(30.0),右:半径.圆形(30.0)),
图片:新装饰图片(图片:new AssetImage('assets/food.jpg'),fit:BoxFit.cover,),
填充:仅限边缘设置(底部:10.0),
儿童:中心(
子:文本('hellfffffffffo')
)
)
], 
);  
})托利斯先生()
) 
);

根据我收集的信息,您有两个列表,每个列表都有相同的数字元素。第一个列表描述项目(名称、显示等),第二个列表是日期

您试图在列表中显示此信息,但无法,因为您有两个信息列表

最简单的答案是将两个列表合并为一个列表,即将项目描述和日期合并。您可以创建一个简单的类,该类将日期和描述作为字段

从理论上讲,您可以使用元组库并组成两位信息的元组,但这似乎没有必要,而且创建数据对象更简洁


如果我误解了你的问题,请随时告诉我。我可以看到的另一种可能性是,你试图制作一个以日期为标题的列表,每个日期下都有一个或多个项目。

我猜你想这样做。检查下面,你可以(你需要复制并粘贴它)

班级餐{
餐({this.dis,this.name});
最终字符串dis;
最后的字符串名;
}
上课日期{
日期({this.dat});
最终字符串dat;
}
void main(){
列表_列表1=[
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“chekin filla”),
餐(dis:“这是一个鸡肉三明治”,名字:“ChekinFilla”)
];
列表日期=[
日期(日期:2018年9月20日),
日期(日期:2018年9月21日),
日期(日期:2018年9月22日),
日期(日期:2018年9月23日),
日期(日期:2018年9月24日)
];
//这是将放置映射的位置
Map MealSearchDay=新地图();
//在这里,日期和膳食之间的关系就完成了
对于(变量i=0;i
但是这还没有什么价值。你必须更好地理解对象、列表和地图之间的关系

检查下面的另一个示例,并在dartpad中运行它。对于每个日期,都有膳食,更容易查看。另一个改进是不使用日期作为文本

class Meal {
  Meal({this.dis, this.name});
  final String dis;
  final String name;
}

class MealDate {
  MealDate({this.date, this.meals});
  final DateTime date;
  final List<Meal> meals;
}

void main() {

  List<MealDate> mealsForEachDate = [
    MealDate(
      date: DateTime(2018, 9, 20),
      meals: [
        Meal(name: 'eggs', dis: 'scrambed eggs'),
        Meal(name: 'chiken filet', dis: 'chicken sandwich'),
      ]
    ),
    MealDate(
      date: DateTime(2018, 9, 21),
      meals: [
        Meal(name: 'bread', dis: 'bread and water'),
      ]
    ),
    MealDate(
      date: DateTime(2018, 9, 22),
      meals: [
        Meal(name: 'rice', dis: 'rice and beans'),
      ]
    ),
  ];

  mealsForEachDate.forEach((date) {
    print("[Date ${date.date}]");
    print("  Number of meals ${date.meals.length}");
    var n = 0;
    date.meals.forEach((meal) {
      print("    Meal ${++n}: ${meal.dis}");
    });
    print("\n");
  });
}
班级餐{
餐({this.dis,this.name});
最终字符串dis;
最后的字符串名;
}
米德级{
MealDate({this.date,this.feeds});
最终日期时间日期;
最后的膳食清单;
}
void main(){
列表测量ForEachDate=[
米德尔特(
日期:日期时间(2018年9月20日),
膳食:[
膳食(名称:“鸡蛋”,dis:“碎鸡蛋”),
餐(名称:“鸡柳”,dis:“鸡肉三明治”),
]
),
米德尔特(
日期:日期时间(2018年9月21日),
膳食:[
膳食(名称:“面包”,dis:“面包和水”),
]
),
米德尔特(
日期:日期时间(2018年9月22日),
膳食:[
膳食(名称:“大米”,dis:“大米和豆类”),
]
),
];
mealsForEachDate.forEach((日期){
打印(“[Date${Date.Date}]”);
打印(“餐数${date.feeds.length}”);
var n=0;
日期.餐费.餐费((餐费){
打印(“膳食${++n}:${mean.dis}”);
});
打印(“\n”);
});
}

祝你好运,永远不要停止编码!

创建
列表视图时不必映射这两个列表。只需使用


要使其工作,日期和膳食必须具有相同的长度。否则,您将遇到索引超出范围的错误。
class Meal {
  Meal({this.dis, this.name});
  final String dis;
  final String name;
}

class Date {
  Date({this.dat});
  final String dat;
}

void main() {

  List<Meal> _list1 = [
    Meal(dis:'it is a chicken sandwichh', name: 'chekin filla'),
    Meal(dis:'it is a chicken sandwichh', name: 'chekin filla'),
    Meal(dis:'it is a chicken sandwichh', name: 'chekin filla'),
    Meal(dis:'it is a chicken sandwichh', name: 'chekin filla'),
    Meal(dis:'it is a chicken sandwichh', name: 'chekin filla')
  ];

  List<Date> dates = [
    Date(dat:'20th of september 2018'),
    Date(dat:'21th of september 2018'),
    Date(dat:'22th of september 2018'),
    Date(dat:'23th of september 2018'),
    Date(dat:'24th of september 2018')
  ];

  // this is where the mapping will be placed
  Map<Date, Meal> mealsEachDay = new Map();

  // and here the relationship between the dates and the meals is done
  for(var i = 0; i < dates.length; i++)
    mealsEachDay[dates[i]] = _list1[i];

  List<String> yourObjects = mealsEachDay.keys.map((date) {
    return "The date is '${date.dat}' and the meal is '${mealsEachDay[date].dis}'";
  }).toList();

  yourObjects.forEach((s) {
    print(s);    
  });
}
class Meal {
  Meal({this.dis, this.name});
  final String dis;
  final String name;
}

class MealDate {
  MealDate({this.date, this.meals});
  final DateTime date;
  final List<Meal> meals;
}

void main() {

  List<MealDate> mealsForEachDate = [
    MealDate(
      date: DateTime(2018, 9, 20),
      meals: [
        Meal(name: 'eggs', dis: 'scrambed eggs'),
        Meal(name: 'chiken filet', dis: 'chicken sandwich'),
      ]
    ),
    MealDate(
      date: DateTime(2018, 9, 21),
      meals: [
        Meal(name: 'bread', dis: 'bread and water'),
      ]
    ),
    MealDate(
      date: DateTime(2018, 9, 22),
      meals: [
        Meal(name: 'rice', dis: 'rice and beans'),
      ]
    ),
  ];

  mealsForEachDate.forEach((date) {
    print("[Date ${date.date}]");
    print("  Number of meals ${date.meals.length}");
    var n = 0;
    date.meals.forEach((meal) {
      print("    Meal ${++n}: ${meal.dis}");
    });
    print("\n");
  });
}
ListView.builder(
  itemBuilder: (context, index) {
    var meal = _list1[index];
    var date = dates[index];
    return Text("Here comes your item with $meal and $date");
  },
);