Kodokon kodokon.com

Всё - виджет: Text, Container и Icon

Пойми главную идею Flutter, дерево виджетов, на трёх базовых кирпичиках: Text, Container и Icon.

8 мин · 3 вопросов

Открыть этот урок в Kodokon

Во Flutter всё является виджетом. Виджет - это кирпичик интерфейса: описание кусочка того, что появляется на экране. Текст - виджет, иконка - виджет, отступ - виджет... и весь экран тоже! Чтобы построить интерфейс, ты вкладываешь виджеты друг в друга, как матрёшки. Вместе они образуют дерево виджетов: у каждого виджета есть родитель (тот, что его содержит) и иногда дети (те, кого содержит он). Вернёмся к нашей минимальной программе и посмотрим на её дерево.

DART
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(
      theme: ThemeData(useMaterial3: true),
      home: const Scaffold(
        body: Center(
          child: Text(
            "Everything is a widget!",
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}
Дерево: MaterialApp, затем Scaffold, Center и Text

Сверху вниз: MaterialApp настраивает всё приложение (тема, навигация) по правилам Material 3, визуального языка Google. Scaffold (буквально "строительные леса") задаёт структуру экрана: фон, необязательную панель заголовка... Center центрирует своего ребёнка, а Text показывает текст. Параметр style у Text принимает TextStyle, который задаёт размер (fontSize), цвет или насыщенность символов. Теперь познакомимся с Container - универсальной коробкой: прямоугольником, у которого ты управляешь размером, цветом и содержимым.

DART
import 'package:flutter/material.dart';

Widget buildYellowBox() {
  return Container(
    width: 200,
    height: 100,
    color: Colors.amber,
    child: const Center(
      child: Text("I'm inside a box"),
    ),
  );
}
Container: цветная коробка, которая держит ребёнка

Функция buildYellowBox возвращает виджет: разбивать интерфейс вот так на маленькие именованные кусочки - очень распространённая практика. Этот Container шириной 200 пикселей и высотой 100, красится в янтарно-жёлтый благодаря каталогу цветов Colors и держит центрированный текст. Третий базовый кирпичик: Icon, который показывает пиктограмму. Flutter поставляется с сотнями готовых иконок в каталоге Icons: звезда, сердце, домик...

DART
import 'package:flutter/material.dart';

Widget buildStar() {
  return const Icon(
    Icons.star,
    size: 48,
    color: Colors.orange,
  );
}
Оранжевая звезда размером 48 пикселей из каталога Icons

Запомни логику дерева: когда виджет принимает одного ребёнка, параметр называется child (так устроены Center и Container). В нашем первом примере Scaffold - родитель Center, который, в свою очередь, родитель Text. Flutter рисует экран, обходя это дерево сверху вниз. Если ты умеешь сказать, кто чей родитель, ты сможешь прочитать любой интерфейс Flutter.

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Что такое виджет во Flutter?
    • Кирпичик интерфейса, который описывает кусочек экрана
    • Файл конфигурации проекта
    • База данных, встроенная в телефон
  2. Какой виджет использовать, чтобы показать пиктограмму вроде звезды?
    • Text
    • Container
    • Icon
  3. В Center(child: Text("Hi")) какой виджет является родителем?
    • Text, потому что он написан последним
    • Center, потому что он держит Text в своём параметре child
    • Ни один: эти два виджета независимы