Comments 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="
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 (тоже не подходит ввиду завёрнутой логики), который сделает всё стандартное красиво, и ни от чего не зависит.
Дикий размер, отсутствие готовых бинарников.
Ещё и разборки с питоном сверху...
У рустика на винде зависимость от рантайма msvc, декларируемое переключение на mingw не заработало.
Цель: всего лишь получить кастомный инсталлер с минимальным оверхедом. И выходит, единственный подходящий вариант для таких целей - это GTK.
Приложение на Qt5 в два окошка на Python с PyInstaller весит в релизе 15 мегабайт. Мне норм.
Красивые 20мегабайтные инсталляторы всяких приложений не переносимы, они через WinAPI открывают окно, потом через Sciter рисуют в него свои красоты.
Ну например. Я не знаю, в чём заключается именно эта ошибка, но, зная, чем занимается xdg-desktop-portal, могу придумать вот такой сценарий. Flutter хочет, чтобы юзер выбрал папку. Flutter говорит GTK открыть диалог выбора папки. GTK командует порталу открыть доступ к списку допустимых зон сохранения неструктурированной пользовательской информации, потому что GTK лучше всех знает, как у них что должно называться. Портал отвечает: вы там ужратые что ли? в стандарте нет такого." GTK пишет ошибку в strerr, а в Flutter отвечает: юзер выбрал $HOME/Documents. Flutter пытается открыть в ней файл iostream-ом, получает отлуп и закрывается.
Если xdg-portal-desktop ещё можно обвинить в том, что они не подстраиваются под вечно меняющиеся хотелки GTK (хотя, скорее всего, xdg-portal просто старой версии стоит), то что здесь Flutter вообще может сделать? Парсить stderr?
Flutter 3.22 — наше мнение