👨‍💻
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. Кнопки

DropDownButton()

PreviousIconButton()NextFloatingActionButton

Last updated 6 months ago

Что такое DropdownButton

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

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

Вот пример того, как можно использовать DropdownButton в приложении Flutter:

import 'package:flutter/material.dart';

class DropdownButtonExample extends StatefulWidget {
  const DropdownButtonExample({super.key});

  @override
  _DropdownButtonExampleState createState() => _DropdownButtonExampleState();
}

class _DropdownButtonExampleState extends State<DropdownButtonExample> {
  String? selectedValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('DropdownButton Example')),
      body: Center(
        child: DropdownButton<String>(
          hint: const Text('Select an option'), // Подсказка
          value: selectedValue, // Выбранное значение
          items: <String>['Option 1', 'Option 2', 'Option 3']
              .map<DropdownMenuItem<String>>((String value) {
            return DropdownMenuItem<String>(
              value: value,
              child: Text(value),
            );
          }).toList(),
          onChanged: (String? newValue) {
            setState(() {
              selectedValue = newValue; // Обновление состояния при выборе
            });
          },
        ),
      ),
    );
  }
}

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

  1. DropdownButton: Основной виджет для выпадающего списка.

  2. hint: Текст, который отображается, если выбранное значение отсутствует.

  3. value: Текущее выбранное значение. Если оно не установлено, будет отображен текст подсказки.

  4. items: Список элементов выпадающего меню. Каждый элемент создаётся с помощью DropdownMenuItem.

  5. onChanged: Функция, которая вызывается, когда пользователь выбирает новый элемент из списка. Здесь мы обновляем состояние с помощью setState.

Зачем это нужно

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

  • Формы с выбором значений.

  • Настройки, где пользователь может выбирать опции.

  • Фильтрация контента.

1. items

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

// Some code
DropdownButton<String>(
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
)

2. value

Текущее выбранное значение. Оно должно совпадать с одним из значений в items.

// Some code
String dropdownValue = 'one';

DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {
    setState(() {
      dropdownValue = newValue!;
    });
  },
)

3. onChanged

Функция, которая вызывается при выборе нового значения. Здесь вы можете обновить состояние или выполнить другие действия.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {
    setState(() {
      dropdownValue = newValue!;
    });
  },
)

4. hint

Подсказка, которая отображается, если нет выбранного значения (если value равно null).

// Some code
DropdownButton<String>(
  hint: Text('Выберите число'),
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
)

5. disabledHint

Подсказка, которая отображается, если выпадающий список отключен (если onChanged равно null).

// Some code
DropdownButton<String>(
  value: dropdownValue,
  disabledHint: Text('Недоступно'),
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: null, // Отключено
)

6. icon

Иконка, которая отображается рядом с выбранным значением. По умолчанию это стрелка вниз.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  icon: Icon(Icons.arrow_drop_down_circle),
)

7. iconSize

Размер иконки (по умолчанию 24.0).

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  iconSize: 30.0,
)

8. isDense

Определяет, будет ли элемент списка более компактным.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  isDense: true,
)

9. isExpanded

Определяет, будет ли кнопка занимать всю доступную ширину.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  isExpanded: true,
)

10. underline

Виджет, который отображается под кнопкой (по умолчанию это линия).

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  underline: Container(
    height: 2,
    color: Colors.deepPurpleAccent,
  ),
)

11. style

Стиль текста для выбранного значения.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  style: TextStyle(color: Colors.blue, fontSize: 18),
)

12. dropdownColor

Цвет фона выпадающего списка.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  dropdownColor: Colors.red,
)

13. focusColor

Цвет фокуса для кнопки.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  focusColor: Colors.greenAccent,
)

14. autofocus

Автоматически устанавливает фокус на элементе при загрузке экрана.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  autofocus: true,
)

15. selectedItemBuilder

Позволяет кастомизировать вид элементов, отображаемых в основном виджете, когда они выбраны.

// Some code
DropdownButton<String>(
  value: dropdownValue,
  items: [
    DropdownMenuItem(value: 'one', child: Text('Один')),
    DropdownMenuItem(value: 'two', child: Text('Два')),
  ],
  onChanged: (String? newValue) {},
  selectedItemBuilder: (BuildContext context) {
    return ['Один', 'Два'].map((String value) {
      return Text(
        value,
        style: TextStyle(color: Colors.red),
      );
    }).toList();
  },
)

🧩
⌨️
🧩