12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Multi Select widget
- // This widget is reusable
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- class MultiSelect extends StatefulWidget {
- final List<String> items;
- const MultiSelect({Key? key, required this.items}) : super(key: key);
- @override
- State<StatefulWidget> createState() => _MultiSelectState();
- }
- class _MultiSelectState extends State<MultiSelect> {
- // this variable holds the selected items
- final List<String> _selectedItems = [];
- // This function is triggered when a checkbox is checked or unchecked
- void _itemChange(String itemValue, bool isSelected) {
- setState(() {
- if (isSelected) {
- _selectedItems.add(itemValue);
- } else {
- _selectedItems.remove(itemValue);
- }
- });
- }
- // this function is called when the Cancel button is pressed
- void _cancel() {
- Navigator.pop(context);
- }
- // this function is called when the Submit button is tapped
- void _submit() {
- Navigator.pop(context, _selectedItems);
- }
- @override
- Widget build(BuildContext context) {
- return AlertDialog(
- title: const Text('Select Topics'),
- content: SingleChildScrollView(
- child: ListBody(
- children: widget.items
- .map((item) => CheckboxListTile(
- value: _selectedItems.contains(item),
- title: Text(item),
- controlAffinity: ListTileControlAffinity.leading,
- onChanged: (isChecked) => _itemChange(item, isChecked!),
- ))
- .toList(),
- ),
- ),
- actions: [
- TextButton(
- child: const Text('Cancel'),
- onPressed: _cancel,
- ),
- ElevatedButton(
- child: const Text('Submit'),
- onPressed: _submit,
- ),
- ],
- );
- }
- }
|