Простое приложение на Dart

08.08.23

Разработка - Языки и среды

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

Судя по тому интересу, который возник в статье Flutter + 1C, которую можно прочитать, перейдя по ссылке //infostart.ru/1c/articles/1910243/, хотел бы продолжить тему флатера и языка программирования дарт.

В комментариях были вопросы от разработчиков 1С, которые спрашивали о том, как им начать изучать флатер, какими ресурсами лучше  пользоваться.

Отвечая на комментарии, я писал, что прежде чем изучать флатер, необходимо изучить язык программирования дарт. Так как, не зная этого языка, будет очень трудно изучать флатер. Изучив дарт, а затем флатер, вы потратите времени меньше, чем если сразу начнете изучать флатер. Причем во втором случае есть большая вероятность вообще забросить изучение данной технологии.

(Конечно, могут быть исключения. Если разработчик хорошо знаком с ООП парадигмой программирования, может быть, уже разрабатывал приложения на других языках программирования (например Java, C#) , где работал с классами, наследованием, интерфейсами, то конечно, он может сразу начинать изучать фреймворк флатер.)

Хочу продемонстрировать вам пример небольшого, простого приложения, написанного на языке дарт (без фреймворка), которое можно использовать для начала изучения языка.

Это консольное приложение, которое подключается по http протоколу к базе данных 1С и посредством POST запроса передает на сервер файл.

Начнем с базы данных 1С. Создаем чистую информационную базу и в дереве метаданных добавляем http сервис. Сервис называем dart_1c и также называем корневой URL - dart_1c. Добавляем новый шаблон - РаботаСФайлами, и устанавливаем у него шаблон - /work-with-files. В этом шаблоне добавляем новый http метод - POST - ПолучитьФайл. В результате всех проделанных операций мы получили следующую картину:

 

 

Исходный код модуля http сервиса можно посмотреть здесь.

 

Прокомментирую данный код. Из тела POST запроса получаем данные. Данные, представляют собой строку, Base64. Эта строка и есть тот файл, который мы передаем на сервер. Далее преобразуем строку Base64 в двоичные данные, затем получаем заголовок, этот заголовок мы передаем на сервер. В заголовке, содержится расширение закодированного файла. На диске D сохраняем этот файл.  В процессе сохранения мы формируем ему имя. В качестве имени у нас будет уникальный идентификатор + расширение.

Если запись файла прошла, успешно, мы клиенту отправляем статус 201, в противном случае статус с кодом 500 - разнообразные ошибки сервера.

Более подробно про http сервисы можно узнать тут //infostart.ru/1c/articles/1293341/

Публикуем http сервис на веб сервере. (На вашем компьютере должен быть установлен веб сервер апач или IIS). Я назвал имя публикации - dart_http_1c. Полный путь к POST ресурсу, в моем случае, такой:

http://localhost/dart_http_1c/hs/dart_1c/work-with-files

Перейдем теперь к самому интересному.

Для начала программирования на дарт, нам необходимо установить фреймворк и ide, для набора и редактирования программного кода. (Устанавливая флатер мы фреймворком можем не пользоваться, будет использовать только дарт. При установке флатера, устанавливается так же виртуальная машина дарт, которая и будет выполнять код на дарте.). Как установить флатер можно почитать в статье //infostart.ru/1c/articles/1910243/ или на официальном сайте флатер https://docs.flutter.dev/get-started/install

Насчет ide можно почитать тут https://docs.flutter.dev/get-started/editor.

Первое, что нам нужно сделать, это создать папку на компьютере, в котором будет находиться наше небольшое приложение на дарт.

Открываем эту папку в вашей любимой ide и создаем там файл main.dart.

Открываем этот файл и набираем в нем следующий код.

 

(Можно не устанавливать ide, а программировать в обыкновенном блокноте, но это не очень удобно. Также в коде не обработаны ошибки, которые могут выбросить исключения, например - не найден передаваемый файл, сервер не отвечает и тому подобные ошибки).

В файле main.dart создайте функцию main - эта функция является точкой входа в любое приложение флатер и дарт.

Прокомментирую написанный код:

стр. 7 - создание объекта httpClient, класса - HttpClient - это наш http клиент. 

стр.8 - создание объекта класса HttpClientRequest - это наш http запрос. Мы у него вызываем метод post, куда передаем параметры подключения, а именно имя сервера, порт подключения и путь к http ресурсу.

стр.9 - готовим файл для передачи на сервер. Файл , который мы будем передавать будет наш файл на дарте - main.dart

стр.10 - получаем данные из файла и преобразуем эти данные в строку base64.

стр.11 - добавляем в пост запрос, свой заголовок -

request.headers.set("x-file-type", "txt");

(Для примера, передадим на серевер файл с расширением txt)

стр.12 - помещаем строку base64 в тело пост запроса.

стр.13. выполняем http запрос и ждем ответ от сервера -

final HttpClientResponse response = await request.close();

В ответе сервера, проверяем статусы ответа. В зависимости от статуса выводим пользователю разные сообщения. В последней строке закрываем соединение с сервером

httpClient.close();

 

Для того, чтобы выполнить данный код, в командной строке нужно набрать следующую команду

dart run main.dart

 

 

Для того, чтобы можно было удобно пользоваться и распространять приложение - его нужно собрать в исполняемый файл. Приложения дарт можно собирать под разные платформы. Давайте соберем это приложение под операционную систему Windows. Для этого в командной строке наберем команду dart compile exe main.dart (ее можно расшифровать так - дарт собери exe файл из файла main.dart)

 

 

Обратите внимание, у нас появился файл main.exe. Это исполняемый файла ОС Windows.

 

Выводы

Хотя приложение, которое тут представлено, очень простое и занимает несколько строчек, но мы узнали много нового. Как создать функцию, которая является точкой входа в приложение. Поработали с объектами File, HttpClient, HttpClietRequest, HttpClientResponse - из стандартной библиотеки дарт. Научились конвертировать данные в base64. Научились запускать приложение, а также компилировать приложение в exe файл.

Файл dt - выгрузки данных 1С можно скачать из репозитория  по адресу - https://github.com/hariuc/flutter_order_test

Тестовая конфигурация для бэкенда создана технологической платформой 8.3.23.1688

 

 

Благодарю за внимание.

flutter dart обмен данными интеграция http сервис приложение

См. также

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    4198    YA_418728146    13    

62

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    18812    ROk_dev    74    

43

Языки и среды Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    7510    SeiOkami    25    

62

Языки и среды Программист Платформа 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    3533    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    2338    0    kembrik    2    

7

Языки и среды Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Вставки кода на C# внутри кода на 1С.

7 стартмани

07.04.2023    10620    4    SerVer1C    58    

45

Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1336    1CUnlimited    0    

3

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Программист Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    5647    DemetrKlim    41    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. acces969 362 08.08.23 09:50 Сейчас в теме
Кто-нибудь собирается писать статью про компоненту Native API для 1С на языке C++? В частности, запуск компоненты с платформой 1С на мобильном устройстве и браузере? Это было бы очень полезно.
2. siamagic 08.08.23 15:01 Сейчас в теме
(1) компонента для дройда пишется на ява вроде. Что за задачи такие?
3. vkr 09.10.23 21:07 Сейчас в теме
(2) Вообще-то, в среде разработки Embarcadero C++ Builder v10.x (бывший Borland c++ Builder) очень легко пишутся разные вещи прямо под Андроид, и не требуется никакой Джавы... Ж8-)))
4. user2022693 02.12.23 19:23 Сейчас в теме
Вы очень крутые полезные темы пишите!!! Я пишу на flutter и теперь стоит задача интеграции flutter и 1C, поэтому изучаю 1С, но не всегда все понятно. Круто было бы увидеть видео канал по данным темам. Сколько не шерстил инет у Вас очень полезная информация. А моя задача Интернет магазин на Flutter и база 1С.
acvatoris; +1 Ответить
5. acvatoris 552 16.01.24 12:33 Сейчас в теме
Добрый день.
Использование фреймворка флатер для разработки мобильного приложения "Интернет магазин" - это отличная идея. Фрейморк идеально подходит под данную задачу. Вы сразу создаете приложение для двух платформ (андроид и ios).
Использовать флатер для веб интерфейса, в случае интернет магазина, не очень хорошая идея, так как вы не сможете управлять seo оптимизацией.
Теперь педейдем к бэкенду. Вы пишите, что в качестве бэкэнда, вы используйте 1С. Не думаю, что это хорошая идея. Конечно , данный выбор зависит еще от многих факторов. Вы разрабатываете интернет магазин, сколько пользователей будет пользоваться сервисом? Какие операции данные пользователи будут имет возможность совершать ? Если 1С будет тормозить, то ваш интернет магазин обречен на провал. Даже если приложение на флатер будет очень удобно и красиво. Так как ни один пользователь не будет ждать пока загрузиться список товаров.
Еще один момент связан с лицензированием http соединений. Вам нужно будет купить лицензии. А сколько купить?
Как будут регистрироваться ваши пользователи? Могу этот список еще продолжить :) .

В связи с этими вопросами я думаю, что лучше бэкенд, разработать не на 1С. А скажем на PHP. Купите дешевый хостинг. Мобильное приложение будет подключаться к этому серверу. И все будет ок.
А затем можно будет настроить обмен между базой и 1С. Скажем в 1С будет срабатывать регламентное задание и загружать данные заказов в 1С. Менеджер в 1С уже будет работать с этими заказами.
Удачи в разработке :)
6. acvatoris 552 16.01.24 12:40 Сейчас в теме
Отвечаю на ваш вопрос по обучающим ресурсам.
В рускоязычной области , нет хороших ресурсов для обучения. Могу посоветовать канал в ютубе https://www.youtube.com/@LearnDartFlutter

в англоязычной области есть очень много хороших курсов , как платных так и бесплатных. Можете зайти на сайт http://www.udemy.com/ru/ и за небольшую сумму купить себе курс. Все курсы очень качественные :)
Оставьте свое сообщение