SmartSearchMultiController<T, K> constructor

SmartSearchMultiController<T, K>({
  1. required SmartPaginationCubit<T> cubit,
  2. required PaginationRequest searchRequestBuilder(
    1. String query
    ),
  3. SmartSearchConfig config = const SmartSearchConfig(),
  4. ValueChanged<List<T>>? onSelectionChanged,
  5. ValueChanged<List<K>>? onKeysChanged,
  6. List<T>? initialSelectedValues,
  7. List<K>? selectedKeys,
  8. K keyExtractor(
    1. T item
    )?,
  9. String selectedKeyLabelBuilder(
    1. K key
    )?,
  10. int? maxSelections,
})

Implementation

SmartSearchMultiController({
  required SmartPaginationCubit<T> cubit,
  required PaginationRequest Function(String query) searchRequestBuilder,
  SmartSearchConfig config = const SmartSearchConfig(),
  ValueChanged<List<T>>? onSelectionChanged,
  ValueChanged<List<K>>? onKeysChanged,
  List<T>? initialSelectedValues,
  List<K>? selectedKeys,
  K Function(T item)? keyExtractor,
  String Function(K key)? selectedKeyLabelBuilder,
  int? maxSelections,
})  : _cubit = cubit,
      _searchRequestBuilder = searchRequestBuilder,
      _config = config,
      _onSelectionChanged = onSelectionChanged,
      _onKeysChanged = onKeysChanged,
      _keyExtractor = keyExtractor,
      _selectedKeyLabelBuilder = selectedKeyLabelBuilder,
      _selectedItems = List<T>.from(initialSelectedValues ?? []),
      _selectedKeys = _initializeSelectedKeys(
        initialSelectedValues,
        selectedKeys,
        keyExtractor,
      ),
      _pendingKeys = selectedKeys != null && initialSelectedValues == null
          ? Set<K>.from(selectedKeys)
          : <K>{},
      _maxSelections = maxSelections {
  _textController = TextEditingController();
  _focusNode = FocusNode();
  _textController.addListener(_onTextChanged);
  _focusNode.addListener(_onFocusChanged);

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