searchfield icon indicating copy to clipboard operation
searchfield copied to clipboard

suggestions not updating if inside a modal

Open danilo1998271 opened this issue 1 year ago • 1 comments

Get.defaultDialog(
  navigatorKey: navigatorKey,
  onWillPop: () async {
    setState(() {
      selectedValue = null;
      selectedTimeslot = null;
      dateTimeSelected.value = "";
      userSelected.value = "";
    });
    return true;
  },
  title: "Add a booking",
  radius: 10.0,
  content: SingleChildScrollView(
    child: Container(
      padding: const EdgeInsets.symmetric(horizontal: 10),
      width: 400,
      child: Column(
        children: [
          const SizedBox(height: 10),
          SearchField(
            autofocus: true,
            onSubmit: (query) {
              setState(() {
                searchText = query;
                focus2.requestFocus();
                performSearch(query);
                filterSuggestions(searchText);
                // keepDropdownOpen();
              });
              return "";
            },
            onSearchTextChanged: (query) {
              setState(() {
                searchText = query;
              });
            },
            animationDuration: Duration.zero,
            showEmpty: isLoading,
            autovalidateMode: AutovalidateMode.onUserInteraction,
            validator: (value) {
              if (value == null || value.length < 4) {
                return '';
              }
              return null;
            },
            emptyWidget: Container(
              decoration: BoxDecoration(
                border: Border.all(color: Colors.grey),
                borderRadius: BorderRadius.circular(24),
              ),
              height: 250,
            ),
            // key: const Key('searchfield'),
            hint: 'Search suggestions',
            itemHeight: 70,
            scrollbarDecoration: ScrollbarDecoration(),
            onTapOutside: (x) {},
            suggestionStyle:
                const TextStyle(fontSize: 20, color: Colors.black),
            searchInputDecoration: InputDecoration(
              focusedBorder: OutlineInputBorder(
                borderRadius: BorderRadius.circular(24),
                borderSide: const BorderSide(
                  width: 1,
                  color: Colors.grey,
                  style: BorderStyle.solid,
                ),
              ),
              border: OutlineInputBorder(
                borderRadius: BorderRadius.circular(24),
                borderSide: const BorderSide(
                  width: 1,
                  color: Colors.black,
                  style: BorderStyle.solid,
                ),
              ),
              fillColor: Colors.white,
              contentPadding: const EdgeInsets.symmetric(horizontal: 20),
            ),
            suggestions: filterSuggestions(searchText),
            focusNode: focus2,
            suggestionState: Suggestion.expand,
            onSuggestionTap:
                (SearchFieldListItem<Map<String, String>> x) {},
          ),
          const SizedBox(height: 10),
          ElevatedButton(
            onPressed: submitBooking,
            child: const Text("Submit"),
          )
        ],
      ),
    ),
  ),
);

}

List<SearchFieldListItem<Map<String, String>>> filterSuggestions(
  String query,
) {
  final filter = suggestions.where((element) {
    final displayName = element['displayName']?.toLowerCase() ?? '';
    final email = element['email']?.toLowerCase() ?? '';
    return displayName.contains(query.toLowerCase()) ||
        email.contains(query.toLowerCase());
  }).toList();

  return filter
      .map(
        (e) => SearchFieldListItem<Map<String, String>>(
          e['email']!,
          child: buildSearchChild(e['displayName']!, e['email']!),
        ),
      )
      .toList();
}

danilo1998271 avatar Jul 19 '24 07:07 danilo1998271