👨‍💻
Flutter
  • 👨‍💻Flutter lessons
    • 🎨Flutter ui
      • 🚵‍♂️Travel app
        • 📱1. Lesson
        • 📱2.Lesson
      • 📚Books store
      • 🧑‍⚕️Doctor app
      • 🚖Taxi app
    • 🐦Основы Flutter
      • Page 1
      • Page 2
      • 🧑‍🏫Урок 1: Основные виджеты Flutter
        • Page
        • 🧩Container()
        • 🧩AppBar()
        • 🧩Text()
        • 🧩Icon()
        • 🧩Column()
        • 🧩Row()
        • 🧩TextButton()
        • 🧩ElevatedButton()
      • 🧑‍🏫Урок 2: Создаем UI
      • 🧑‍🏫Урок 3: Создаем UI
      • 🧑‍🏫Урок 4: Создаем UI
    • 🧩Основы dart
      • 🧑‍🏫01. Переменные часть 1
      • 🧑‍🏫01. Переменные часть 2
      • 🧑‍🏫02. Функции
      • 🧑‍🏫03. Условные операторы
      • 🧑‍🏫04. List
      • 🧑‍🏫05. Map
      • 🧑‍🏫06. Class
      • 🧑‍🏫07. Наследование
      • 🧑‍🏫08. Абстракция
      • 🧑‍🏫09. Интерфейсы
      • 🧑‍🏫10. Инкапсуляция
      • 🧑‍🏫11. Mixin
      • 🧑‍🏫12. Асинхронное программирование
      • 🧑‍🏫13. Streams
      • 🎯Final project
        • 🥦Grocery app
        • 🏠Home
    • ⚒️State management
      • ⬛Bloc
        • 1. Введение cubit
          • 1.1 Пример
          • 1.2 Пример
          • 1.3 Пример
          • 1.4 Пример
          • 1.5 Пример
        • 2. Введение в Bloc
      • 🌊Riverpod
    • 🏠Architechture
      • Clean Architechture
      • Bloc
    • 📲Locale storage
      • 🐝Hive
        • 🐝Ui
        • 🐝Hive - локальное хранилище: Введение
        • 🐝Hive - task app: часть 1
        • 🐝Hive - task app: часть 2
        • 🐝Hive - task app: часть 3
        • 🐝Hive - task app: часть 4
        • 🐝Hive - task app: часть 5
      • 🟩Sql
    • 📡Server
      • 📡Server - Lesson01 introduction
      • 📡Server - Lesson02 get data
      • 📡Server - Lesson03 News App get data
    • 🖥️Готовый backend
      • Firebase
      • Supabase
  • 🎯Dart practise
    • 🧑‍💻Переменные
      • 🧑‍💻String
      • 🧑‍💻int
      • 🧑‍💻double
      • 🧑‍💻bool
    • 🧑‍💻Функции
      • 🧑‍💻Обычные функции
      • 🧑‍💻Порядковые параметры
      • 🧑‍💻Обязательные параметры
      • 🧑‍💻Параметры по умолчанию
      • 🧑‍💻Функции-стрелки
      • 🧑‍💻Возвращаемые функции
    • 🧑‍💻Условные операторы
      • 🧑‍💻if/else
      • 🧑‍💻switch/case
      • 🧑‍💻тернарный оператор
    • 🧑‍💻Структура данных
      • 🧑‍💻List
      • 🧑‍💻Map
      • 🧑‍💻Set
    • 🧑‍💻ООП
  • 🧩Flutter Widgets
    • 💻Все виджеты
    • 🎞️Анимации
      • 🧩AnimatedContainer
      • 🧩AnimatedOpacity
      • 🧩AnimatedAlign
      • 🧩AnimatedCrossFade
      • 🧩Hero
      • 🧩AnimatedBuilder
      • 🧩AnimatedPositioned
      • 🧩AnimatedSwitcher
    • 🏗️Манипуляция пространством
      • 🧩Padding
      • 🧩SizedBox
      • 🧩Align
      • 🧩Center
      • 🧩Expanded
      • 🧩Flexible
      • 🧩Spacer
      • 🧩Column
      • 🧩Stack
      • 🧩Row
    • ✍️Отображение текста
      • 🧩RichText
      • 🧩FittedBox
      • 🧩SelectableText
      • 🧩Text
    • 📸Отображение изображений
      • 🧩Image()
      • 🧩Image.network
      • 🧩Image.asset
      • 🧩Image.file
      • 🧩Image.memory
      • 🧩FadeInImage
      • 🧩NetworkImage
      • 🧩AssetImage
    • 📃Списки и прокрутка
      • 🧩ListView()
      • 🧩ListView.builder()
      • 🧩GridView()
      • 🧩GridView.builder()
      • 🧩PageView()
      • 🧩SingleChildScrollView
      • 🧩CustomScrollView
      • 🧩ReorderableListView
      • 🧩NestedScrollView
    • ⌨️Кнопки
      • 🧩TextButton()
      • 🧩ElevatedButton()
      • 🧩IconButton()
      • 🧩DropDownButton()
      • 🧩FloatingActionButton
      • 🧩Checkbox
      • 🧩Radio
      • 🧩Switch
      • 🧩Slider
    • 📝Формы и ввод данных
      • 🧩TextField()
      • 🧩TextFormField
      • 🧩Form
      • 🧩FormField
      • 🧩DatePicker
      • 🧩TimePicker
    • 🧑‍🏫Диалоги и всплывающие окна
      • 🧩AlertDialog
      • 🧩SimpleDialog
      • 🧩BottomSheet
      • 🧩ExpansionPanel
      • 🧩SnackBar
      • 🧩PopupMenuButton
      • 🧩Tooltip
      • 🧩Dialog
    • 🛣️Навигация
      • 🧩BottomNavigationBar()
      • 🧩Navigator
      • 🧩Drawer
      • 🧩TabBar
    • 📱Отображение на экране
      • 🧩Scaffold
      • 🧩Container()
      • 🧩AppBar()
      • 🧩Icon()
      • 🧩Stepper()
  • 🎮Flutter Flame
    • Введение в разработку игр
  • 🔬Flutter projects
  • 🧑‍🎓Homeworks for everyday
    • 🧑‍🎓0. Переменные
    • 🧑‍🎓1. Функции - 1
    • 🧑‍🎓2. Функции - 2
    • 🧑‍🎓3. Условные операторы
    • 🧑‍🎓4. List
    • 🧑‍🎓5. Map
    • 🧑‍🎓6. class
    • 🐝Hive -
    • 🐝Hive clean architecture
    • 📡HTTP
    • 📡HTTP clean architecture
    • 💾Firebase
    • 💾Firebase clean architecture
