build method

  1. @override
Widget build(
  1. BuildContext context
)
override

Describes the part of the user interface represented by this widget.

Implementation

@override
Widget build(BuildContext context) {
  if (!isOpen) {
    updateSelectedIndex();
  }

  final currentItem = widget.items.firstWhere(
    (item) => item.value == widget.value,
    orElse: () => widget.items.first,
  );

  final displayWidget = widget.value != null
      ? currentItem.child
      : (widget.hint ?? const Text('Select...'));

  return Focus(
    focusNode: _focusNode,
    onFocusChange: (hasFocus) {
      if (mounted) setState(() {});
    },
    onKeyEvent: (event) {
      return handleKeyEvent(event);
    },
    child: _DropdownButtonRenderWidget(
      displayWidget: displayWidget,
      isOpen: isOpen,
      focused: _focusNode.hasFocus || widget.focused,
      style: widget.style,
      onRender: (bounds) {
        if (buttonBounds != bounds) {
          buttonBounds = bounds;
          if (isOpen && overlayEntry != null) {
            overlayEntry?._overlayState?.setState(() {});
          }
        }
      },
      onAction: toggleDropdown,
      onKey: handleKeyEvent,
    ),
  );
}