Flutter язык программирования

Содержание

Введение

На этой странице собраны некоторые распространенные вопросы, задаваемые о Flutter. Вы также можете ознакомиться со следующими специализированными часто задаваемыми вопросами:

Что такое Флаттер?

Flutter-это портативный инструментарий пользовательского интерфейса Google для создания красивых. Изначально скомпилированных приложений для мобильных. Веб-и настольных компьютеров из одной кодовой базы. Flutter работает с существующим кодом. Используется разработчиками и организациями по всему миру и является бесплатным и открытым исходным кодом.

Для кого существует Флаттер?

Для пользователей Flutter оживляет красивые приложения.

Для разработчиков Flutter снижает планку входа для создания приложений. Это ускоряет разработку приложений и снижает стоимость и сложность производства приложений на разных платформах.

Для дизайнеров Flutter предоставляет холст для работы с высококлассными пользователями. Fast Company назвала Flutter одной из лучших дизайнерских идей десятилетия за его способность превращать концепции в производственный код без компромиссов. Налагаемых типичными фреймворками. Он также действует как продуктивный инструмент прототипирования с

поддержкой CodePen для обмена вашими идеями с другими.

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

Сколько опыта разработки мне нужно, чтобы использовать Flutter?

Flutter доступен программистам, знакомым с объектно-ориентированными концепциями (классы, методы. Переменные и т. Д.) и императивными концепциями программирования (циклы, условные выражения и т. Д.).

Мы видели, как люди с очень небольшим опытом программирования изучали и использовали Flutter для создания прототипов и разработки приложений.

Какие приложения я могу создавать с помощью Flutter?

Flutter предназначен для поддержки мобильных приложений, работающих как на Android, так и на iOS. А также интерактивных приложений. Которые вы хотите запустить на своих веб-страницах или на рабочем столе. (Обратите внимание. Что поддержка настольных компьютеров находится в стадии бета-тестирования. Но моментальный снимок бета — версии доступен на стабильном канале.)

Приложения, которые должны предоставлять высокопрофессиональный дизайн. Особенно хорошо подходят для Flutter. Тем не менее, вы также можете создавать пиксельные интерфейсы. Которые соответствуют языкам дизайна Android и iOS с помощью Flutter.

Экосистема пакетов Flutter поддерживает широкий спектр аппаратных средств (таких как камера, GPS. Сеть и хранилище) и сервисов (таких как платежи. Облачное хранилище. Аутентификация и реклама).

Кто заставляет Трепетать?

Flutter-это проект с открытым исходным кодом, в котором участвуют Google, другие компании и частные лица.

Кто использует Флаттер?

Разработчики внутри и за пределами Google используют Flutter для создания красивых изначально скомпилированных приложений для iOS и Android. Чтобы узнать больше о некоторых из этих приложений, посетите витрину.

Что делает Flutter уникальным?

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

Кроме того, Flutter отличается тем. Что у него есть только тонкий слой кода C/C++.

Flutter реализует большую часть своей системы (композитинг, жесты, анимация, фреймворк, виджеты и т. Д.) в Dart (современном, лаконичном, объектно-ориентированном языке). Который разработчики могут легко читать, изменять. Заменять или удалять. Это дает разработчикам огромный контроль над системой. А также значительно снижает планку доступности для большинства систем.

Должен ли я создать свое следующее производственное приложение с помощью Flutter?

Flutter 1.0 был запущен 4 декабря 2018 года, а Flutter 2-3 марта 2021 года. С тех пор более 100 000 приложений были отправлены с помощью Flutter на многие сотни миллионов устройств.

См. Некоторые примеры приложений в витрине.

Flutter отправляет обновления примерно ежеквартально, которые улучшают стабильность и производительность. А также решают часто запрашиваемые пользовательские функции.

Что дает Флаттер?

Что находится внутри Flutter SDK?

Флаттер включает в себя:

  • Сильно оптимизированный, первый в мире мобильный движок 2D-рендеринга с отличной поддержкой текста
  • Современный фреймворк в стиле react
  • Богатый набор виджетов, реализующих Material Design и iOS-стиль

  • API для модульных и интеграционных тестов
  • Интерфейсы взаимодействия и плагинов для подключения к системе и сторонним SDK
  • Безголовый тестовый раннер для запуска тестов на Windows, Linux и Mac
  • Dart DevTools для тестирования, отладки и профилирования вашего приложения
  • Инструменты командной строки для создания, построения, тестирования и компиляции приложений

Работает ли Flutter с какими-либо редакторами или IDE?

Мы предоставляем плагины для Android Studio, IntelliJ IDEAи VS Code. См. раздел Настройка редактора для деталей настройки и Android Studio/IntelliJ и VS Code для советов о том. Как использовать плагины.

Кроме того, вы можете использовать flutterкоманду из терминала, а также один из многих редакторов. Поддерживающих редактирование Dart.

Флаттер поставляется с каркасом?

Да! Flutter поставляется с современным каркасом в стиле react. Фреймворк Flutter разработан так. Чтобы быть многоуровневым и настраиваемым (и необязательным). Разработчики могут использовать только части фреймворка или даже полностью заменить верхние слои фреймворка.

