Как стать автором
Обновить

Комментарии 14

За флаттер не скажу, но кричащие на картинке птички остро напомнили старый киберспортивный мем "322", в двух словах означающий ставку на своё поражение. )

Наша Flutter-команда не могла остаться в стороне и уже опробовала новинку.

Ба! И я не смог остаться в стороне. EndeavourOS.

> flutter create test
> cd test
> flutter run -d linux
..................
..................
** (test:1009283): CRITICAL **: 16:25:22.671: Failed to read XDG desktop portal settings: GDBus.Error:org.freedesktop.portal.Error.NotFound: Requested setting not found

** (test:1009283): CRITICAL **: 16:25:22.678: Failed to read XDG desktop portal settings: GDBus.Error:org.freedesktop.portal.Error.NotFound: Requested setting not found

** (test:1009283): CRITICAL **: 16:25:22.682: Failed to read XDG desktop portal settings: GDBus.Error:org.freedesktop.portal.Error.NotFound: Requested setting not found

** (test:1009283): CRITICAL **: 16:25:22.686: Failed to read XDG desktop portal settings: GDBus.Error:org.freedesktop.portal.Error.NotFound: Requested setting not found

** (test:1009283): CRITICAL **: 16:25:22.689: Failed to read XDG desktop portal settings: GDBus.Error:org.freedesktop.portal.Error.NotFound: Requested setting not found
Syncing files to device Linux...                                    84ms

Ага, CRITICAL... И что конкретно not found? Плюсик работает, следующее подозрение - ввод с клавиатуры, не проверял.

Может я чего неправильно установил? Заглянем в инструкцию https://docs.flutter.dev/get-started/install/linux/desktop?tab=download

Create a folder where you can install Flutter.

Consider creating a directory at /usr/bin/.

И тут же чуть ниже

echo 'export PATH="HOME/development/flutter/bin:PATH"' >> ~/.bash_profile

Разве Flutter заработает если его ставить точно по инструкции?

Первый же контакт - и ощущаешь себя бредущим по колено в грязи... Вид цитаты вверху - результат копирования фрагмента кода соответствующей иконкой и его вставки под цитату в редакторе Хабра. Я специально ограничиваю исправления этим комментарием чтобы было понятно что такое ГРЯЗЬ. Должно быть

echo 'export PATH="$HOME/development/flutter/bin:$PATH"' >> ~/.bash_profile

Это ошибка не Flutter а GTK и похоже она навечно.

Что мешает Flutter обработать эту ошибку? По внешнему виду судя, он пытается что-то узнать и не может - тогда надо делать разумные предположения. А то и проверять их. А уж говорить чего именно не узнал, чтобы хотя бы можно было GTK, если это действительно их ошибка, потревожить - это для переросших детский сад абсолютно необходимо.

Мне кажется, знаю что - нехватка людей и неграмотность, скорее детскость, в руководстве проектом. Они сами писали - мы отдали приоритет простым и понятным задачам которые можно решить быстро и в итоге пришли к тому что все оставшиеся задачи сложные и непонятные. Это детская ошибка, но команда учится. Вопрос: после недавнего, научившиеся остались в команде?

Можно удивиться - как так у Гугла могут быть детские ошибки в руководстве проектами? Есть гипотеза - не всё в этом мире суть Интернет и раздача рекламы, для разных задач нужно разное мышление, а его носителями являются казные люди, иногда борющиеся друг с другом за влияние. Эта гипотеза хорошо объясняет размер "кладбища Гугол".

Это ошибка GTK и GTK пишет эту надпись. Вызвана тем, что GTK конфликтует с xdg-desktop-portal. я вам и отвечать начал потому, что я никакого Flutter никогда не пользовал - а ошибку именно эту вижу то и дело. Не удивлюсь, если GTK программно не сообщает об ошибке, а возвращает значение по умолчанию. На GTK писать - себя не уважать.

На GTK писать - себя не уважать.

