Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Flutter - Урок 001. Hello world

Android, Flutter, Hello World

Flutter - это свежий фреймворк от компании Google для разработки приложений для Android и iOS. Используемый язык программирования - Dart (также разрабатывается компанией Google).

Разберёмся с запуском нашего первого приложения на Flutter.

Для создания нашего первого приложения, которое запустим под Android, необходимо произвести установку всех необходимых компонентов. Установка данных компонентов будет производиться в ОС Ubuntu Linux.

Скачать Flutter

В официальной документации сначала предлагается скачать сам Flutter, а потом распаковать его.

cd ~/development
tar xf ~/Downloads/flutter_linux_v1.0.0-stable.tar.xz

Проверить наличие необходимых компонентов

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

export PATH=$PATH:`pwd`/flutter/bin

После чего запускается утилита flutter doctor , которая покажет, все ли компоненты имеются в системе

[-] Android toolchain - develop for Android devices
    • Android SDK at /Users/obiwan/Library/Android/sdk
    ✗ Android SDK is missing command line tools; download from https://goo.gl/XxQghQ
    • Try re-installing or updating your Android SDK,
      visit https://flutter.io/setup/#android-setup for detailed instructions.

Указать пути к SDK Flutter

В первую очередь предлагают указать пути к SDK Flutter. Для этого нужно:

  1. Найти директорию, куда был помещён flutter. Если вы следовали инструкции, то путь должен выглядеть так
    /home/user/development/flutter/bin
  2. Открыть или создать файл
    $HOME/.bash_profile
  3. Добавить путь к SDK flutter в данный файл
    export PATH=$PATH:/home/user/development/flutter/bin
  4. Обновить среду bash
    source $HOME/.bash_profile
  5. Можете проверить, что путь добавлен
    echo $PATH

Установка Android Studio

Поскольку это руководство по настройке под Linux, то можно воспользоваться установкой Android Studio через систему snap пакетов. Это действительно проще.

sudo snap install android-studio --classic

Я пропущу стандартную настройку Android Studio, например, установку цветовой схемы. Поскольку самый важный момент - это установка плагинов для работы с Dart и Flutter.

Android Studio Settings

Найдёте эти параметры в настройках File -> Settings

Android Studio Settings

Dart Plugin

Dart plugin

Flutter Plugin

Flutter plugin

Согласие с лицензиями

Вам нужно будет ещё раз запустить flutter foctor --android-licenses , чтобы выполнить согласие со всеми лицензиями

Start a new Flutter project

После чего у вас появится возможность создания Flutter проекта Start a new Flutter project

Start a new Flutter project

Выбираем Flutter application

Flutter application

Указываем Flutter SDK

Указываем домен компании

После чего будет создан Flutter проект

Обратите внимение на структуру проекта. В External Libraries обязательно должны быть все необходимые компоненты:

  1. Dart Packages
  2. Dart SDK
  3. Flutter for Android

Если какие-то из пунктов недоступны, то возможно вам потребуется или заново переустановить Flutter или правильно настроить пути в настройках IDE.

Настройка Dart

Настройка Dart

Настройка Flutter

Настройка Flutter

Подключение Android Смартфона

Далее подключаем к компьютеру Android смартфон, чтобы выполнить последний пункт по необходимым компонентам. Можно конечно использовать эмулятор, но лично я предпочитаю живое устройство. В конце концов Android смартфон в данном случае под рукой долен быть.

И проверяем, что всё в порядке через flutter doctor.

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.0.0, on Linux, locale C.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] Android Studio (version 3.2)
[✓] Connected device (1 available)

• No issues found!

Заключение

После сборки и установки apk на смартфон вы увидите такое приложение.

Доброго времени суток. В Андроид разработке новичек, посему будут вовросы. Делал все по статье. Но получил следующую картину

