DigitReactiveTypeAhead<T, V> constructor

DigitReactiveTypeAhead<T, V>({
  1. Key? key,
  2. String? formControlName,
  3. FormControl<T>? formControl,
  4. Map<String, ValidationMessageFunction>? validationMessages,
  5. ControlValueAccessor<T, V>? valueAccessor,
  6. ShowErrorsFunction? showErrors,
  7. SuggestionSelectionCallback<V>? onSuggestionSelected,
  8. required String stringify(
    1. V value
    ),
  9. V viewDataTypeFromTextEditingValue(
    1. String
    )?,
  10. required SuggestionsCallback<V> suggestionsCallback,
  11. required ItemBuilder<V> itemBuilder,
  12. SuggestionsBoxDecoration suggestionsBoxDecoration = const SuggestionsBoxDecoration(),
  13. Duration debounceDuration = const Duration(milliseconds: 300),
  14. WidgetBuilder? loadingBuilder,
  15. WidgetBuilder? noItemsFoundBuilder,
  16. ErrorBuilder? errorBuilder,
  17. AnimationTransitionBuilder? transitionBuilder,
  18. double animationStart = 0.25,
  19. Duration animationDuration = const Duration(milliseconds: 500),
  20. bool getImmediateSuggestions = false,
  21. double suggestionsBoxVerticalOffset = 5.0,
  22. AxisDirection direction = AxisDirection.down,
  23. bool hideOnLoading = false,
  24. bool hideOnEmpty = false,
  25. bool hideOnError = false,
  26. bool hideSuggestionsOnKeyboardHide = true,
  27. bool keepSuggestionsOnLoading = true,
  28. bool keepSuggestionsOnSuggestionSelected = false,
  29. bool autoFlipDirection = false,
  30. bool hideKeyboard = false,
  31. TextFieldConfiguration textFieldConfiguration = const TextFieldConfiguration(),
  32. SuggestionsBoxController? suggestionsBoxController,
  33. InputDecoration decoration = const InputDecoration(),
  34. TextInputType? keyboardType,
  35. TextCapitalization textCapitalization = TextCapitalization.none,
  36. TextInputAction? textInputAction,
  37. TextStyle? style,
  38. StrutStyle? strutStyle,
  39. TextDirection? textDirection,
  40. TextAlign textAlign = TextAlign.start,
  41. TextAlignVertical? textAlignVertical,
  42. bool autofocus = false,
  43. bool readOnly = false,
  44. bool? showCursor,
  45. bool obscureText = false,
  46. String obscuringCharacter = '•',
  47. bool autocorrect = true,
  48. V? initialValue,
  49. String? initialValueText,
})

Implementation

DigitReactiveTypeAhead({
  Key? key,
  String? formControlName,
  FormControl<T>? formControl,
  Map<String, ValidationMessageFunction>? validationMessages,
  ControlValueAccessor<T, V>? valueAccessor,
  ShowErrorsFunction? showErrors,
  SuggestionSelectionCallback<V>? onSuggestionSelected,
  required this.stringify,
  V Function(String)? viewDataTypeFromTextEditingValue,
  required SuggestionsCallback<V> suggestionsCallback,
  required ItemBuilder<V> itemBuilder,
  SuggestionsBoxDecoration suggestionsBoxDecoration =
      const SuggestionsBoxDecoration(),
  Duration debounceDuration = const Duration(milliseconds: 300),
  WidgetBuilder? loadingBuilder,
  WidgetBuilder? noItemsFoundBuilder,
  ErrorBuilder? errorBuilder,
  AnimationTransitionBuilder? transitionBuilder,
  double animationStart = 0.25,
  Duration animationDuration = const Duration(milliseconds: 500),
  bool getImmediateSuggestions = false,
  double suggestionsBoxVerticalOffset = 5.0,
  AxisDirection direction = AxisDirection.down,
  bool hideOnLoading = false,
  bool hideOnEmpty = false,
  bool hideOnError = false,
  bool hideSuggestionsOnKeyboardHide = true,
  bool keepSuggestionsOnLoading = true,
  bool keepSuggestionsOnSuggestionSelected = false,
  bool autoFlipDirection = false,
  bool hideKeyboard = false,
  TextFieldConfiguration textFieldConfiguration =
      const TextFieldConfiguration(),
  SuggestionsBoxController? suggestionsBoxController,
  InputDecoration decoration = const InputDecoration(),
  TextInputType? keyboardType,
  TextCapitalization textCapitalization = TextCapitalization.none,
  TextInputAction? textInputAction,
  TextStyle? style,
  StrutStyle? strutStyle,
  TextDirection? textDirection,
  TextAlign textAlign = TextAlign.start,
  TextAlignVertical? textAlignVertical,
  bool autofocus = false,
  bool readOnly = false,
  bool? showCursor,
  bool obscureText = false,
  String obscuringCharacter = '•',
  bool autocorrect = true,
  V? initialValue,
  String? initialValueText,
}) : super(
        key: key,
        formControl: formControl,
        formControlName: formControlName,
        valueAccessor: valueAccessor,
        validationMessages: validationMessages,
        showErrors: showErrors,
        builder: (field) {
          final state = field as _ReactiveTypeaheadState<T, V>;
          final effectiveDecoration = textFieldConfiguration.decoration
              .applyDefaults(Theme.of(state.context).inputDecorationTheme);

          state._setFocusNode(textFieldConfiguration.focusNode);
          final controller =
              textFieldConfiguration.controller ?? state._textController;
          if (initialValue != null && initialValueText != null) {
            controller.text = initialValueText;
            field.didChange(initialValue);
            onSuggestionSelected?.call(initialValue);
          }

          return TypeAheadField<V>(
            suggestionsCallback: suggestionsCallback,
            itemBuilder: itemBuilder,
            autoFlipListDirection: true,
            onSuggestionSelected: (value) {
              controller.text = stringify(value);
              field.didChange(value);

              onSuggestionSelected?.call(value);
            },
            textFieldConfiguration: textFieldConfiguration.copyWith(
              focusNode: textFieldConfiguration.focusNode ?? state.focusNode,
              controller: controller,
              decoration: effectiveDecoration.copyWith(
                errorText: state.errorText,
              ),
              onChanged: (value) {
                if (viewDataTypeFromTextEditingValue != null) {
                  field.didChange(
                      viewDataTypeFromTextEditingValue.call(value));
                }
              },
            ),
            suggestionsBoxDecoration: suggestionsBoxDecoration,
            debounceDuration: debounceDuration,
            suggestionsBoxController: suggestionsBoxController,
            loadingBuilder: loadingBuilder,
            noItemsFoundBuilder: noItemsFoundBuilder,
            errorBuilder: errorBuilder,
            transitionBuilder: transitionBuilder,
            animationStart: animationStart,
            animationDuration: animationDuration,
            getImmediateSuggestions: getImmediateSuggestions,
            suggestionsBoxVerticalOffset: suggestionsBoxVerticalOffset,
            direction: direction,
            hideOnLoading: hideOnLoading,
            hideOnEmpty: hideOnEmpty,
            hideOnError: hideOnError,
            hideSuggestionsOnKeyboardHide: hideSuggestionsOnKeyboardHide,
            keepSuggestionsOnLoading: keepSuggestionsOnLoading,
            keepSuggestionsOnSuggestionSelected:
                keepSuggestionsOnSuggestionSelected,
            autoFlipDirection: autoFlipDirection,
            hideKeyboard: hideKeyboard,
          );
        },
      );