import 'package:flutter/material.dart'; import 'package:manager_app/constants.dart'; import 'message_notification.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 = kSecond, 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 Container( child: Row( children: [ Align( alignment: AlignmentDirectional.centerStart, child: Text(label, style: TextStyle(fontSize: 25, fontWeight: FontWeight.w300)) ), Padding( padding: const EdgeInsets.all(10.0), child: Container( width: size.width *0.2, child: MultiSelectChip( values, initialValue, isMultiple, isAtLeastOne, onSelectionChanged: (selectedList) { onChanged(selectedList); }, ), ), ), ], ), ); } } class MultiSelectChip extends StatefulWidget { final List values; final List selectedValues; final Function(List) onSelectionChanged; // +added final bool isMultiple; final bool isAtLeastOne; MultiSelectChip( 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: Text(item, style: TextStyle(color: kBlack)), selected: widget.selectedValues.contains(item), selectedColor: kPrimaryColor, 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(), ); } }