rust@Leap15:~/Android/Sdk/tools/bin> flutter doctor -v
[✓] Flutter (Channel stable, v1.0.0, on Linux, locale ru_RU.UTF-8)
    • Flutter version 1.0.0 at /home/rust/develop/flutter
    • Framework revision 5391447fae (6 недель назад), 2018-11-29 19:41:26 -0800
    • Engine revision 7375a0f414
    • Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

⣾Error retrieving device properties for ro.product.cpu.abi:
error: insufficient permissions for device
See [http://developer.android.com/tools/device.html] for more information


[!] Android toolchain - develop for Android devices (Android SDK 28.0.3)
    • Android SDK at /home/rust/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /opt/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    ✗ Android license status unknown.

[✓] Android Studio (version 3.2)
    • Android Studio at /opt/android-studio
    • Flutter plugin version 31.3.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] Connected device (1 available)
    • 612HKBR8272WZ • 612HKBR8272WZ • android-arm • Android null (API null)

! Doctor found issues in 1 category.

При попытке обновить лицензии выдает следующе

rust@Leap15:~/Android/Sdk/tools/bin> /home/rust/Android/Sdk/tools/bin/sdkmanager --update
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
        at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
        at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
        at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 5 more

Подскажите в какую сторону копать.....

Добрый день!

Саму Android Studio запускали? она должна скачать нужные SDK самостоятельно при первом старте. Либо запустите Android-Studio и посмотрите, что может выдать SDK Manager. То есть сделайте без консольных утилит это.

Я поэтому из snap устанавливал, там уже всё нормально настроено.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
A
22 января 2019 г. 21:22
Allyonz

C++ - Тест 001. Первая программа и типы данных

  • Результат:40баллов,
  • Очки рейтинга-8
A
22 января 2019 г. 14:15
Alex

Qt - Тест 001. Сигналы и слоты

  • Результат:89баллов,
  • Очки рейтинга6
IO
20 января 2019 г. 18:39
Ivan Otreshko

C++ - Тест 003. Условия и циклы

  • Результат:0баллов,
  • Очки рейтинга-10
Последние комментарии
22 января 2019 г. 13:17
Евгений Легоцкой

Создайте тогда тему здесь на форуме в разделе Qt с выкладками кода и вашими попытками внедрения делегата, позже гляну или может кто-то ещё глянет из опытных пользователей.
I
22 января 2019 г. 13:13
IscanderChe

Не проще тогда использовать сразу кастомный делегат с чекбоксом? Я попробовал, но там засада в том, что чекбокс показывается только при щелчке на ячейку, а дефолтно показывается значение. Как ...
22 января 2019 г. 12:15
Евгений Легоцкой

Если будет не приемлемо потом, то тогда через кастомный Item Delegate нужно будет перерисовать ячейки в той колонке.
I
22 января 2019 г. 12:09
IscanderChe

Получилось приемлемо. Спасибо!Нюанс только в том, что поле рядом с чекбоксом не пропадает, оно просто пустое, что видно при выделении ячейки. Но этого достаточно.
22 января 2019 г. 11:50
Евгений Легоцкой

Переопределить метод data для той колонки и роли Qt::DisplayRole, чтобы в том случае возвращался QVariant() я так думаю... Но возможно, что у вас там будут нюансы, если вы туда чекбокс за...
Сейчас обсуждают на форуме
23 января 2019 г. 7:54
Михаиллл

Зарание спасибо.А еще на эту тему можно будет сделать статью. Это контент будет уникальным.
23 января 2019 г. 7:37
Евгений Легоцкой

Hello. Maybe the English will be better for you? I think russian is not native language for you, or did I mistake? Did I undesrtood rightly, that you mean this documentation ( ...
I
22 января 2019 г. 13:45
IscanderChe

Всем добрый день. Суть задачи: надо, чтобы в одной из колонок QTableView вместо хранимого в QSqlTableModel значения выводился чекбокс и при смене состояния чекбокса значения в базе тоже ...
M
22 января 2019 г. 13:15
Max-P85

Евгений, огромное спасибо, все работает!
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы