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. void onSelected(
    1. T item,
    2. K key
    )?,
  5. T? initialSelectedValue,
  6. K? selectedKey,
  7. K keyExtractor(
    1. T item
    )?,
  8. String selectedKeyLabelBuilder(
    1. K key
    )?,
})

Implementation

SmartSearchController({
  required SmartPaginationCubit<T> cubit,
  required PaginationRequest Function(String query) searchRequestBuilder,
  SmartSearchConfig config = const SmartSearchConfig(),
  void Function(T item, K key)? onSelected,
  T? initialSelectedValue,
  K? selectedKey,
  K Function(T item)? keyExtractor,
  String Function(K key)? selectedKeyLabelBuilder,
})  : _cubit = cubit,
      _searchRequestBuilder = searchRequestBuilder,
      _config = config,
      _onSelected = onSelected,
      _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);
  }

  // Fetch initial data if configured
  if (_config.fetchOnInit && _config.searchOnEmpty) {
    _performSearch('', force: true);
  }
}