checkbox_grouped
* grouped (checkbox/radioButton)
* customisable grouped checkbox
* grouped chips
* grouped switch
* recuperate the actual selection
* make multiple selection
* dialogGroupedCheckbox
* list of groupedCheckbox
* list of customisable groupedCheckbox
* select/deselect items pragrammatically
Getting Started
Installing
Add the following to your pubspec.yaml
file:
dependencies:
checkbox_grouped: ^2.0.0
Simple Usage
Creating a basic SimpleGroupedCheckbox
SimpleGroupedCheckbox<int>(
controller: controller,
itemsTitle: ["1" ,"2","4","5"],
values: [1,2,4,5],
groupStyle: GroupStyle(
activeColor: Colors.red,
itemTitleStyle: TextStyle(
fontSize: 13
)
),
checkFirstElement: false,
)
Declare GroupController to get selection and enabled/disabled Items
GroupController controller = GroupController();
GroupController
Properties |
Description |
isMultipleSelection |
(bool) enable multiple selection in grouped checkbox (default:false). |
initSelectedItem |
(List) A Initialize list of values that will be selected in grouped. |
Get current selection
final selectedItems = controller.selectedItem;
enable items
controller.enableAll();
disable all items
controller.disableAll();
enabled items
controller.enabledItemsByValues(List<T> values);
controller.enabledItemsByTitles(List<String> itemsTitles);
disable item
controller.disabledItemsByValues(List<T> values);
controller.disabledItemsByTitles(List<String> items)
listener to changed values
listener will be removed automatically when widget call dispose
controller.listen((v) {
print("$v");
});
select/selectValues
select one item in single selection or multiple selection
selectValues work only in group when isMultiSelection is true
controller.select(value);
or
controller.selectValues([value]);
selectAll/selectValues
select all or some items in multiple selection group
controller.selectAll();
or
controller.selectValues([values]);
deselectAll/deselectValues
deselect all or some items in multiple selection group
controller.deselectAll();
or
controller.deselectValues([values]);
NOTICE
- those method
disabledItems
and enabledItems
has been removed
- if you are using complex object in values , you need to implement operator == and hashcode
SimpleGroupedCheckbox
Properties |
Description |
controller |
(required) Group Controller to recuperate selectionItems and disable or enableItems. |
activeColor |
(deprecated) The color to use when a CheckBox is checked. |
itemsTitle |
(required) A list of strings that describes each checkbox button. Each label must be distinct. |
itemsSubTitle |
A list of strings that describes second Text. |
onItemSelected |
Callback fire when the user make selection |
disableItems |
Specifies which item should be disabled. The strings passed to this must match the Titles |
values |
(required) Values contains in each element. |
checkFirstElement |
make first element in list checked . |
isExpandableTitle |
enable group checkbox to be expandable . |
groupTitle |
Text title for group checkbox . |
groupTitleStyle |
(deprecated) TextStyle of title for group checkbox . |
helperGroupTitle |
(bool) hide/show checkbox in title to help all selection or de-selection,use it when you want to disable checkbox in groupTitle default:true . |
groupTitleAlignment |
(Alignment) alignment of group title in group checkbox . |
groupStyle |
(GroupStyle) the style that should be applied on GroupedTitle,ItemTile,SubTitle . |
Customisable Checkbox Grouped
Creating a basic CustomGroupedCheckbox
CustomGroupedCheckbox<int>(
controller:customController,
groupTitle: "Custom GroupedCheckbox",
itemBuilder: (ctx,index,value,isDisabled){
return Card(
child: Row(
children: <Widget>[
Expanded(
child: Align(
alignment: Alignment.centerLeft,
child: Text("$index"),
),
),
Opacity(
opacity: v?1:0,
child: Icon(Icons.check,
color: Colors.green,
size: 24,
),
),
],
),
);
},
itemCount: 10,
values: List<int>.generate(10, (i)=>i),
)
Declare CustomGroupController to get selection ,enabled/disable items
CustomGroupController controller = CustomGroupController();
Get current selection
final selectedItem = controller.selectedItem;
enable items
controller.enabledItems([value]);
disable items
controller.disabledItems([value]);
listen to changed values
controller.listen((value){
print(value);
})
CustomGroupedCheckbox
Properties |
Description |
controller |
(required) Custom Group Controller to recuperate selectionItems and disable or enableItems. |
groupTitle |
widget title for group checkbox . |
itemBuilder |
(required) Called to build children. |
values |
(required) Values contains in each element. |
disableItems |
(List) values that will be disabled |
itemExtent |
The extent the children are forced to have in the main axis |
isScroll |
(bool) To make list of item scrollable |
CustomGroupedCheckbox.grid
Properties |
Description |
controller |
(required) Custom Group Controller to recuperate selectionItems and disable or enableItems. |
groupTitle |
widget title for group checkbox . |
itemBuilder |
(required) Called to build children. |
values |
(required) Values contains in each element. |
isScroll |
(bool) To indicate that the list of children scrollable |
gridDelegate |
(SliverGridDelegate) a delegate that controls the layout of the children |
Chip grouped Usage
Creating a basic SimpleGroupedChips
SimpleGroupedChips<int>(
controller: controller,
values: [1,2,3,4,5,6,7],
itemTitle: ["1" ,"2","4","5","6","7"],
chipGroupStyle: ChipGroupStyle.minimize(
backgroundColorItem: Colors.red[400],
itemTitleStyle: TextStyle(
fontSize: 14,
),
),
)
Declare GroupController to get selection and enabled/disabled Items
GroupController controller = GroupController();
GroupController
Properties |
Description |
isMultipleSelection |
(bool) enable multiple selection in grouped checkbox (default:false). |
initSelectedItem |
(List) A Initialize list of values that will be selected in grouped. |
chipGroupStyle |
(ChipGroupStyle) A Initialize list of values that will be selected in grouped. |
Get current selection
final selectedItems = controller.selectedItem;
enabled items
controller.enabledItemsByValues(List<T> values);
controller.enabledItemsByTitles(List<String> itemsTitles);
disable item
controller.disabledItemsByValues(List<T> values);
controller.disabledItemsByTitles(List<String> items)
SimpleGroupedChip
Properties |
Description |
controller |
(required) controller to recuperate selectionItems and disable or enableItems. |
itemsTitle |
(required) A list of strings that describes each chip button. Each label must be distinct. |
disabledItems |
Specifies which item should be disabled. The strings passed to this must match the Titles |
values |
(required) Values contains in each element. |
onItemSelected |
Callback when users make selection or deselection |
isScrolling |
enable horizontal scrolling . |
chipGroupStyle |
(ChipGroupStyle) the style that uses to customize item chip |
Switch grouped Usage
Creating a basic SimpleGroupedSwitch
SimpleGroupedSwitch<int>(
controller: controller,
values: [1,2,4,5],
itemsTitle: ["1 " ,"2 ","4 ","5 ","6","7"],
groupStyle: SwitchGroupStyle(
itemTitleStyle: TextStyle(
fontSize: 16,
color: Colors.blue,
),
activeColor: Colors.red,
),
)
Declare GroupController to get selection and enabled/disabled Items
GroupController controller = GroupController();
GroupController
Properties |
Description |
isMultipleSelection |
(bool) enable multiple selection in grouped checkbox (default:false). |
initSelectedItem |
(List) A Initialize list of values that will be selected in grouped. |
Get current selection
final selectedItems = controller.selectedItem;
enabled items
controller.enabledItemsByValues(List<T> values);
controller.enabledItemsByTitles(List<String> itemsTitles);
disable item
controller.disabledItemsByValues(List<T> values);
controller.disabledItemsByTitles(List<String> items)
SimpleGroupedSwitch
Properties |
Description |
controller |
(required) Group Controller to recuperate selectionItems and disable or enableItems. |
itemsTitle |
(required) A list of strings that describes each chip button. Each label must be distinct. |
values |
(required) Values contains in each element. |
disableItems |
Specifies which item should be disabled. The value passed to this must match the values list |
onItemSelected |
Call when users make selection or deselection |
groupStyle |
(SwitchGroupStyle) the style that will customize text,switch |
showDialogGroupedCheckbox
display groupedCheckbox inside dialog
return values selected
Creating a basic showDialogGroupedCheckbox
showDialogGroupedCheckbox(
context: context,
cancelDialogText: "cancel",
isMultiSelection: true,
itemsTitle: List.generate(15, (index) => "$index"),
submitDialogText: "select",
dialogTitle:Text("example dialog") ,
values: List.generate(15, (index) => index)
)
showDialogGroupedCheckbox
Properties |
Description |
dialogTitle |
(required) Text Widget that describe Title of dialog . |
itemsTitle |
(required) Values contains in each element . |
values |
(required) list of values . |
initialSelectedValues |
list of initial values that you want to be selected . |
isDismissible |
enable multiple selection . |
cancelDialogText |
(string) label for cancelButton . |
submitDialogText |
(string) label for submitButton . |
isMultiSelection |
enable multiple selection . |
ListGroupedCheckbox
display list of groupedCheckbox
return all values selected
Declare ListGroupController to get all item selected or get item selected by group index
ListGroupController controller = ListGroupController();
ListGroupController
Properties |
Description |
isMultipleSelectionPerGroup |
(List |
initSelectedValues |
(List) A Initialize list of values on each group of checkbox that will be selected in group. |
Get current selection
final selectedItems = controller.allSelectedItems;
- get all selection by group
final selectedItems = controller.selectedItemsByGroupIndex(indexGroup);
enable items
controller.enableAll(int indexGroup);
disable all items
controller.disableAll(int indexGroup);
enabled items
controller.enabledItemsByValues(int indexGroup,List<T> values);
controller.enabledItemsByTitles(int indexGroup,List<String> itemsTitles);
disable item
controller.disabledItemsByValues(int indexGroup,List<T> values);
controller.disabledItemsByTitles(int indexGroup,List<String> items)
Creating a basic ListGroupedCheckbox
ListGroupedCheckbox(
controller: listController,
groupTitles: List.generate(3, (index) => "groupe $index"),
values: List.generate(
3,
(i) =>
List.generate(5, (j) => "${(i + Random().nextInt(100)) * j}"),
),
titles: List.generate(
3,
(i) => List.generate(5, (j) => "Title:$i-$j"),
),
mapItemGroupedType: {
1: GroupedType.Chips,
},
)
ListGroupedCheckbox
Properties |
Description |
controller |
(required) manage the ListGroupedCheckbox. |
groupTitles |
(required)Text title for group checkbox in each groupedCheckbox. |
titles |
(required) A list of list of strings that describes each checkbox button. Each label must be distinct in groupedCheckbox. |
values |
(required) Values contains in each element in each groupedCheckbox. |
subTitles |
A list of list strings that describes second Text in each groupedChckbox. |
isScrollable |
(bool) make the parent widget scrollable or disable it (default:true). |
onSelectedGroupChanged |
CallBack to get all selected items when users make select new items or deselect items |
disabledValues |
A nested list of string ,specifies which item should be disabled in each groupedCheckbox. The strings passed to this must match the Titles |
titleGroupedAlignment |
(Alignment) align text title of each group of checkbox |
titleGroupedTextStyle |
(TextStyle) style text title of each group |
mapItemGroupedType |
(Map) define type of each group can be chips/switch/(checkbox or radio) |
##ListCustomGroupedCheckbox
display list of groupedCheckbox
return all values selected
Declare ListGroupController to get all item selected or get item selected by group index
ListGroupController controller = ListGroupController();
ListCustomGroupController
Properties |
Description |
isMultipleSelectionPerGroup |
(List |
initSelectedValuesByGroup |
(List) A Initialize list of values on each group of checkbox that will be selected in group. |
Get current selection
- list
final selectedItems = controller.allSelectedItems;
- map
final selectedItems = controller.mapSelectedItems;
- get all selection by group
final selectedItems = controller.selectedItemsByGroupIndex(indexGroup);
ListCustomGroupedCheckbox
Properties |
Description |
controller |
(required) manage the ListGroupedCheckbox. |
children |
(required) list of CustomIndexedWidgetBuilder to return widget of items for each group,should be non null widgets |
groupTitles |
A list of String for group checkbox in each CustomGrouped. |
groupTitlesWidget |
A list of list of widgets that describes custom Title for each group. |
listValuesByGroup |
(required) Values contains in each element in each CustomGroupedCheckbox. |
isScrollable |
(bool) make the parent widget scrollable or disable it (default:true). |
onSelectedGroupChanged |
CallBack to get all selected items when one of item hit it make select new items or deselect items |
titleGroupedAlignment |
(Alignment) align text title of each group |
titleGroupedTextStyle |
(TextStyle) style text for title of each group |
basic example
final controller =
ListCustomGroupController(isMultipleSelectionPerGroup: [true, false]);
final data = [
List<_User>.generate(
10,
(i) => _User(
name: faker.person.name(),
email: faker.internet.email(),
),
),
List<String>.generate(
10,
(i) => faker.person.name(),
)
]
ListCustomGroupedCheckbox(
controller: controller,
onSelectedGroupChanged: (values) {
print(values);
},
isScrollable: true,
titleGroupedAlignment: Alignment.centerLeft,
groupTitles: ["Users", "Names"],
children: [
CustomIndexedWidgetBuilder(
itemBuilder: (ctx, index, selected, isDisabled) {
return Card(
margin: EdgeInsets.only(
top: 5.0,
bottom: 5.0,
),
child: ListTile(
tileColor: selected ? Colors.green[300] : Colors.white,
title: Text(
(data[0][index] as _User).name,
),
subtitle: Text(
(data[0][index] as _User).email,
),
trailing: Opacity(
opacity: selected ? 1 : 0,
child: Icon(
Icons.check,
color: Colors.white,
size: 24,
),
),
),
);
}),
CustomGridIndexedWidgetBuilder(
itemBuilder: (ctx, index, selected, isDisabled) {
return Card(
color: selected ? Colors.green[300] : Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
12.0,
),
),
margin: EdgeInsets.only(
top: 5.0,
bottom: 5.0,
),
child: Stack(
children: [
Center(
child: Text(
data[1][index],
maxLines: 3,
overflow: TextOverflow.fade,
),
),
Positioned(
top: 5,
right: 8,
child: Opacity(
opacity: selected ? 1 : 0,
child: Icon(
Icons.check,
color: Colors.white,
size: 24,
),
),
),
],
),
);
},
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 5.0,
)
),
],
listValuesByGroup: data,
)
MIT Licences