SmartSearchController<T, K> constructor
SmartSearchController<T, K> ({
- required SmartPaginationCubit<
T> cubit, - required PaginationRequest searchRequestBuilder(
- String query
- SmartSearchConfig config = const SmartSearchConfig(),
- ValueChanged<
T> ? onItemSelected, - ValueChanged<
K> ? onKeySelected, - T? initialSelectedValue,
- K? selectedKey,
- K keyExtractor(
- T item
- String selectedKeyLabelBuilder(
- 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);
}
}