Перейти к содержанию
Innovialabs

Что такое Flutter и как он работает

Основы3 мин

Коротко

Flutter — фреймворк от Google, который позволяет из одного кода на языке Dart собрать приложения для iOS, Android и других платформ. Он сам рисует весь интерфейс своим движком, поэтому приложение выглядит одинаково везде.

Коротко о Flutter

Flutter — открытый фреймворк от Google для создания приложений с одной кодовой базой. Основная сфера — мобильные приложения для iOS и Android, но тот же код можно собрать для веба и десктопа (Windows, macOS, Linux).

Ключевые идеи Flutter:

  • язык Dart;
  • интерфейс из виджетов, собранных в дерево;
  • собственный движок отрисовки вместо системных компонентов;
  • hot reload — изменения в коде видны в работающем приложении почти мгновенно.

Язык Dart

Dart — язык от Google со строгой типизацией и знакомым синтаксисом: разработчикам на Java, Kotlin, C# или TypeScript он покажется понятным за несколько дней.

Важная особенность — два режима компиляции:

  • во время разработки код выполняется так, чтобы изменения можно было подгружать на лету;
  • в релизной сборке код компилируется заранее (AOT) в машинный код устройства, поэтому приложение запускается и работает быстро.

В Dart встроена null safety: компилятор не дает случайно обратиться к пустому значению, что убирает целый класс ошибок.

Дерево виджетов

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

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Hello')),
        body: const Center(child: Text('Flutter')),
      ),
    );
  }
}

Интерфейс описывается декларативно: вы говорите, как экран должен выглядеть при текущих данных, а Flutter сам решает, что перерисовать при их изменении. Есть два базовых типа:

  • StatelessWidget — без собственного состояния (заголовок, иконка);
  • StatefulWidget — с состоянием, которое меняется (счетчик, форма, список с загрузкой).

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

Собственный движок отрисовки

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

Что это дает:

  • одинаковый вид на iOS и Android, без сюрпризов от разных версий ОС;
  • полный контроль над дизайном и анимациями;
  • плавную отрисовку сложных интерфейсов.

Цена — если нужен «системный» вид, его тоже нужно воспроизвести. Для этого во Flutter есть готовые наборы виджетов: Material (стиль Google) и Cupertino (стиль iOS).

Hot reload

Разработчик меняет код, сохраняет файл — и через секунду видит результат в запущенном приложении, не теряя текущего состояния: открытый экран, введенные данные остаются на месте. Это сильно ускоряет работу над интерфейсом и правки по замечаниям дизайнера.

Для изменений, которые затрагивают инициализацию приложения, используется hot restart — быстрый перезапуск со сбросом состояния.

Какие приложения подходят для Flutter

  • Бизнес-приложения: интернет-магазины, доставка, бронирование, личные кабинеты.
  • Приложения с ярким фирменным дизайном и богатыми анимациями.
  • MVP, которые нужно быстро выпустить сразу на iOS и Android.
  • Внутренние корпоративные приложения для сотрудников.

Ограничения

  • Размер приложения. Движок входит в сборку, поэтому минимальное приложение весит больше нативного аналога.
  • Новые функции ОС появляются с задержкой: их нужно дождаться в плагинах или подключить самостоятельно через нативный код (platform channels).
  • Специфичное железо и редкие SDK могут потребовать нативного модуля на Swift или Kotlin.
  • Веб-версия подходит для приложений, но не для контентных сайтов, где важны SEO и быстрая первая загрузка.
  • Dart почти не используется вне Flutter, поэтому кадры нужно искать именно под этот стек.

Частые вопросы

Для большинства задач — нет. Но для публикации, настройки сборок и редких нативных интеграций базовое понимание iOS и Android в команде очень желательно.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.