Поставляется ли Flutter с виджетами?

Да! Flutter поставляется с набором высококачественных материалов дизайна и Купертино (iOS-стиль) виджетов, макетов и тем. Конечно, эти виджеты-только отправная точка. Flutter предназначен для того. Чтобы легко создавать свои собственные виджеты или настраивать существующие виджеты.

Поддерживает ли Флаттер Дизайн Материала?

Да! Команды Flutter и Material тесно сотрудничают, и материал полностью поддерживается. Ряд примеров этого показан в MDC-103 Flutter: Material Theming codelab.

Flutter поставляется с тестовой платформой?

Да, Flutter предоставляет API для написания модульных и интеграционных тестов. Узнайте больше о тестировании с помощью Flutter.

Мы используем наши собственные возможности тестирования для тестирования нашего SDK. И мы измеряем наше тестовое покрытие на каждом коммите.

Flutter поставляется с отладочными инструментами?

Да, Flutter поставляется с Flutter DevTools (также называемыми Dart DevTools). Дополнительные сведения см. в разделах Отладка с помощью Flutter и документы Flutter DevTools.

Поставляется ли Flutter с фреймворком внедрения зависимостей?

Мы не отправляем с самоуверенным решением, но есть множество пакетов. Которые предлагают инъекцию зависимостей и расположение службы . Таких как injectable, get_itи kiwi.

ТЕХНОЛОГИЯ

С помощью какой технологии построен Флаттер?

Flutter построен на C, C++, Dart и Skia (движок 2D-рендеринга). См. Эту архитектурную диаграмму для лучшего представления основных компонентов. Для более подробного описания многоуровневой архитектуры Flutter прочтите архитектурный обзор.

Как Flutter запускает мой код на Android?

C и C++ код движка компилируются с NDK Android. Код Dart (как SDK, так и ваш) заранее скомпилирован в собственные библиотеки, библиотеки ARM и x86. Эти библиотеки включены в проект Android” runner.apk. При запуске приложение загружает библиотеку Flutter. Любая визуализация, ввод или обработка событий и т. Д. Делегируются скомпилированному коду Flutter и app. Это похоже на то, как работают многие игровые движки.

В режиме отладки Flutter использует виртуальную машину (VM) для запуска своего кода. Чтобы включить горячую перезагрузку с сохранением состояния-функцию. Которая позволяет вносить изменения в запущенный код без перекомпиляции. Вы увидите баннер “debug” в правом верхнем углу вашего приложения при работе в этом режиме. Чтобы напомнить вам. Что производительность не характерна для готового приложения выпуска.

Как Flutter запускает мой код на iOS?

Код движка C и C++ компилируется с помощью LLVM. Код Dart (как SDK, так и ваш) заранее скомпилирован в собственную библиотеку ARM. Эта библиотека включена в проект iOS” runner.ipa. При запуске приложение загружает библиотеку Flutter. Любой рендеринг, ввод или обработка событий и т. Д. делегируются скомпилированному коду Flutter и приложения. Это похоже на то, как работают многие игровые движки.

Во время отладочного режима Flutter использует виртуальную машину (VM) для запуска своего кода. Чтобы включить горячую перезагрузку с отслеживанием состояния, функцию. Которая позволяет вносить изменения в запущенный код без перекомпиляции. Вы увидите баннер “debug” в правом верхнем углу вашего приложения при запуске в этом режиме. Чтобы напомнить вам. Что производительность не характерна для готового выпуска приложения.

Использует ли Flutter встроенные в мою операционную систему виджеты платформы?

Нет. Вместо этого Flutter предоставляет набор виджетов (включая Material Design и виджеты в стиле Купертино (iOS)). Управляемых и визуализируемых фреймворком и движком Flutter. Вы можете просмотреть каталог виджетов Flutter.

Мы считаем, что конечным результатом будет более высокое качество приложений. Если бы мы повторно использовали встроенные виджеты платформы. Качество и производительность приложений Flutter были бы ограничены гибкостью и качеством этих виджетов.

В Android, например. Существует жестко запрограммированный набор жестов и фиксированные правила их устранения. В Flutter вы можете написать свой собственный распознаватель жестов. Который является первоклассным участником системы жестов. Более того, два виджета, созданные разными людьми, могут координировать свои действия. Чтобы устранить двусмысленность жестов.

Современные тенденции дизайна приложений указывают на то. Что дизайнеры и пользователи хотят иметь более насыщенные движением интерфейсы и дизайн. Ориентированный на бренд. Чтобы достичь такого уровня индивидуального, красивого дизайна, Flutter спроектирован так. Чтобы управлять пикселями вместо встроенных виджетов.

Используя один и тот же рендеринг, фреймворк и набор виджетов. Становится проще публиковать их для нескольких платформ из одной и той же кодовой базы. Не прибегая к тщательному и дорогостоящему планированию для выравнивания различных наборов функций и характеристик API.

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

Что происходит, когда моя мобильная ОС обновляется и вводит новые виджеты?

