Вместо создания photosUrl
String
, содержащего URL-адрес одного города в вашем штате (в CityPhotoBloc
), сделайте, как вы делали в FirstApiBloc
, где вы определили список идентификаторов городов для хранения. в вашем штате, сделайте это здесь, а также определите список URL-адресов, называемых photosUrls, затем в вашем ListView вместо state.photosUrl
вы будете использовать state.photosUrl[index]
для получения URL-адреса.
Также попробуйте использовать BlocConsumer
вместо BlocBuilder
и посмотрите, сможете ли вы реализовать метод buildWhen
, чтобы при необходимости создавать только виджеты в виде списка
Edit:(more clarification):
От flutter.dev:
Для сравнения в конструктор ListView по умолчанию, который требует создания всех элементов одновременно, конструктор ListView.builder () создает элементы по мере их прокрутки на экране.
Это означает, что если вы напишите это, чтобы получить URL городской фотографии:
BlocProvider.of (контекст) .add (LoadCityPhoto (cityId: hotelsList [index] .id.toString ()));
и у вас есть миллионы городов, тогда не будет отправлено не миллион событий то есть это произошло бы с обычным ListView
, тогда как с ListView.builder
, как сказано в цитируемом тексте, будут создаваться дочерние элементы только по требованию, и поскольку событие вызывается в том же блоке c кода, в котором создается дочерний элемент тогда также событие будет запущено по требованию
Я надеюсь, что теперь все ясно
Подробнее о ListView.builder здесь