В мобильных приложениях работа с компонентом Image построена несколько иначе, чем в веб-приложениях. В связи с этим, в повторяющихся элементах, таких, как элементы компонентов List и Grid, загрузка Image из модели данных не является однозначной и требует определенной процедуры для загрузки с помощью БП.

Использование изображений в элементах повторяющегося типа (List, Grid)

Рассмотрим пример, в котором у нас есть таблица рейсов flight и у каждого объекта модели flight имеется изображение, представленное imageFile [file] в модели данных.

0_dataModel

Так же, представим, что все данные о рейсах у нас представлены в виде элементов компонента List. Каждый элемент - это Card, которая содержит в себе Image и некоторые другие компоненты, отражающие детали рейса. В дизайнере это выглядит следующим образом:

uiux

Для родительского компонента обычно указывается модель данных в Data Source, которая подгружается для использования, как это показано на изображении ниже.

01_select_from_model

При этом, для изображений, данный способ не сработает. 
Чтобы загрузить данные для изображения из модели, необходимо выбрать изображение в List (или Grid) и создать новый БП для него.

02_openBP

Необходимый БП начинается с создания элемента изображения в приложении, а именно с триггера onCreate. Первым делом, необходимо получить соответствующий данному изображению объект модели данных. Для этого можно использовать данные, которые уже получены родительским элементом (List в данном случае). Для получения данных из List используется блок List Get Data.

03_bp_1

Логика у БП, который мы строим, следующая: если один из элементов Data (объект модели flight) имеет идентификатор (ID) равный Record ID, то мы нашли нужный нам элемент таблицы flight, в данном случае. Тогда, из объекта модели flight берется идентификатор файла изображения и загружается в компонент Image с необходимым Widget ID.

Для перебора всех элементов массива Data используется блок БП For each loop и, в теле цикла, каждый элемент массива Data разворачивается c помощью блока Expand Flight. В случае, если Flight ID = Record ID, то берется идентификатор файла ImageFile и загружается объект файла с помощью блока Server request GET /_files/:id/download/
Пример этой части БП приведен ниже.

03_bp_2

Следующим шагом, объект файла изображения file разворачивается с помощью блока Expand file, чтобы передать bytes array на вход блока Image Update Properties в свойство Data. Так же необходимо указать Widget ID конкретного элемента изображения в листе, передав ему значение из блока onCreate в начале БП. Результат последней части БП приведен на примере ниже:

03_bp_3

В конце, используется блок Break Loop, чтобы зря не перебирать оставшиеся элементы массива.

break loop

Загрузка изображения с файловой системы смартфона пользователя.

Рассмотрим пример загрузки аватара профиля пользователя. Веб-интерфейс состоит из изображения и кнопки, запускающей БП, и выглядит следующим образом:

11_ui

Сам БП запускает процесс выбора файлов в файловой системы пользователя с помощью блока Select Files и, если был выбран хоть какой-то элемент, то берется 0-й элемент массива на выходе.

12_bp_1

Полученный элемент file массива Files необходимо загрузить на сервер веб-приложения, для дальнейшего использования (Server request POST /_files/). В случае успешного выполнения запроса, объект file на выходе блока Server request POST /_files/ передается на вход блока Expand file, чтобы получить Bytes Array, который и передается на вход блока Image Update Properties в свойство Data.

13_bp_2

Was this article helpful?

AppMaster.io 101 Полный курс

10 модулей
2 недели

Не знаете с чего начать? Начните с нашего ускоренного курса для начинающих и изучите AppMaster от А до Я.

Начать обучение
Development it’s so easy with AppMaster!

Остались вопросы?

Наши эксперты с радостью ответят на все ваши вопросы о платформе AppMaster и помогут вам в создании приложений.

headphones

Служба поддержки

Поделитесь своей проблемой с нашими специалистами.

message

Комьюнити AppMaster

Обсудите вопросы с другими пользователями в нашем чате.

Присоединиться