Команда Flutter следит за внедрением и спросом на новые мобильные виджеты со стороны iOS и Android и стремится работать с сообществом над созданием поддержки новых виджетов. Эта работа может быть выполнена в форме низкоуровневых функций фреймворка. Новых составных виджетов или новых реализаций виджетов.

Многоуровневая архитектура Flutter предназначена для поддержки многочисленных библиотек виджетов. И мы поощряем и поддерживаем сообщество в создании и обслуживании библиотек виджетов.

Что происходит, когда моя мобильная ОС обновляется и вводит новые возможности платформы?

Система взаимодействия и плагинов Flutter предназначена для того. Чтобы разработчики могли немедленно получить доступ к новым функциям и возможностям мобильных ОС. Разработчикам не нужно ждать. Пока команда Flutter представит новую возможность мобильной ОС.

Какие операционные системы можно использовать для создания приложения Flutter?

Flutter поддерживает разработку с использованием Linux, macOS, ChromeOS и Windows.

На каком языке пишется Flutter?

Dart, быстро развивающийся современный язык, оптимизированный для клиентских приложений. Базовая графическая платформа и виртуальная машина Dart реализованы на языке C/C++.

Почему Флаттер решил использовать Дротик?

На начальном этапе разработки команда Flutter изучила множество языков и сред выполнения и в конечном итоге приняла Dart для фреймворка и виджетов. Flutter использовал четыре основных измерения для оценки и учитывал потребности авторов фреймворка. Разработчиков и конечных пользователей. Мы обнаружили. Что многие языки отвечают некоторым требованиям. Но Dart высоко оценил все наши оценочные измерения и соответствовал всем нашим требованиям и критериям.

Среды выполнения Dart и компиляторы поддерживают комбинацию двух критических функций для Flutter: быстрый цикл разработки на основе JIT. Который позволяет изменять форму и выполнять горячие перезагрузки с сохранением состояния на языке с типами. А также опережающий компилятор. Который выдает эффективный код ARM для быстрого запуска и предсказуемой производительности производственных развертываний.

Кроме того, у нас есть возможность тесно сотрудничать с сообществом Dart. Которое активно инвестирует ресурсы в улучшение Dart для использования в Flutter. Например, когда мы приняли Dart. У языка не было заранее разработанной цепочки инструментов для создания собственных двоичных файлов. Что способствует достижению предсказуемой высокой производительности. Но теперь язык работает. Потому что команда Dart создала его для Flutter. Аналогично, виртуальная машина Dart ранее была оптимизирована для пропускной способности. Но теперь команда оптимизирует виртуальную машину для задержки. Что более важно для рабочей нагрузки Flutter.

Dart высоко оценивает нас по следующим основным критериям:

Производительность разработчика
Одним из основных ценностных предложений Flutter является то. Что он экономит инженерные ресурсы. Позволяя разработчикам создавать приложения как для iOS. Так и для Android с одной и той же кодовой базой. Использование высокопродуктивного языка еще больше ускоряет разработчиков и делает Flutter более привлекательным. Это было очень важно как для нашей команды фреймворков, так и для наших разработчиков. Большинство Flutter построено на том же языке, который мы даем нашим пользователям. Поэтому нам нужно оставаться продуктивными на 100 тыс. строк кода. Не жертвуя доступностью или читабельностью фреймворка и виджетов для наших разработчиков.
Объектная ориентация
Для Flutter нам нужен язык. Подходящий для проблемной области Flutter — создания визуального пользовательского опыта. Эта отрасль имеет многолетний опыт создания фреймворков пользовательского интерфейса на объектно-ориентированных языках. Хотя мы могли бы использовать не объектно-ориентированный язык. Это означало бы изобретение колеса для решения нескольких сложных задач. Кроме того, подавляющее большинство разработчиков имеют опыт объектно-ориентированной разработки. Что облегчает изучение разработки с помощью Flutter.
Предсказуемая. Высокая производительность
С помощью Flutter мы хотим дать разработчикам возможность создавать быстрый и гибкий пользовательский интерфейс. Чтобы достичь этого. Мы должны иметь возможность запускать значительное количество кода конечного разработчика во время каждого кадра анимации. Это означает. Что нам нужен язык. Который одновременно обеспечивает высокую производительность и предсказуемую производительность. Без периодических пауз. Которые вызвали бы отбрасывание кадров.
Быстрое распределение
Фреймворк Flutter использует функциональный поток. Который сильно зависит от базового распределителя памяти. Эффективно обрабатывающего небольшие. Кратковременные выделения. Этот стиль был разработан в языках с этим свойством и не работает эффективно в языках. Которые не имеют этой возможности.

Может ли Флаттер запустить любой код дротика?

Flutter может запускать код Dart. Который не импортирует напрямую или транзитивно dart:mirrorsor dart:html.

Насколько велик двигатель Флаттера?

В июле 2019 года мы измерили размер загрузки минимального приложения Flutter (без материальных компонентов. Только один Centerвиджет. Построенный сflutter build apk --split-per-abi), в комплекте и сжатый как релиз APK. Чтобы быть примерно 4,3 МБ для ARM и 4,6 МБ для ARM 64.

