[DEV] Added Custom Chip Selector
This commit is contained in:
@@ -37,6 +37,7 @@ class AstromicSelectors {
|
||||
void Function(List<T> selectedItems)? onChanged,
|
||||
//
|
||||
AstromicSelectorConfiguration? configuration,
|
||||
bool isCustom = false,
|
||||
//
|
||||
double? itemSpacing = 4,
|
||||
double? runSpacing = 8,
|
||||
@@ -49,8 +50,25 @@ class AstromicSelectors {
|
||||
required List<(T item, bool isEnabled)> items,
|
||||
required Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder,
|
||||
required Widget Function(T item) disabledItemBuilder,
|
||||
}) =>
|
||||
AstromicChipSelector(
|
||||
Widget Function(List<Widget> items)? groupBuilder,
|
||||
}) {
|
||||
assert(
|
||||
(!isCustom || groupBuilder != null),
|
||||
"You have to provide the group builder in a custom constructor.",
|
||||
);
|
||||
return isCustom
|
||||
? AstromicChipSelector.custom(
|
||||
initialSelectedValues: initialSelectedValues,
|
||||
onChanged: onChanged,
|
||||
//
|
||||
configuration: configuration,
|
||||
//
|
||||
items: items,
|
||||
itemBuilder: itemBuilder,
|
||||
disabledItemBuilder: disabledItemBuilder,
|
||||
groupBuilder: groupBuilder!,
|
||||
)
|
||||
: AstromicChipSelector(
|
||||
initialSelectedValues: initialSelectedValues,
|
||||
onChanged: onChanged,
|
||||
//
|
||||
@@ -64,3 +82,4 @@ class AstromicSelectors {
|
||||
disabledItemBuilder: disabledItemBuilder,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ class AstromicChipSelector<T> extends StatefulWidget {
|
||||
final List<T>? initialSelectedValues;
|
||||
final Function(List<T> selectedItems)? onChanged;
|
||||
//s1 -- Configuration
|
||||
final bool isCustom;
|
||||
final AstromicSelectorConfiguration? configuration;
|
||||
//s1 -- Style
|
||||
final double? itemSpacing;
|
||||
@@ -35,6 +36,7 @@ class AstromicChipSelector<T> extends StatefulWidget {
|
||||
//
|
||||
final Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder;
|
||||
final Widget Function(T item) disabledItemBuilder;
|
||||
final Widget Function(List<Widget> items)? groupBuilder;
|
||||
//!SECTION
|
||||
//
|
||||
AstromicChipSelector({
|
||||
@@ -44,6 +46,7 @@ class AstromicChipSelector<T> extends StatefulWidget {
|
||||
this.onChanged,
|
||||
//s1 -- Configuration
|
||||
this.configuration,
|
||||
this.isCustom = false,
|
||||
//s1 -- Style
|
||||
this.itemSpacing = 8,
|
||||
this.runSpacing = 8,
|
||||
@@ -51,14 +54,53 @@ class AstromicChipSelector<T> extends StatefulWidget {
|
||||
required this.items,
|
||||
required this.itemBuilder,
|
||||
required this.disabledItemBuilder,
|
||||
this.groupBuilder,
|
||||
}) : assert(
|
||||
(configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)),
|
||||
"Initial values are not all present in the items!",
|
||||
),
|
||||
assert(
|
||||
(!isCustom || groupBuilder != null),
|
||||
"You have to provide the group builder in a custom constructor.",
|
||||
),
|
||||
super(
|
||||
key: key,
|
||||
);
|
||||
|
||||
static AstromicChipSelector custom<T>({
|
||||
Key? key,
|
||||
//s1 -- Functionality
|
||||
final List<T>? initialSelectedValues,
|
||||
final Function(List<T> selectedItems)? onChanged,
|
||||
//s1 -- Configuration
|
||||
final AstromicSelectorConfiguration? configuration,
|
||||
//s1 -- Content
|
||||
required final List<(T item, bool isEnabled)> items,
|
||||
//
|
||||
required final Widget Function(T item, {bool isSelected, VoidCallback? onTap, VoidCallback? onClearTapped}) itemBuilder,
|
||||
required final Widget Function(T item) disabledItemBuilder,
|
||||
required final Widget Function(List<Widget> items) groupBuilder,
|
||||
}) {
|
||||
assert((configuration?.isNullable ?? true) || (initialSelectedValues != null && items.map((i) => i.$1).toList().containsAll(initialSelectedValues)),
|
||||
"Initial values are not all present in the items!");
|
||||
|
||||
//
|
||||
return AstromicChipSelector<T>(
|
||||
key: key,
|
||||
isCustom: true,
|
||||
//
|
||||
initialSelectedValues: initialSelectedValues,
|
||||
onChanged: onChanged,
|
||||
//
|
||||
configuration: configuration,
|
||||
//
|
||||
items: items,
|
||||
itemBuilder: itemBuilder,
|
||||
disabledItemBuilder: disabledItemBuilder,
|
||||
groupBuilder: groupBuilder,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
State<AstromicChipSelector<T>> createState() => _AstromicChipSelectorState<T>();
|
||||
}
|
||||
@@ -172,7 +214,9 @@ class _AstromicChipSelectorState<T> extends State<AstromicChipSelector<T>> {
|
||||
//!SECTION
|
||||
|
||||
//SECTION - Build Return
|
||||
return _configuration.isWrap
|
||||
return widget.isCustom && widget.groupBuilder != null
|
||||
? widget.groupBuilder!(baseChildren)
|
||||
: _configuration.isWrap
|
||||
? Wrap(
|
||||
spacing: widget.itemSpacing!,
|
||||
runSpacing: widget.runSpacing!,
|
||||
|
||||
Reference in New Issue
Block a user