База знаний (цифровой суверенитет)
  • Установка Flutter на Debian 12

    Flutter
    1 2 1

    A
    951
    0

    📚 Полная инструкция установки Flutter на Debian 12 (любой DE)

    Часть 1. Установка системных зависимостей

    # 1. Обновление списка пакетов
    sudo apt update
    
    # 2. Установка базовых инструментов и зависимостей для Linux Desktop
    sudo apt install -y curl git unzip xz-utils zip libglu1-mesa \
      clang cmake ninja-build pkg-config libgtk-3-dev libstdc++-12-dev
    

    Что установили:

    • curl, git, unzip, xz-utils, zip — для скачивания и распаковки
    • libglu1-mesa — графическая библиотека (OpenGL)
    • clang, cmake, ninja-build, pkg-config, libgtk-3-dev — компиляция Linux-приложений
    • libstdc++-12-dev — стандартная библиотека C++

    Часть 2. Скачивание и установка Flutter SDK

    # 3. Переход в домашнюю директорию
    cd ~
    
    # 4. Скачивание Flutter SDK (около 714 МБ)
    curl -O https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.22.1-stable.tar.xz
    
    # 5. Распаковка (создаст папку ~/flutter)
    tar xf flutter_linux_3.22.1-stable.tar.xz
    
    # 6. Добавление Flutter в PATH (через ~/.bashrc)
    echo 'export PATH="$PATH:$HOME/flutter/bin"' >> ~/.bashrc
    
    # 7. Применение изменений
    source ~/.bashrc
    

    Часть 3. Первый запуск и решение проблем

    ⚠️ Flutter при первом запуске скачивает Dart SDK (около 221 МБ) и дополнительные компоненты.

    # 8. Первый запуск (будет загрузка, НЕ прерывайте Ctrl+C!)
    flutter doctor -v
    

    Если зависло:

    # Проверьте, не висит ли процесс в фоне
    ps aux | grep flutter
    
    # Убейте зависшие процессы
    pkill -f flutter
    
    # Удалите файл блокировки (если есть)
    rm -f ~/flutter/bin/cache/lockfile
    
    # Очистите кэш (если нужно)
    rm -rf ~/flutter/bin/cache
    
    # Запустите снова
    flutter doctor -v
    

    Если загрузка идёт, но медленно — не прерывайте.

    Часть 4. Результат успешной установки

    После успешного завершения вы увидите:

    [✓] Flutter (Channel stable, 3.22.1, on Debian GNU/Linux 12 ...)
    [✓] Chrome - develop for the web
    [✓] Linux toolchain - develop for Linux desktop
    [✓] VS Code (version 1.115.0)
    [✓] Connected device (2 available)
        • Linux (desktop)
        • Chrome (web)
    [✓] Network resources
    

    Что означают крестики [✗] — это НЕ ошибки установки Flutter, а индикаторы того, что вы не настроили. Например, не настроена Android-разработка (она не нужна для десктопа).


    Часть 5. Создание первого Linux-приложения

    # 9. Создание нового проекта
    flutter create my_desktop_app
    
    # 10. Переход в папку проекта
    cd my_desktop_app
    
    # 11. Запуск Linux-версии
    flutter run -d linux
    

    Если всё настроено правильно, откроется окно с приложением Flutter (счётчик кликов).


    Часть 6. Настройка IDE (VS Code)

    1. Откройте VS Code
    2. Нажмите Ctrl+Shift+X (расширения)
    3. Установите:
      • Flutter (от Dart Code)
      • Dart (установится автоматически)

    После установки расширений:

    • Нажмите Ctrl+Shift+PFlutter: New Project
    • Или откройте существующий проект: File → Open Folder → my_desktop_app

    Часть 7. Полезные команды для ежедневной работы

    # Проверка состояния (быстро)
    flutter doctor
    
    # Список доступных устройств
    flutter devices
    
    # Запуск на Linux
    flutter run -d linux
    
    # Запуск в Chrome (для веб-версии)
    flutter run -d chrome
    
    # Сборка релизной версии Linux-приложения
    flutter build linux
    
    # Готовый бинарник будет в:
    # ./build/linux/x64/release/bundle/
    

    📋 Сводка: что в стандартном варианте у вас есть сейчас

    Компонент Статус
    Flutter SDK ✅ Установлен (3.22.1)
    Dart SDK ✅ Скачан автоматически
    Linux toolchain ✅ Работает (clang, cmake, ninja)
    VS Code + расширения ✅ Готовы к работе
    Создание Linux-приложений ✅ Возможно
    Android-разработка ❌ Не настроена (и не нужна для десктопа)

    🚀 Следующие шаги для вашего проекта

    Теперь вы можете:

    1. Создать проект:
    flutter create knowledge_base_app
    cd knowledge_base_app
    
    1. Изучить структуру:

      • lib/main.dart — главный файл приложения
      • linux/ — конфигурация для Linux-сборки
    2. Попробовать отредактировать интерфейс:

      • Откройте lib/main.dart в VS Code
      • Измените текст в CenterText('Моя база знаний')
      • Нажмите r в терминале (горячая перезагрузка)
    3. Подготовиться к интеграции с Rust:

      • Установите Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      • Изучите flutter_rust_bridge для FFI

    ⚠️ Запомните: что делать, если flutter doctor завис

    1. Не паниковать — первый запуск всегда долгий
    2. Проверить процессы: ps aux | grep flutter
    3. Убить процессы: pkill -f flutter
    4. Удалить блокировку: rm -f ~/flutter/bin/cache/lockfile
    5. Запустить снова: flutter doctor -v

    Итог: Flutter на Debian 12 полностью готов к разработке десктопных приложений.

  • A
    951
    0

    Flutter сам рисует элементы интерфейса, но в Linux GTK используется как "оконная прослойка" .

    🖼️ Как это работает на Linux

    ┌─────────────────────────────────────────────────────────┐
    │                   Ваше Flutter-приложение                │
    │  (все кнопки, текст, анимации рисует Flutter через Skia) │
    └─────────────────────────────────────────────────────────┘
                                ↓
    ┌─────────────────────────────────────────────────────────┐
    │              Прослойка (embedder) для Linux              │
    │         Отвечает за: окно, события мыши/клавиатуры       │
    └─────────────────────────────────────────────────────────┘
                                ↓
    ┌─────────────────────────────────────────────────────────┐
    │         GTK (или GLFW) — системная библиотека            │
    │      Создаёт окно, передаёт ввод, но НЕ рисует UI        │
    └─────────────────────────────────────────────────────────┘
    

    🔧 Что именно делает GTK

    Flutter на Linux не использует GTK для рисования виджетов (кнопок, полей ввода). GTK нужен только для:

    1. Создания окна — получение "холста" от операционной системы
    2. Обработки событий — куда кликнули мышью, какую клавишу нажали
    3. Буфера обмена — копировать/вставить
    4. Управления окном — свернуть, развернуть, закрыть

    Всё рисование внутри окна (кнопки, текст, анимации, градиенты) делает Flutter через Skia (или Impeller), который обращается напрямую к видеокарте через OpenGL/Vulkan.

    📊 Сравнение с другими платформами

    Платформа Оконная прослойка Рисование UI
    Linux GTK (или GLFW) Flutter (Skia → OpenGL)
    Windows Win32 API Flutter (Skia → Direct3D)
    macOS Cocoa Flutter (Skia → Metal)
    Android Android Framework Flutter (Skia/Impeller → Vulkan/OpenGL)
    iOS UIKit Flutter (Impeller → Metal)

    🧪 Как это проверить

    Запустите приложение и посмотрите на использование памяти:

    # В другом терминале
    ps aux | grep my_desktop_app
    

    Вы увидите, что GTK-библиотеки подгружены (libgtk-3.so), но они не потребляют ресурсы на отрисовку — только на управление окном.

    💡 Зачем нужен именно GTK

    Flutter на Linux поддерживает два "эмбеддера":

    • GTK — используется по умолчанию (лучшая интеграция с окружениями GNOME, LXQt, XFCE)
    • GLFW — минималистичный вариант (без зависимостей от GTK)

    Можно переключиться на GLFW:

    flutter config --enable-linux-glfw
    flutter create --platforms=linux .
    

    Но GTK предпочтительнее, так как лучше поддерживает:

    • масштабирование для HiDPI
    • работу с несколькими мониторами
    • ввод с клавиатуры (особенно не-латинские раскладки)

    Кратко: GTK даёт окно, Flutter рисует внутри него. Никакие GTK-виджеты (кнопки, поля) не используются — Flutter рисует свои собственные.