В ARM основной движок составляет примерно 3,2 МБ (сжатый). Код фреймворка + приложения-примерно 920,6 КБ (сжатый). Файл ЛИЦЕНЗИИ-54,3 КБ (сжатый). Необходимый Java-код (classes.dex) — 113,6 КБ (сжатый).

В ARM64 основной движок составляет примерно 3,5 МБ (сжатый). Код фреймворка + приложения-примерно 872 КБ (сжатый). Файл ЛИЦЕНЗИИ-54,3 КБ (сжатый). Необходимый Java-код (classes.dex) — 113,6 КБ (сжатый).

Эти цифры были измерены с помощью apkanalyzer, который также встроен в Android Studio.

На iOS выпуск того же приложения имеет размер загрузки 10,9 МБ на iPhone X. Как сообщает Apple App Store Connect. IPA больше, чем APK, главным образом потому, что Apple шифрует двоичные файлы внутри IPA. Что делает сжатие менее эффективным (см. раздел iOS App Store Specific Considerations раздела Apple QA1795).

Двоичный файл release engine включает в себя LLVM IR (bitcode). Xcode использует этот битовый код для создания окончательного двоичного файла для App Store. Содержащего последние оптимизации компилятора и функции. Фреймворки профиля и отладки содержат только маркербитового кода и более репрезентативны для реального двоичного размера движка. Независимо от того. Поставляется ли вы с битовым кодом или нет. Увеличенный размер фреймворка выпуска удаляется на последних этапах сборки. Эти шаги выполняются после архивирования вашего приложения и отправки его в магазин.

Конечно, мы рекомендуем вам измерить ваше собственное приложение. Для этого см. раздел Измерение размера вашего приложения.

Возможности

Какую производительность приложения я могу ожидать?

Вы можете рассчитывать на отличную производительность. Flutter предназначен для того. Чтобы помочь разработчикам легко достичь постоянной скорости 60 кадров в секунду. Приложения Flutter работают с помощью изначально скомпилированного кода—никаких интерпретаторов не задействовано. Это означает. Что приложения Flutter запускаются быстро.

Какие циклы разработчиков я могу ожидать? Как долго между редактированием и обновлением?

Flutter реализует цикл горячей перезагрузки разработчика. Вы можете ожидать субсекундного времени перезагрузки на устройстве или эмуляторе/симуляторе.

Горячая перезагрузка Flutter имеет статус stateful, что означает. Что состояние приложения сохраняется после перезагрузки. Это означает. Что вы можете быстро выполнять итерацию на экране, глубоко вложенном в ваше приложение. Не начиная с главного экрана после каждой перезагрузки.

Чем hot reload отличается от hot restart?

Горячая перезагрузка работает путем введения обновленных файлов исходного кода в работающую виртуальную машину Dart VM (виртуальную машину). Это не только добавляет новые классы. Но также добавляет методы и поля к существующим классам и изменяет существующие функции. Hot restart сбрасывает состояние в исходное состояние приложения.

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

Где я могу развернуть свое приложение Flutter?

Вы можете скомпилировать и развернуть приложение Flutter на iOS, Android, Webи desktop (в бета-версии). В то время как более предприимчивые разработчики уже развертывают настольные приложения Flutter. Вы можете подождать. Пока поддержка настольных компьютеров перейдет на стабильный канал. Если вам неудобно жить на краю. (Однако снимок бета-версии поддержки рабочего стола доступен на стабильном канале. Так что вы можете попробовать его.)

На каких устройствах и версиях ОС работает Flutter?

  • Мы поддерживаем и тестируем запуск Flutter на различных платформах низкого и высокого класса. Подробный список платформ. На которых мы тестируем. См. в списке поддерживаемых платформ.

  • Flutter поддерживает создание заранее скомпилированных библиотек (AOT) для x86_64, armeabi-v7a, и arm64-v8a.

  • Приложения. Созданные для ARMv7 или ARM64, отлично работают (используя эмуляцию ARM) на многих устройствах Android x86.

  • Мы поддерживаем разработку приложений Flutter на различных платформах. См. Системные требования. Перечисленные в разделе каждая операционная система разработки.

Работает ли Flutter в Сети?

Да, веб-поддержка доступна в стабильном канале. Вы можете скомпилировать существующий код Flutter для работы в Интернете. Для получения более подробной информации ознакомьтесь с веб-инструкциями.

Могу ли я использовать Flutter для создания настольных приложений?

Да, поддержка настольных компьютеров находится в бета-версии для Windows. MacOS и Linux. Но снимок бета-версии доступен на стабильном канале.) Текущий прогресс документируется на странице рабочего стола.

Могу ли я использовать Flutter внутри моего существующего нативного приложения?

Да, узнайте больше в разделе add-to-app нашего веб-сайта. Кроме того, обратите внимание. Что экспериментальная поддержка добавления нескольких экранов или представлений флаттера доступна.