Принято к сведению, спасибо. Я постепенно склонялся к тому же...

Ну смотрите: разрабы GTK много раз говорили, что их не волнует, как GTK работает за пределами проекта Gnome. То есть для сторонних разработчиков GTK - это по сути неподдерживаемая библиотека. Писать софт, особенно новый, на неподдерживаемом UI тулките - это себя не уважать.

А что порекомендуете для написания кастомного кроссплатформенного инсталлера с gui с небольшим оверхедом без зависимостей?

Порекомендую статическую линковку. Или жмотную упаковку. В любом случае, "всё своё ношу с собой" - это на десктопе самый разумный подход. Разделяемые библиотеки на практике не оправдали себя, всё равно на Винде каждое приложение таскает с собой свой набор, а на Линуксе либо то же самое, либо требуется сборка под конкретный релиз конкретного дистрибутива.

Так что:

  • С++ + Qt + статическая сборка

  • Python + Qt или что попроще + PyInstaller

  • Rust + EGUI. А сборка там всегда статическая

Попроще - это ImGUI и порты его на все языки. А вообще, что ж за инсталлер у вас такой, что InnoSetup не подходит?

А если цель - сделать выпендрёжно-красиво, то есть НЕ нативно, и есть фронтэндщики, то не брезгуйте подходом интерфейса на HTML. Electron дал этой концепции дурную славу, но это целиком вина реализации, а не принципа. Sciter, PyWebView и Tauri все работают не хуже Qt и GTK если писать аккуратный HTML.

Рассчитывал как-то на более серьёзный ответ... InnoSetup, InstallShield, как и всякие NullSoft не подходили никогда, проще и правильнее (даже сейчас) взять WIX.

Статическая линковка сама собой подразумевается, как и компилятор gcc

Ваши рассуждения о текущем положении дел тоже неправильные, есть Qt Installer (тоже не подходит ввиду завёрнутой логики), который сделает всё стандартное красиво, и ни от чего не зависит.

  1. Дикий размер, отсутствие готовых бинарников.

  2. Ещё и разборки с питоном сверху...

  3. У рустика на винде зависимость от рантайма msvc, декларируемое переключение на mingw не заработало.

Цель: всего лишь получить кастомный инсталлер с минимальным оверхедом. И выходит, единственный подходящий вариант для таких целей - это GTK.

Приложение на Qt5 в два окошка на Python с PyInstaller весит в релизе 15 мегабайт. Мне норм.

Красивые 20мегабайтные инсталляторы всяких приложений не переносимы, они через WinAPI открывают окно, потом через Sciter рисуют в него свои красоты.

Ну вот и я об этом же. Проще уже тогда даже голанг взять. Всё будет сразу из коробки, и всего 9 МБ.

Ну например. Я не знаю, в чём заключается именно эта ошибка, но, зная, чем занимается xdg-desktop-portal, могу придумать вот такой сценарий. Flutter хочет, чтобы юзер выбрал папку. Flutter говорит GTK открыть диалог выбора папки. GTK командует порталу открыть доступ к списку допустимых зон сохранения неструктурированной пользовательской информации, потому что GTK лучше всех знает, как у них что должно называться. Портал отвечает: вы там ужратые что ли? в стандарте нет такого." GTK пишет ошибку в strerr, а в Flutter отвечает: юзер выбрал $HOME/Documents. Flutter пытается открыть в ней файл iostream-ом, получает отлуп и закрывается.

Если xdg-portal-desktop ещё можно обвинить в том, что они не подстраиваются под вечно меняющиеся хотелки GTK (хотя, скорее всего, xdg-portal просто старой версии стоит), то что здесь Flutter вообще может сделать? Парсить stderr?

Это точно не так. Это же счётчиковый вариант Hello World, никто никаких папок не открывает.

И да, если иначе не получается - парсить stderr. Месячишко попарсят - может поймут что подход "мама, смотри, на этой машине заработало!" не без изъянов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий