0Pricing
Flutter Mobile Development · Урок

Базовые виджеты компоновки

Освойте основные виджеты компоновки, такие как Row, Column, Container и Stack, чтобы создавать структурированные и адаптивные пользовательские интерфейсы.

«Базовые виджеты компоновки» — бесплатный урок Flutter Mobile Development на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Flutter Mobile Development, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Flutter Mobile Development содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Why Layouts Matter

In Flutter, everything is a widget! To build complex and beautiful user interfaces, you need to arrange these widgets on the screen.

Layout widgets are special widgets designed to help you organize other widgets, defining their size, position, and how they interact with each other.

Meet the Container

The Container widget is one of the most versatile layout widgets. Think of it as a customizable box that can hold a single child widget.

You can use it to:

  • Add padding or margins
  • Set background colors or decorations
  • Define specific width and height
  • Transform its position or rotation

Simple Colored Box

Let's create a basic Container with a child Text widget. Notice how we set its color and padding.

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('Container Demo')),
        body: Center(
          child: Container(
            padding: const EdgeInsets.all(20.0),
            color: Colors.blueAccent,
            child: const Text(
              'Hello from Container!',
              style: TextStyle(color: Colors.white, fontSize: 18),
            ),
          ),
        ),
      ),
    );
  }
}

Horizontal with Row

When you need to arrange multiple widgets side-by-side horizontally, the Row widget is your go-to. It takes a list of widgets as its children.

Row automatically tries to fit its children along the horizontal axis, and you can control their alignment within the row.

Row of Buttons

Here's how you can place three buttons next to each other using a Row. We'll add some spacing between them.

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('Row Demo')),
        body: Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              ElevatedButton(onPressed: () {}, child: const Text('Button 1')),
              ElevatedButton(onPressed: () {}, child: const Text('Button 2')),
              ElevatedButton(onPressed: () {}, child: const Text('Button 3')),
            ],
          ),
        ),
      ),
    );
  }
}

Vertical with Column

Just as Row arranges widgets horizontally, the Column widget arranges them vertically, one below the other.

It also takes a list of children and lets you control their vertical alignment.

Stacked Text Fields

Let's create a simple login-like form using a Column to stack two TextFields and a button vertically.

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('Column Demo')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              const Padding(
                padding: EdgeInsets.all(8.0),
                child: TextField(
                  decoration: InputDecoration(labelText: 'Username'),
                ),
              ),
              const Padding(
                padding: EdgeInsets.all(8.0),
                child: TextField(
                  obscureText: true,
                  decoration: InputDecoration(labelText: 'Password'),
                ),
              ),
              ElevatedButton(onPressed: () {}, child: const Text('Login')),
            ],
          ),
        ),
      ),
    );
  }
}

Aligning Children

Both Row and Column use two important properties for alignment:

  • mainAxisAlignment: How children are positioned along the primary axis (horizontal for Row, vertical for Column). Examples: start, center, end, spaceAround.
  • crossAxisAlignment: How children are positioned along the perpendicular axis (vertical for Row, horizontal for Column). Examples: start, center, end, stretch.

These give you fine control over your layouts!

Overlapping with Stack

Sometimes you need to place widgets on top of each other, like text over an image. That's where the Stack widget comes in.

Stack allows you to layer multiple children widgets. You can control their exact position within the stack using the Positioned widget.

Image with Text Overlay

Let's put some text directly on top of an image using a Stack. We'll use Positioned to place the text precisely.

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('Stack Demo')),
        body: Center(
          child: SizedBox(
            width: 300,
            height: 200,
            child: Stack(
              children: <Widget>[
                Image.network(
                  'https://picsum.photos/300/200',
                  fit: BoxFit.cover,
                ),
                const Positioned(
                  bottom: 10,
                  left: 10,
                  child: Text(
                    'Beautiful Scenery',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 20,
                      fontWeight: FontWeight.bold,
                      shadows: [
                        Shadow(blurRadius: 5, color: Colors.black)
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

Layout Challenge

Which of the following widgets are primarily used for arranging multiple children widgets in a single direction (either horizontally or vertically)?

Layouts Mastered!

Great job! You've now mastered the fundamental layout widgets in Flutter:

  • Container: A versatile box for single children, offering padding, margin, color, and size control.
  • Row: Arranges multiple children horizontally.
  • Column: Arranges multiple children vertically.
  • Stack: Layers children on top of each other, often used with Positioned.

Understanding these is key to building any Flutter UI!

Часто задаваемые вопросы

Урок «Базовые виджеты компоновки» бесплатный?

Да — полный текст урока «Базовые виджеты компоновки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Flutter Mobile Development, подпишись на CoddyKit PRO. Курс Flutter Mobile Development содержит 4 уроков всего.

Чему я научусь в уроке «Базовые виджеты компоновки»?

Освойте основные виджеты компоновки, такие как Row, Column, Container и Stack, чтобы создавать структурированные и адаптивные пользовательские интерфейсы. Ты практикуешь Flutter Mobile Development с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Flutter Mobile Development?

Предыдущий опыт не требуется. Flutter Mobile Development на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Базовые виджеты компоновки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Flutter Mobile Development?

Да. Каждый урок Flutter Mobile Development включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Виджеты Stateless и Stateful
  2. Базовые виджеты компоновки
  3. Интерактивные элементы интерфейса
  4. Создание прокручиваемых списков с ListView
← Назад к Flutter Mobile Development