Могу ли я получить доступ к службам платформы и API, таким как датчики и локальное хранилище?

ДА. Flutter предоставляет разработчикам готовый доступ к некоторым специфичным для платформы сервисам и API из операционной системы. Однако мы хотим избежать проблемы “наименьшего общего знаменателя” с большинством кросс-платформенных API. Поэтому мы не собираемся создавать кросс-платформенные API для всех собственных сервисов и API.

Ряд платформенных сервисов и API имеют готовые пакеты, доступные на pub.dev. Использовать существующий пакет очень просто.

Наконец, мы рекомендуем разработчикам использовать асинхронную систему передачи сообщений Flutter для создания собственных интеграций с платформой и сторонними API. Разработчики могут предоставлять столько или меньше API платформы, сколько им нужно. И создавать слои абстракций. Которые лучше всего подходят для их проекта.

Могу ли я расширить и настроить входящие в комплект виджеты?

Абсолютно. Система виджетов Flutter была разработана таким образом. Чтобы ее можно было легко настроить.

Вместо того. Чтобы каждый виджет предоставлял большое количество параметров, Flutter охватывает композицию. Виджеты построены из небольших виджетов. Которые вы можете повторно использовать и комбинировать новыми способами. Чтобы сделать пользовательские виджеты. Например, вместо того. Чтобы создавать подклассы общего виджета кнопок, ElevatedButtonкомбинируйте виджет материалов с GestureDetectorвиджетом. Виджет Материал обеспечивает визуальный дизайн, а GestureDetectorвиджет обеспечивает дизайн взаимодействия.

Чтобы создать кнопку с пользовательским визуальным дизайном, вы можете объединить виджеты . Реализующие ваш визуальный дизайн, с aGestureDetector, который обеспечивает дизайн взаимодействия. Например, CupertinoButtonследует этому подходу и объединяет a GestureDetectorс несколькими другими виджетами. Которые реализуют его визуальный дизайн.

Композиция дает вам максимальный контроль над визуальным и интерактивным дизайном ваших виджетов. А также позволяет многократно использовать большой объем кода. В рамках фреймворка мы разложили сложные виджеты на части, которые отдельно реализуют визуальный дизайн. Взаимодействие и движение. Вы можете ремиксировать эти виджеты, как вам нравится. Чтобы сделать свои собственные пользовательские виджеты. Которые имеют полный диапазон выражения.

Зачем мне делиться кодом макета между iOS и Android?

Вы можете реализовать различные макеты приложений для iOS и Android. Разработчики могут свободно проверять мобильную ОС во время выполнения и визуализировать различные макеты. Хотя мы находим эту практику редкой.

Все больше и больше мы видим. Как макеты и дизайн мобильных приложений развиваются. Чтобы быть более ориентированными на бренд и унифицированными на разных платформах. Это подразумевает сильную мотивацию делиться макетом и кодом пользовательского интерфейса между iOS и Android.

Фирменный стиль и кастомизация эстетического дизайна приложения теперь становятся более важными. Чем строгое соблюдение традиционной эстетики платформы. Например, дизайн приложений часто требует пользовательских шрифтов, цветов, форм, движения и многого другого. Чтобы четко передать их фирменный стиль.

Мы также видим общие шаблоны компоновки. Развернутые в iOS и Android. Например, шаблон “нижняя навигационная панель” теперь можно естественным образом найти в iOS и Android. По — видимому. Наблюдается конвергенция дизайнерских идей между мобильными платформами.

Могу ли я взаимодействовать с языком программирования моей мобильной платформы по умолчанию?

Да, Flutter поддерживает вызов в платформу. Включая интеграцию с Java или Kotlin-кодом на Android. А также ObjectiveC или Swift-кодом на iOS. Это возможно с помощью гибкого стиля передачи сообщений. Когда приложение Flutter может отправлять и получать сообщения на мобильную платформу с помощью a BasicMessageChannel.

Узнайте больше о доступе к платформе и сторонним сервисам в Flutter with platform channels.

Вот пример проекта, который показывает. Как использовать канал платформы для доступа к информации о состоянии батареи на iOS и Android.

Поставляется ли Flutter с системой отражения / зеркал?

No. Dart включает dart:mirrorsв себя . Что обеспечивает отражение типа. Но поскольку приложения Flutter предварительно скомпилированы для производства. А двоичный размер всегда является проблемой для мобильных приложений. Эта библиотека недоступна для приложений Flutter.

Используя статический анализ. Мы можем вычеркнуть все. Что не используется (“тряска дерева”). Если вы импортируете огромную библиотеку Dart. Но используете только автономный двухстрочный метод. То вы платите только стоимость двухстрочного метода. Даже если эта библиотека Dart сама импортирует десятки и десятки других библиотек. Эта гарантия безопасна только в том случае, если Dart может идентифицировать путь кода во время компиляции. На сегодняшний день мы нашли другие подходы для конкретных потребностей. Которые предлагают лучший компромисс, например. Генерацию кода.

Как мне сделать интернационализацию (i18n), локализацию (l10n) и доступность (a11y) в Flutter?

