import 'package:flutter/material.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:tablet_app/constants.dart'; class MultiSelectContainer extends StatelessWidget { final Color color; final String? label; final List values; final List initialValue; final bool isMultiple; final bool isAtLeastOne; final ValueChanged> onChanged; const MultiSelectContainer({ Key? key, this.color = kSecondGrey, required this.label, required this.values, required this.initialValue, required this.isMultiple, this.isAtLeastOne = false, required this.onChanged, }) : super(key: key); @override Widget build(BuildContext context) { Size size = MediaQuery.of(context).size; return SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( children: [ if(label != null) Align( alignment: AlignmentDirectional.centerStart, child: Text(label!, style: TextStyle(fontSize: 25, fontWeight: FontWeight.w300)) ), Padding( padding: const EdgeInsets.all(10.0), child: MultiSelectChip( color, values, initialValue, isMultiple, isAtLeastOne, onSelectionChanged: (selectedList) { onChanged(selectedList); }, ), ), ], ), ); } } class MultiSelectChip extends StatefulWidget { final Color color; final List values; final List selectedValues; final Function(List) onSelectionChanged; // +added final bool isMultiple; final bool isAtLeastOne; MultiSelectChip( this.color, this.values, this.selectedValues, this.isMultiple, this.isAtLeastOne, {required this.onSelectionChanged} // +added ); @override _MultiSelectChipState createState() => _MultiSelectChipState(); } class _MultiSelectChipState extends State { _buildChoiceList() { List choices = []; widget.values.forEach((item) { choices.add(Container( padding: const EdgeInsets.all(2.0), child: ChoiceChip( label: HtmlWidget(item, textStyle: TextStyle(color: Colors.black)), selected: widget.selectedValues.contains(item), selectedColor: widget.color, onSelected: (selected) { setState(() { if (widget.isAtLeastOne && widget.selectedValues.length == 1 && widget.selectedValues[0] == item) { // showNotification(Colors.orange, kWhite, 'Au moins une valeur doit être sélectionnée', context, null); } else { if (widget.isMultiple) { widget.selectedValues.contains(item) ? widget.selectedValues.remove(item) : widget.selectedValues.add(item); widget.onSelectionChanged(widget.selectedValues); } else { widget.selectedValues.clear(); widget.selectedValues.add(item); widget.onSelectionChanged(widget.selectedValues); } } }); }, ), )); }); return choices; } @override Widget build(BuildContext context) { return Wrap( children: _buildChoiceList(), ); } }