import 'package:async_tools/async_tools.dart'; import 'package:awesome_extensions/awesome_extensions_flutter.dart'; import 'package:flutter/material.dart'; import '../../models/models.dart'; import '../views.dart'; const _kStyledDropdownChanged = 'kStyledDropdownChanged'; class StyledDropdown extends StatelessWidget { const StyledDropdown( {required List> items, required T value, String? decoratorLabel, Future Function(T)? onChanged, super.key}) : _items = items, _onChanged = onChanged, _decoratorLabel = decoratorLabel, _value = value; @override Widget build(BuildContext context) { final theme = Theme.of(context); final scheme = theme.extension()!; Widget ctrl = DropdownButton( isExpanded: true, padding: const EdgeInsets.fromLTRB(4, 0, 4, 0).scaled(context), focusColor: theme.focusColor, dropdownColor: scheme.primaryScale.elementBackground, iconEnabledColor: scheme.primaryScale.appText, iconDisabledColor: scheme.primaryScale.appText.withAlpha(127), items: _items, value: _value, style: theme.textTheme.labelLarge, onChanged: _onChanged == null ? null : (value) { if (value == null) { return; } singleFuture((this, _kStyledDropdownChanged), () async { await _onChanged(value); }); }); if (_decoratorLabel != null) { ctrl = ctrl .paddingLTRB(0, 4.scaled(context), 0, 4.scaled(context)) .decoratorLabel(context, _decoratorLabel); } return ctrl; } final List> _items; final String? _decoratorLabel; final Future Function(T)? _onChanged; final T _value; }