Flutter (Программное обеспечение)
Ошибка скрипта: Модуля «Unsubst» не существует.
Ошибка скрипта: Модуля «Основная статья» не существует.
Ошибка Lua в package.lua на строке 80: module 'Module:Yesno' not found.Ошибка скрипта: Модуля «Transclude» не существует.Шаблон:Карточка/название | |
---|---|
Шаблон:Wikidata | |
Шаблон:Wikidata |
Шаблон:Сортировка: по изображениямШаблон:ИТ:Общие проверки
Flutter — это SDK предназначенный для создания высокопроизводительных, высококачественных мобильных приложений для iOS и Android из единой кодовой базы, с открытым исходным кодом, созданный Google.[6] Flutter — решение для разработки кроссплатформенных мобильных приложений. Flutter написан на C, C++, Dart и Skia (движок для 2D-рендеринга). Также Flutter является основой создания приложений для Google Fuchsia.
История[править]
Первая версия Flutter была известна как «Sky» и работала в операционной системе Android. Он был представлен на саммите Dart Developer Summit в 2015 году, с заявленным намерением последовательно отображать 120 кадров в секунду.[7] Во время основного выступления на Google Developer Days в Шанхае Google анонсировала бета-версию — Flutter Release Preview 2, который является последним крупным выпуском до Flutter 1.0.[8] 4 декабря 2018 года на мероприятии Flutter Live была выпущена версия Flutter 1.0, обозначающая первую стабильную версию Framework.[9]
Архитектура[править]
Платформа Flutter организована в виде серии слоев, каждый из которых опирается на предыдущий.
Платформа Flutter состоит из следующих слоев:
- верхние слои — платформа Dart: Material, Cupertino, Widgets, Rendering, Animation, Painting, Gestures, Foundation;
- движок Flutter (C++): Skia, Dart, Text;
- встроенная платформа: Render Surface Setup, Native Plugins, Packaging, Thread Setup, Event Loop Interop.[10]
Платформа Dart[править]
Верхние слои каркаса используются чаще, чем нижние. Библиотеки являются частью базовой платформы Flutter и импортируются с использованием 'package: flutter / <library> .dart'
[11].
У данной платформы есть огромное количество библиотек, виджетов (виджеты для работы с ядром, анимацией, UI, виджеты реализующие текущий язык дизайна iOS/Android, локализации и многое другое). На сайте https://docs.flutter.io/index.html представлены все доступные для использования библиотеки. Библиотека Foundation, написанная на Dart, предоставляет базовые классы и функции, которые используются для конструирования приложений с использованием Flutter, таких как API для взаимодействия с движком.[12]
Также Flutter имеет богатое сообщество пакетов с открытым исходным кодом. Вы можете просмотреть эти пакеты на pub.dartlang.org
Цель разработчиков Flutter — помочь вам сделать больше с меньшим количеством кода. Например, слой «Material» создается путем составления основных виджетов из слоя «Widgets», а сам слой «Widgets» создается путем организации объектов более низкого уровня из слоя «Rendering».
Слои предлагают множество вариантов создания приложений. Flutter предоставляет свободу выбора: возможность создавать готовые виджеты, которые предоставляет Flutter, или создавать свои собственные виджеты, используя те же инструменты и методы, которые использовала команда Flutter для создания инфраструктуры. При разработке приложений чувствуются преимущества продуктивности высокоуровневой унифицированной концепции виджетов, не жертвуя возможностью погружения так глубоко, в нижние уровни.
Движок Flutter, написанный в основном на C++, обеспечивает низкоуровневую поддержку рендеринга с использованием графической библиотеки Skia от Google. Кроме того, он взаимодействует с моделью для конкретной платформы SDK, такими как Android и iOS.
Виджеты[править]
Виджеты — это центральная иерархия классов в структуре Flutter. Виджет является неизменным описанием части пользовательского интерфейса. Сами виджеты не имеют изменяемого состояния (все их поля должны быть конечными). Если вы хотите связать изменяемое состояние с виджетом, рассмотрите возможность использования StatefulWidget, который создает объект State (через StatefulWidget.createState) всякий раз, когда он создается и включается в дерево. Данный виджет может быть включен в дерево ноль или более раз. В частности, данный виджет может быть размещен в дереве несколько раз.
Widget({Key key })
Свойство key управляет тем, как один виджет заменяет другой виджет в дереве. Если свойства runtimeType и key двух виджетов имеют оператор ==, соответственно, то новый виджет заменяет старый виджет, обновляя базовый элемент (то есть вызывая Element.update с новым виджетом). В противном случае старый элемент удаляется из дерева, новый виджет преобразуется в элемент, а новый элемент вставляется в дерево.
Основные 3 типа виджетов на которых строится все приложение:
- StatefulWidget — виджет с изменяемым состоянием. Состояние — это информация, которая может быть прочитана синхронно при построении виджета, и может измениться в течение времени жизни виджета. Чтобы уведомить об изменении состояния виджета — необходимо задать State.setState. Пример:
class YellowBird extends StatefulWidget {
const YellowBird({ Key key }) : super(key: key);
@override _YellowBirdState createState() =>
_YellowBirdState();
}
class _YellowBirdState extends State<YellowBird> {
@override Widget build(BuildContext context) {
return Container(color: const Color(0xFFFFE306));
}
}
- StatelessWidget, для виджетов, которые всегда строятся одинаково, учитывая конкретную конфигурацию и окружающее состояние. Пример:
class GreenFrog extends StatelessWidget {
const GreenFrog({ Key key }) : super(key: key);
@override Widget build(BuildContext context) {
return Container(color: const Color(0xFF2DBD3A));
}
}
- InheritedWidget, для виджетов, которые вводят окружающее состояние, которое может быть прочитано виджетами-потомками (аналог пробрасывания props в ReactNative). Пример:
class FrogColor extends InheritedWidget {
const FrogColor({
Key key,
@required this.color,
@required Widget child,
}) : assert(color != null),
assert(child != null),
super(key: key, child: child);
final Color color;
static FrogColor of(BuildContext context) {
return context.inheritFromWidgetOfExactType(FrogColor);
}
@override bool updateShouldNotify(FrogColor old) => color != old.color;
}
UI — тоже код![править]
Для любых UI-элементов есть свой виджет.
Пример простого приложения:
import 'package:flutter/material.dart';
void main() {
runApp(
Center(
child:
Text('Hello, world!', textDirection: TextDirection.ltr,
),
),
);
}
Больше информации об использовании данных виджетов в официальной документации.
Hot-reload[править]
Примечательной особенностью платформы Dart является её поддержка «Hot-reload», при которой изменения в исходных файлах могут быть внедрены в работающее приложение. Flutter расширяет это, поддерживая горячую перезагрузку с сохранением состояния, где в большинстве случаев изменения в исходном коде могут быть немедленно отражены в работающем приложении, не требуя перезапуска или потери состояния.[13] Эта функция, реализованная во Flutter, получила широкое признание.
Примечания[править]
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ https://developers.googleblog.com/2018/09/flutter-release-preview-2-pixel-perfect.html
- ↑ https://github.com/flutter/flutter/wiki/Changelog
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
- ↑ Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
Ссылки[править]
- Ошибка скрипта: Модуля «URL» не существует. — официальный сайт Шаблон:Сначала имя
This article "Flutter." is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Flutter.. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.