Как получить доступ к конкретному элементу списка Flutter из класса модели?

#flutter #dart #flutter-layout #flutter-listview

Вопрос:

У меня есть класс модели под названием Place, и у меня есть список мест, основанный на классе модели. Я использую Navigator.push и передаю данные int оттуда. Теперь, как я могу получить доступ к определенному списку мест, где идентификатор совпадает с данным идентификационным номером?

Вот мой класс моделей и список:

 class Place {  int id;  String cardImage;  String placeName;  String location;  String country;  String details;   Place({  required this.id,  required this.cardImage,  required this.placeName,  required this.location,  required this.country,  required this.details,  }); }  final Listlt;Placegt; place = [  Place(  id: 1,  cardImage:  "https://image1_url.jpg",  placeName: "Essence Of Japan",  location: "Tokyo",  country: "Japan",  details: "long text"), Place(  id: 2,  cardImage:  "https://image2_url.jpg",  placeName: "Essence Of Japan",  location: "Tokyo",  country: "Japan",  details: "long text"), ];  

Это мой навигатор, где идентификатор пропуска 1:

 Navigator.push(  context,  MaterialPageRoute(  builder: (context) =gt; DetailsPage(1),  ),  );  

Теперь я хочу получить доступ к нижеприведенному элементу, где идентификатор:1

 Place(  id: 1,  cardImage:  "https://image1_url.jpg",  placeName: "Essence Of Japan",  location: "Tokyo",  country: "Japan",  details: "long text"  ),  

Ответ №1:

Предполагая places , что список находится на экране, по которому вы перемещаетесь, и id это идентификатор, который вы передаете на экран, вы можете получить место с этим идентификатором таким образом :

 try {  var foundPlace = places.firstWhere((p) =gt; p.id == widget.id);  } catch (e) {  print('place not found');  }  

Нужно быть в ловушке, потому что, если место не найдено, оно выбрасывает StateError . Или вы можете добавить orElse параметр, который будет возвращать a Place со null значениями, для чего требуется изменить Place класс и удалить required его из параметров. В этом случае вам не понадобится пытаться поймать :

 var foundPlace = place.firstWhere((p) =gt; p.id == widget.id, orElse:()=gt;Place());