You can edit almost every page by Creating an account. Otherwise, see the FAQ.

Flutter (Программное обеспечение)

Материал из EverybodyWiki Bios & Wiki
Перейти к:навигация, поиск

Ошибка скрипта: Модуля «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, получила широкое признание.

Примечания[править]

  1. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  2. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  3. https://developers.googleblog.com/2018/09/flutter-release-preview-2-pixel-perfect.html
  4. https://github.com/flutter/flutter/wiki/Changelog
  5. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  6. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  7. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  8. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  9. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  10. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  11. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  12. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.
  13. Ошибка Lua в package.lua на строке 80: module 'Module:Languages' not found.

Ссылки[править]

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.



Read or create/edit this page in another language[править]