Флаттер: сопоставление двух списков вместе - PullRequest
0 голосов
/ 24 сентября 2018

Здесь я отображаю только один список, но дело в том, что я хочу сопоставить два списка вместе, чтобы появилась дата, и после этого фото, как на картинке здесь.Итак, я хочу знать, Как я могу составить карту из списка1 и дат, которые являются двумя списками, которые у меня есть.что они будут только одним списком, который я могу использовать в корпусе лесов?enter image description here

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')];
Map<Object,Object> list2= {dates,_list1};
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('listviewww'),
      ),
      body:
        ListView( children:_list2
        .map((element){
          return Column(
            children: <Widget>[
          Container(
              child: Text('My name is ayaaaaaaaaaaa '),
          ),
            Container(
            margin: EdgeInsets.all(9.0),
           constraints: new BoxConstraints.expand(height: 300.0),
           decoration: new BoxDecoration(
           border: new Border.all(color: Colors.blueAccent),
           borderRadius: BorderRadius.horizontal( left:Radius.circular(30.0) ,right:Radius.circular(30.0) ),
           image: new DecorationImage(image: new AssetImage('assets/food.jpg'),fit: BoxFit.cover,),),
           padding: EdgeInsets.only(bottom: 10.0),
      child:Center(
        child:Text('HELLfffffffffffO')
      )
      )
            ], 

      );  
        }).toList()

     ) 
     );

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Я думаю, вы хотите сделать что-то подобное.Проверьте ниже, вы можете запустить этот код в Dartpad (вам нужно будет скопировать и вставить его).

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);    
  });
}

Но все же это не стоит многого.Вам нужно лучше понять взаимосвязь между объектами, списками и картами.

Проверьте этот другой пример ниже и запустите его также в 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");
  });
}

Удачи и никогда не прекращайте кодировать!

0 голосов
/ 24 сентября 2018

Вам не нужно сопоставлять два списка, чтобы создать ListView.Просто используйте ListView.builder ()

ListView.builder(
  itemBuilder: (context, index) {
    var meal = _list1[index];
    var date = dates[index];
    return Text("Here comes your item with $meal and $date");
  },
);
0 голосов
/ 24 сентября 2018

Из того, что я собираю, у вас есть два списка с одинаковыми номерами элементов.Первый список описывает элементы (имя, отображение и т. Д.), А второй - дату.

Вы пытаетесь отобразить это в списке, но не можете, потому что у вас есть два списка информации.

Самый простой ответ на это состоит в том, чтобы объединить два списка в один список, то есть объединить описание элемента и дату.Вы можете создать простой класс с датой и описанием в виде полей.

Теоретически вы можете использовать библиотеку Tuple и создать кортеж из двух битов информации, но это вряд ли необходимо, и в любом случае создание объекта данных будет более кратким.

Если яневерно истолковал ваш вопрос, не стесняйтесь, дайте мне знать.Другая возможность, которую я мог видеть, это то, что вы пытаетесь составить список с датами в качестве заголовков, с одним или несколькими элементами под каждой датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...