# TimePicker

#### TimePicker в Flutter

**Что такое TimePicker?**

`TimePicker` — это диалоговое окно в Flutter, позволяющее пользователю выбрать время (часы и минуты). Это полезно, когда приложение требует, чтобы пользователь указал определённое время, например, для будильника, напоминания или бронирования.

**Аналогия:** Представьте себе обычные часы со стрелками, на которых можно установить время. `TimePicker` работает примерно так же: он открывает интерфейс, где вы выбираете нужные вам часы и минуты, после чего возвращает выбранное время в приложении.

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

```dart
Future<void> _selectTime(BuildContext context) async {
  final TimeOfDay? picked = await showTimePicker(
    context: context,
    initialTime: TimeOfDay.now(),
  );
  if (picked != null) {
    print("Выбранное время: ${picked.format(context)}");
  }
}
```

В этом примере используется функция `showTimePicker`, которая открывает диалоговое окно для выбора времени. `initialTime` устанавливает начальное время, которое отображается при открытии.

#### Пояснение кода

1. `Future<void>` — функция асинхронная, так как `showTimePicker` возвращает `Future`, который выполняется, когда пользователь выбирает время или закрывает окно.
2. `TimeOfDay.now()` — устанавливает текущее время по умолчанию в `TimePicker`.
3. `picked?.format(context)` — преобразует выбранное время в строку формата времени.

***

#### Все настройки TimePicker с пояснениями и примерами

**1. `BuildContext context`**

**Описание:** Контекст, необходимый для отображения диалогового окна в нужной части иерархии виджетов. **Пример:**

```dart
showTimePicker(
  context: context,
  initialTime: TimeOfDay.now(),
)
```

***

**2. `required TimeOfDay initialTime`**

**Описание:** Устанавливает начальное время, отображаемое при открытии диалогового окна. **Пример:**

```dart
initialTime: TimeOfDay(hour: 10, minute: 30) // Начальное время — 10:30
```

***

**3. `bool useRootNavigator = true`**

**Описание:** Определяет, должен ли `TimePicker` использовать корневой навигатор. Полезно при наличии нескольких навигаторов в приложении. **Пример:**

```dart
useRootNavigator: false // Использует ближайший навигатор
```

***

**4. `RouteSettings? routeSettings`**

**Описание:** Настройки для маршрута, по которому открывается диалоговое окно. **Пример:**

```dart
routeSettings: RouteSettings(name: "timePicker") // Имя маршрута для TimePicker
```

***

**5. `TextDirection? textDirection`**

**Описание:** Устанавливает направление текста, может быть `ltr` (слева направо) или `rtl` (справа налево). **Пример:**

```dart
textDirection: TextDirection.rtl // Текст отображается справа налево
```

***

**6. `bool builder`**

**Описание:** Позволяет настраивать стиль или обернуть `TimePicker` в другие виджеты, используя кастомный `WidgetBuilder`. **Пример:**

```dart
builder: (context, child) {
  return Theme(
    data: ThemeData.dark(), // Применяет тёмную тему к TimePicker
    child: child!,
  );
}
```

***

**7. `bool initialEntryMode = TimePickerEntryMode.dial`**

**Описание:** Определяет начальный режим выбора времени: `dial` для выбора с помощью циферблата и `input` для ввода времени с клавиатуры. **Пример:**

```dart
dartКопировать кодinitialEntryMode: TimePickerEntryMode.input // Открывает клавиатуру для ввода 
```
