Menu
CoddyTech

Расположить виджеты друг над другом

Часть раздела Адаптивная компоновка путешествия по Flutter на Coddy. Урок 10 из 30.

Column располагает дочерние элементы друг под другом, а Row — рядом друг с другом. Stack располагает их друг на друге, как листы бумаги на столе:

Stack(
  children: [
    Container(height: 200, color: Colors.grey),
    const Text('On top'),
  ],
)

Первый дочерний элемент рисуется первым, внизу. Каждый следующий дочерний элемент рисуется поверх предыдущих. Поэтому фотография идёт первой, а расположенная на ней надпись — последней.

Дочерние элементы начинаются в левом верхнем углу Stack, а сам Stack имеет размер своего самого большого дочернего элемента. Так на изображении размещаются значок, надпись или кнопка воспроизведения.

challenge icon

Задание

Легко

Значок SALE находится под фотографией. Помести его на фотографию: замени Column, содержащий оба элемента, на Stack, чтобы значок отображался поверх.

Попробуйте сами

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(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(title: const Text('Shop')),
        body: Padding(
          padding: const EdgeInsets.all(16),
          child: Column(
            children: [
              Column(
                children: [
                  Container(
                    height: 200,
                    color: Colors.blueGrey.shade100,
                    child: const Center(child: Icon(Icons.image, size: 64)),
                  ),
                  Container(
                    padding: const EdgeInsets.all(8),
                    color: Colors.red,
                    child: const Text('SALE', style: TextStyle(color: Colors.white)),
                  ),
                ],
              ),
              const SizedBox(height: 12),
              const Text('Running shoes', style: TextStyle(fontSize: 20)),
            ],
          ),
        ),
      ),
    );
  }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Адаптивная компоновка

Потренируйтесь самостоятельно: Онлайн-компилятор Flutter