Подробнее об i18n и l10n читайте в учебнике по интернационализации.

Подробнее об a11y читайте в документации по специальнымвозможностям .

Как написать параллельные и/или параллельные приложения для Flutter?

Флаттер поддерживает изоляты. Изоляты-это отдельные кучи в виртуальной машине Flutter. И они могут работать параллельно (обычно реализуются как отдельные потоки). Изоляты общаются. Посылая и получая асинхронные сообщения.

Посмотрите пример использования изолятов с флаттером.

Могу ли я запустить код Dart в фоновом режиме приложения Flutter?

Да, вы можете запускать код Dart в фоновом режиме как на iOS. Так и на Android Дополнительные сведения см. в статье free Medium Executing Dart in the Background with Flutter Plugins and Geofencing.

Могу ли я использовать JSON/XML/protobuffers и т. Д. с Флаттером?

Абсолютно. На pub.dev есть библиотеки для JSON, XML. Protobufs и многих других утилит и форматов.

Для получения подробной записи об использовании JSON с Flutter. Ознакомьтесь с учебником по JSON.

Могу ли я создавать 3D-приложения (OpenGL) с помощью Flutter?

Сегодня мы не поддерживаем 3D через OpenGL ES или что-то подобное. У нас есть долгосрочные планы по созданию оптимизированного 3D API, но сейчас мы сосредоточены на 2D.

Почему мой APK или IPA такой большой?

Обычно ресурсы. Включая изображения. Звуковые файлы. Шрифты и т. Д., Составляют основную часть APK или IPA. Различные инструменты в экосистемах Android и iOS могут помочь вам понять. Что находится внутри вашего APK или IPA.

Кроме того, не забудьте создать релизную сборку вашего APK или IPA с помощью инструментов Flutter. Сборка выпуска обычно намного меньше. Чем сборка отладки.

Узнайте больше о создании сборки выпуска вашего приложения для Androidи создании сборки выпуска вашего приложения для iOS. Кроме того, проверьте Измерение размера вашего приложения.

Работают ли приложения Flutter на Chromebook?

Мы видели, как приложения Flutter запускались на некоторых Хромбуках. Мы отслеживаем проблемы. Связанные с запуском Flutter на хромбуках.

Рамки

Почему метод build() находится в состоянии, а не в состоянии StatefulWidget?

Включение Widget build(BuildContext context)методаState, а не включение Widget build(BuildContext context. State state)методаStatefulWidget, дает разработчикам большую гибкость при создании подклассов StatefulWidget. Вы можете прочитать более подробное обсуждение документации API для State.build.

Где же язык разметки Flutter? Почему у Flutter нет синтаксиса разметки?

Пользовательские интерфейсы Flutter построены на императивном объектно-ориентированном языке (Dart. Тот же язык. Который использовался для создания фреймворка Flutter). Flutter не поставляется с декларативной разметкой.

Мы обнаружили. Что UIS. Динамически создаваемые с помощью кода. Обеспечивают большую гибкость. Например, мы обнаружили. Что для жесткой системы разметки трудно выразить и создать индивидуальные виджеты с индивидуальным поведением.

Мы также обнаружили. Что наш “первый код” лучше учитывает такие функции. Как горячая перезагрузка и динамическая адаптация среды.

Можно создать пользовательский язык. Который затем преобразуется в виджеты на лету. Поскольку методы сборки-это “просто код”, они могут делать все. Что угодно. Включая интерпретацию разметки и превращение ее в виджеты.

В моем приложении есть отладочный баннер/лента в правом верхнем углу. Почему я это вижу?

По умолчанию flutter runкоманда использует конфигурацию debug build.

Конфигурация отладки запускает ваш код Dart в виртуальной машине (виртуальной машине). Обеспечивая быстрый цикл разработки с горячей перезагрузкой (сборки релизов компилируются с использованием стандартных цепочек инструментов Android и iOS).

Конфигурация отладки также проверяет все утверждения. Что помогает вам отлавливать ошибки на ранних стадиях разработки. Но накладывает определенные затраты во время выполнения. Баннер “Debug” указывает на то. Что эти проверки включены. Вы можете запустить свое приложение без этих проверок, используя --profile--releaseфлаг или to flutter run.

Если ваша IDE использует плагин Flutter. Вы можете запустить приложение в режиме профиля или выпуска. Для IntelliJ используйте пункты меню или Release Mode.

Какую парадигму программирования использует фреймворк Flutter?

Flutter-это многопарадигмальная среда программирования. Многие методы программирования, разработанные за последние несколько десятилетий, используются в Flutter. Мы используем каждый из них там, где, по нашему мнению. Сильные стороны техники делают его особенно подходящим. Без особого порядка:

