SmartSearchController<T, K> constructor

SmartSearchController<T, K>({
  1. required SmartPaginationCubit<T> cubit,
  2. required PaginationRequest searchRequestBuilder(
    1. String query
    ),
  3. SmartSearchConfig config = const SmartSearchConfig(),
  4. ValueChanged<T>? onItemSelected,
  5. ValueChanged<K>? onKeySelected,
  6. T? initialSelectedValue,
  7. K? selectedKey,
  8. K keyExtractor(
    1. T item
    )?,
  9. String selectedKeyLabelBuilder(
    1. K key
    )?,
})

Implementation

SmartSearchController({
  required SmartPaginationCubit<T> cubit,
  required PaginationRequest Function(String query) searchRequestBuilder,
  SmartSearchConfig config = const SmartSearchConfig(),
  ValueChanged<T>? onItemSelected,
  ValueChanged<K>? onKeySelected,
  T? initialSelectedValue,
  K? selectedKey,
  K Function(T item)? keyExtractor,
  String Function(K key)? selectedKeyLabelBuilder,
})  : _cubit = cubit,
      _searchRequestBuilder = searchRequestBuilder,
      _config = config,
      _onItemSelected = onItemSelected,
      _onKeySelected = onKeySelected,
      _keyExtractor = keyExtractor,
      _selectedKeyLabelBuilder = selectedKeyLabelBuilder,
      _selectedItem = initialSelectedValue,
      _selectedKey = selectedKey ?? (initialSelectedValue != null && keyExtractor != null
          ? keyExtractor(initialSelectedValue)
          : null),
      _pendingKey = (selectedKey != null && initialSelectedValue == null ? selectedKey : null) as K? {
  _textController = TextEditingController();
  _focusNode = FocusNode();
  _textController.addListener(_onTextChanged);
  _focusNode.addListener(_onFocusChanged);

  // Listen to cubit state changes to sync pending keys with loaded data
  if (_pendingKey != null) {
    _cubitSubscription = _cubit.stream.listen(_onCubitStateChanged);
  }
}