import 'package:fcs/helpers/theme.dart'; import 'package:flutter/material.dart'; class LocalRadioButtons extends StatelessWidget { final Function(T)? callback; final IconData? iconData; final T? selectedValue; final List? values; final bool readOnly; final bool hideUnselected; const LocalRadioButtons( {Key? key, this.callback, this.iconData, this.selectedValue, this.values, this.readOnly = false, this.hideUnselected = true}) : super(key: key); @override Widget build(BuildContext context) { return Column(children: readOnly ? getReadonlyChildren() : getChildren()); } List getChildren() { return values! .toList() .map((e) => SizedBox( height: 30, child: InkWell( onTap: () => callback!(e), child: Row(children: [ Radio( fillColor: MaterialStateProperty.resolveWith((states) { // active if (states.contains(MaterialState.selected)) { return primaryColor; } // inactive return labelColor; }), activeColor: primaryColor, groupValue: selectedValue, value: e, onChanged: (T? value) { callback!(value!); }, ), Text(e.toString(), style: TextStyle( fontSize: 15, color: e == selectedValue ? primaryColor : Colors.black)), ]), ))) .toList(); } List getReadonlyChildren() { return values! .toList() .map((e) => hideUnselected && e == selectedValue ? SizedBox( height: 30, child: Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Icon( e == selectedValue ? Icons.check : Icons.remove, color: e == selectedValue ? primaryColor : Colors.grey, ), ), Text( e.toString(), style: TextStyle( fontSize: 15, color: e == selectedValue ? primaryColor : Colors.black), ), ]), ) : Container()) .toList(); } }