Композиция
Основная парадигма. Используемая Флаттером. Заключается в использовании небольших объектов с узкими областями поведения. Составленных вместе для получения более сложных эффектов. Иногда называемых агрессивной композицией. Большинство виджетов в библиотеке виджетов Flutter построены таким образом. Например, TextButtonкласс Material строится с использованием an IconTheme, an InkWell, a Padding, a Center, a Material, an AnimatedDefaultTextStyleи a ConstrainedBox. Он InkWellпостроен с использованием a GestureDetector. Он Materialстроится с использованием an AnimatedDefaultTextStyle, a NotificationListenerи an AnimatedPhysicalModel. И так далее. Это виджеты на всем пути вниз.
Функциональное программирование
Целые приложения могут быть построены только с StatelessWidgetпомощью s. Которые по сути являются функциями. Описывающими. Как аргументы сопоставляются с другими функциями. Достигая дна в примитивах. Которые вычисляют макеты или рисуют графику. (Такие приложения не могут легко иметь состояние, поэтому. Как правило. Неинтерактивны.) Например, Iconвиджет-это. По сути, функция. Которая отображает свои аргументы (color, icon, size) в примитивы макета. Кроме того, широко используются неизменяемые структуры данных. Включая всю Widgetиерархию классов. А также многочисленные вспомогательные классы. Такие как Rectи TextStyle. В меньшем масштабе, Дарт Iterable API, Который интенсивно использует функциональный стиль (map, reduce, where и т. Д.), Часто используется для обработки списков значений в рамках.
Событийно-ориентированное программирование
Пользовательские взаимодействия представлены объектами событий. Которые отправляются в обратные вызовы. Зарегистрированные в обработчиках событий. Обновления экрана запускаются аналогичным механизмом обратного вызова. ListenableКласс. Который используется в качестве основы анимационной системы. Формализует модель подписки на события с несколькими слушателями.
Объектно-ориентированное программирование на основе классов
Большинство API-интерфейсов фреймворка построены с использованием классов с наследованием. Мы используем подход. При котором мы определяем очень высокоуровневые API в наших базовых классах. А затем итеративно специализируем их в подклассах. Например, наши объекты рендеринга имеют базовый класс (RenderObject), который не зависит от системы координат. А затем у нас есть подкласс (RenderBox), который вводит мнение. Что геометрия должна основываться на декартовой системе координат (x/width и y/height).
Объектно-ориентированное программирование на основе прототипов
ScrollPhysicsКласс связывает экземпляры. Чтобы составить физику. Которая применяется к динамической прокрутке во время выполнения. Это позволяет системе создавать, например. Физику подкачки с физикой конкретной платформы без необходимости выбора платформы во время компиляции.
Императивное программирование
Простое императивное программирование, обычно связанное с состоянием. Инкапсулированным в объект. Используется там. Где оно обеспечивает наиболее интуитивное решение. Например, тесты пишутся в императивном стиле, сначала описывая тестируемую ситуацию. Затем перечисляя инварианты. Которым должен соответствовать тест. Затем продвигая часы или вставляя события. Необходимые для теста.
Реактивное программирование
Деревья виджетов и элементов иногда описываются как реактивные. Поскольку новые входные данные. Предоставляемые в конструкторе виджета. Немедленно распространяются как изменения в виджеты более низкого уровня методом сборки виджета. А изменения. Внесенные в нижние виджеты (например. В ответ на ввод пользователя). Распространяются обратно вверх по дереву через обработчики событий. В фреймворке присутствуют аспекты как функционально-реактивного. Так и императивно-реактивного характера. В зависимости от потребностей виджетов. Виджеты с методами сборки. Которые состоят только из выражения. Описывающего. Как виджет реагирует на изменения в его конфигурации функциональными реактивными виджетами (например, Dividerкласс Material). Виджеты, методы сборки которых строят список дочерних элементов над несколькими операторами, описывая. Как виджет реагирует на изменения в его конфигурации. Являются императивными реактивными виджетами (например, Chipкласс).
Декларативное программирование
Методы построения виджетов часто представляют собой одно выражение с несколькими уровнями вложенных конструкторов. Написанных с использованием строго декларативного подмножества Dart. Такие вложенные выражения могут быть механически преобразованы в или из любого подходящего выразительного языка разметки. Например, UserAccountsDrawerHeaderвиджет имеет длинный метод построения (20+ строк). Состоящий из одного вложенного выражения. Это также может быть объединено с императивным стилем построения UIS. Который было бы труднее описать в чисто декларативном подходе.
Универсальное программирование
Типы могут быть использованы. Чтобы помочь разработчикам поймать ошибки программирования на ранней стадии. Фреймворк Flutter использует универсальное программирование. Чтобы помочь в этом отношении. Например, Stateкласс параметризуется в терминах типа связанного с ним виджета. Так что анализатор Dart может улавливать несоответствия состояний и виджетов. Аналогично, GlobalKeyкласс принимает параметр типа. Чтобы он мог получить доступ к состоянию удаленного виджета типобезопасным способом (используя проверку времени выполнения), Routeинтерфейс параметризуется типом. Который он должен использовать при выскакивании, и коллекциями. Такими как Lists, Maps и Setвсе они параметризованы таким образом. Что несовпадающие элементы могут быть обнаружены на ранней стадии либо во время анализа. Либо во время выполнения во время отладки.
Параллельное программирование
Flutter активно использует Futures и другие асинхронные API. Например, система анимации сообщает. Когда анимация завершается завершением будущего. Система загрузки изображений аналогичным образом использует фьючерсы для сообщения о завершении загрузки.
Программирование ограничений
Система компоновки в Flutter использует слабую форму программирования ограничений для определения геометрии сцены. Ограничения (например. Для декартовых коробок минимальная и максимальная ширина и минимальная и максимальная высота) передаются от родителя к потомку. И ребенок выбирает результирующую геометрию (например. Для декартовых коробок размер. В частности ширину и высоту). Которая удовлетворяет этим ограничениям. Используя эту технику. Флаттер обычно может выложить всю сцену за один проход.

