import 'package:flutter/material.dart'; import 'package:get/get.dart'; class MultiSelectDialog extends StatefulWidget { final List initValues; final String title; final List values; const MultiSelectDialog({ super.key, required this.initValues, required this.values, required this.title, }); @override State> createState() => _MultiSelectDialogState(); } class _MultiSelectDialogState extends State> { late Set _tempValues; @override void initState() { super.initState(); _tempValues = widget.initValues.toSet(); } @override Widget build(BuildContext context) { return AlertDialog( clipBehavior: Clip.hardEdge, title: Text(widget.title), contentPadding: const EdgeInsets.only(top: 12), content: StatefulBuilder(builder: (context, StateSetter setState) { return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, children: List.generate( widget.values.length, (index) { bool isChecked = _tempValues.contains(widget.values[index]['value']); return CheckboxListTile( dense: true, value: isChecked, controlAffinity: ListTileControlAffinity.leading, title: Text( widget.values[index]['title'], style: Theme.of(context).textTheme.titleMedium!, ), onChanged: (value) { if (isChecked) { _tempValues.remove(widget.values[index]['value']); } else { _tempValues.add(widget.values[index]['value']); } setState(() {}); }, ); }, ), ), ); }), actionsPadding: EdgeInsets.only(left: 16, right: 16, bottom: 12), actions: [ TextButton( onPressed: Get.back, child: Text( '取消', style: TextStyle( color: Theme.of(context).colorScheme.outline, ), ), ), TextButton( onPressed: () => Get.back(result: _tempValues.toList()), child: const Text('确定'), ), ], ); } }