Powered by GitBook
On this page
  1. Flutter Widgets
  2. Анимации

AnimatedSwitcher

PreviousAnimatedPositionedNextМанипуляция пространством

Last updated 6 months ago

Что такое AnimatedSwitcher

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

Пример использования

В этом примере мы создаем переключатель текста, который меняет свое значение с анимацией при нажатии на кнопку.

import 'package:flutter/material.dart';

class AnimatedSwitcherExample extends StatefulWidget {
  @override
  _AnimatedSwitcherExampleState createState() => _AnimatedSwitcherExampleState();
}

class _AnimatedSwitcherExampleState extends State<AnimatedSwitcherExample> {
  bool _showFirstText = true;

  void _toggleText() {
    setState(() {
      _showFirstText = !_showFirstText; // Меняем состояние
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('AnimatedSwitcher Example')),
      body: Center(
        child: AnimatedSwitcher(
          duration: Duration(seconds: 1),          // Пример: длительность анимации
          transitionBuilder: (Widget child, Animation<double> animation) {
            return FadeTransition(                   // Пример: анимация затухания
              opacity: animation,
              child: child,
            );
          },
          child: Text(
            _showFirstText ? 'Hello, World!' : 'Goodbye, World!', // Переключаемый текст
            key: ValueKey<bool>(_showFirstText),    // Уникальный ключ для каждого текста
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toggleText,
        child: Icon(Icons.swap_horiz),
      ),
    );
  }
}

Как работает код

  1. Состояние _showFirstText — булевый флаг, который определяет, какой текст отображается в данный момент. При нажатии кнопки его значение меняется.

  2. AnimatedSwitcher — оборачивает текстовый виджет и автоматически управляет анимацией при замене текста. Когда состояние меняется, новый виджет анимируется с помощью заданной длительности.

  3. transitionBuilder — здесь мы определяем, как будет выглядеть анимация. В данном случае используется FadeTransition, который делает текст плавно появляющимся и исчезающим.

  4. key — каждый текст имеет уникальный ключ, что позволяет AnimatedSwitcher корректно отслеживать, какой виджет был заменен.

Все настройки AnimatedSwitcher

  1. duration

    • Описание: Определяет, сколько времени будет длиться анимация при переключении между дочерними виджетами.

    • Пример:

      duration: Duration(seconds: 1)
    • Применение: Задает скорость перехода, влияя на общее впечатление от анимации.

  2. transitionBuilder

    • Описание: Функция, которая позволяет задать собственный эффект анимации для переключения. Она принимает дочерний виджет и анимацию.

    • Пример:

      transitionBuilder: (Widget child, Animation<double> animation) {
        return FadeTransition(
          opacity: animation,
          child: child,
        );
      }
    • Применение: Позволяет вам настраивать анимацию так, как вам нужно (например, делать затухание, перемещение или масштабирование).

  3. child

    • Описание: Виджет, который будет анимирован. Когда вы меняете его, AnimatedSwitcher запускает анимацию.

    • Пример:

      child: Text(
        _showFirstText ? 'Hello, World!' : 'Goodbye, World!',
        key: ValueKey<bool>(_showFirstText),
        style: TextStyle(fontSize: 24),
      )
    • Применение: Динамически изменяемый элемент интерфейса, который должен иметь уникальный ключ для корректной работы анимации.

  4. layoutBuilder

    • Описание: Позволяет вам настроить, как будет размещаться дочерний виджет во время анимации. Полезно, если вы хотите изменить поведение при смене размера.

    • Пример:

      layoutBuilder: (Widget currentChild, List<Widget> previousChildren) {
        return Stack(
          children: [
            ...previousChildren,
            currentChild,
          ],
        );
      }
    • Применение: Позволяет создавать более сложные анимации и эффекты при переключении виджетов.

Итог

AnimatedSwitcher — это мощный инструмент для создания плавных переходов между виджетами в вашем приложении. Он позволяет легко и быстро добавлять анимации к динамическим изменениям интерфейса, улучшая взаимодействие пользователей и делая приложение более привлекательным.

🧩
🎞️
🧩