Flutter Searchable DropdownMenu

Flutter မှာ searchable dropdown menu မှာ bugs ရှိ နေတယ်။ လက်ရှိ မှာ empty list ဖြစ်သွားရင် crash သွားကော။

Github မှာ issue တော့ ဖွင့်ထားတာ တွေ့တယ်။ အဲဒီမှာ လတ်တလော ဖြေရှင်းဖို့ solution လည်း ရှိတယ်။

https://github.com/flutter/flutter/issues/154532

Fixed လုပ်ပြီးပေမယ့် stable branch ကို မရောက်သေးဘူး။ flutter master brand ကို သုံးရင် build_runner က ပြသနာ တက်တော့ ပြောင်းလို့ မရတော့ quick fixed ပဲ သုံးရတယ်။ လက်ရှိ fix လုပ်ထားသည့် code ကို ရေးပြထားပါတယ်။ searchCallback ကို သုံးပြီး fix လုပ်ထားတာပါ။

import 'package:flutter/material.dart';

class SearchableDropDown<T> extends StatefulWidget {
  final List<DropdownMenuEntry<T>> dropdownMenuEntries;
  final void Function(T?) onSelected;

  const SearchableDropDown({
    required this.dropdownMenuEntries,
    required this.onSelected,
    super.key,
  });
  
  @override
  State<StatefulWidget> createState() {
    return _SearchableDropDownState<T>();
  }



}

class _SearchableDropDownState<T> extends State<SearchableDropDown<T>> {
  final TextEditingController _controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return DropdownMenu<T>(
      controller: _controller,
      width: double.infinity,
      menuHeight: 250,
      enableFilter: true,
      requestFocusOnTap: true,
      searchCallback: (entries, query) {
        final String searchText = _controller.value.text.toLowerCase();
        if (searchText.isEmpty) {
          return null;
        }
        final int index = entries.indexWhere(
            (DropdownMenuEntry<T> entry) =>
                entry.label.toLowerCase().contains(searchText));
        return index != -1 ? index : null;
      },
      dropdownMenuEntries: widget.dropdownMenuEntries,
      onSelected: widget.onSelected,
    );
  }
}