#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());