Проект

Где я могу получить поддержку?

Если вы считаете. Что столкнулись с ошибкой. Запишите ее в наш трекер проблем. Вы также можете использовать переполнение стека для вопросов типа “HOWTOДля обсуждения присоединяйтесь к нашему списку рассылки по адресу flutter-dev@googlegroups.com или искать нас на Раздоре.

Для получения дополнительной информации посетите нашу страницу сообщества.

Как я могу быть вовлечен?

Flutter имеет открытый исходный код. И мы рекомендуем вам внести свой вклад. Вы можете начать с простой подачи вопросов для запросов функций и ошибок в наш трекер проблем.

Мы рекомендуем вам присоединиться к нашему списку рассылки по адресу flutter-dev@googlegroups.com и дайте нам знать. Как вы используете Flutter и что вы хотели бы с ним сделать.

Если вы заинтересованы в том. Чтобы внести свой вклад в код. Вы можете начать с чтения нашего Руководства по внесению вклада и ознакомиться с нашим списком простых стартовых проблем.

Наконец, вы можете связаться с полезными сообществами Flutter. Для получения дополнительной информации посетите нашу страницу сообщества.

Является ли Flutter открытым исходным кодом?

Да, Flutter-это технология с открытым исходным кодом. Вы можете найти проект на GitHub.

Какие лицензии на программное обеспечение применяются к Flutter и его зависимостям?

Flutter включает в себя два компонента: движок. Который поставляется в виде динамически связанного двоичного файла. И фреймворк Dart в виде отдельного двоичного файла. Который загружает двигатель. Движок использует несколько программных компонентов со многими зависимостями; просмотрите полный список в его файле лицензии.

Фреймворк полностью самодостаточен и требует только одной лицензии.

Кроме того, любые пакеты Dart. Которые вы используете, могут иметь свои собственные лицензионные требования.

Как я могу определить лицензии, которые должно показывать мое приложение Flutter?

Существует API для поиска списка лицензий. Которые вам нужно показать:

  • Если в вашем приложении есть a Drawer, добавьте an AboutListTile.

  • Если ваше приложение не имеет ящика. Но использует библиотеку компонентов материалов. Вызовите либо showAboutDialogили showLicensePage.

  • Для более индивидуального подхода вы можете получить необработанные лицензии от компании LicenseRegistry.

Кто работает на Флаттере?

Как и все мы! Flutter-это проект с открытым исходным кодом. В настоящее время основная часть разработки выполняется инженерами Google. Если вы в восторге от Flutter, мы рекомендуем вам присоединиться к сообществу и внести свой вклад в Flutter!

Каковы руководящие принципы Флаттера?

Мы считаем следующее:

  • Чтобы охватить каждого потенциального пользователя. Разработчикам необходимо ориентироваться на несколько мобильных платформ.
  • HTML и WebViews в том виде. В каком они существуют сегодня. Затрудняют последовательное попадание в высокие частоты кадров и обеспечивают высокую точность из-за автоматического поведения (прокрутка. Макет) и поддержки наследия.
  • Сегодня слишком дорого создавать одно и то же приложение несколько раз: для этого требуются разные команды. Разные базы кода. Разные рабочие процессы. Разные инструменты и т. Д.
  • Разработчикам нужен более простой и эффективный способ использования одной кодовой базы для создания мобильных приложений для нескольких целевых платформ. И они не хотят жертвовать качеством. Контролем или производительностью.

Мы сосредоточены на трех вещах:

Контроль
Разработчики заслуживают доступа и контроля над всеми уровнями системы. Что приводит к:
Производительность
Пользователи заслуживают совершенно текучих, отзывчивых, свободных от джанков приложений. Что приводит к:
Верность:
Каждый заслуживает точного, красивого. Восхитительного опыта работы с приложениями.

Откажется ли Apple от моего приложения Flutter?

Мы не можем говорить за Apple. Но их App Store содержит множество приложений. Созданных с использованием фреймворковых технологий. Таких как Flutter. Действительно. Flutter использует ту же фундаментальную архитектурную модель. Что и Unity, движок. Который поддерживает многие из самых популярных игр в Apple Store.

Apple часто показывала хорошо разработанные приложения. Созданные с помощью Flutter. Включая Hamilton и Reflectly.

Как и любое приложение, отправленное в Apple Store, приложения. Созданные с помощью Flutter. Должны следовать рекомендациям Apple по отправке в App Store.