custom_radio_check.dart 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:cs_resources/constants/color_constants.dart';
  2. import 'package:cs_resources/generated/assets.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:get/get_utils/src/extensions/widget_extensions.dart';
  5. import 'package:widgets/ext/ex_widget.dart';
  6. import 'package:widgets/my_load_image.dart';
  7. import 'package:widgets/my_text_view.dart';
  8. class CustomRadioCheck extends StatefulWidget {
  9. final List<String> options;
  10. final Function(int index, String text) onOptionSelected;
  11. CustomRadioCheck({required this.options, required this.onOptionSelected});
  12. @override
  13. _CustomRadioCheckState createState() => _CustomRadioCheckState();
  14. }
  15. class _CustomRadioCheckState extends State<CustomRadioCheck> {
  16. String? _selectedOption;
  17. @override
  18. void initState() {
  19. super.initState();
  20. if (widget.options.isNotEmpty) {
  21. _selectedOption = widget.options.first;
  22. }
  23. }
  24. @override
  25. Widget build(BuildContext context) {
  26. return Wrap(
  27. spacing: 8.0, // 水平间距
  28. runSpacing: 8.0, // 垂直间距
  29. children: widget.options.map((option) {
  30. return _buildRadioWithIconAndText(
  31. path: option == _selectedOption ? Assets.cptAuthLoginRadioChecked : Assets.cptAuthLoginRadioUncheck,
  32. text: option,
  33. value: option == _selectedOption,
  34. onChanged: (value) {
  35. setState(() {
  36. _selectedOption = option;
  37. int selectedIndex = widget.options.indexOf(option);
  38. widget.onOptionSelected(selectedIndex, option);
  39. });
  40. },
  41. );
  42. }).toList(),
  43. );
  44. }
  45. Widget _buildRadioWithIconAndText({
  46. required String path,
  47. required String text,
  48. required bool value,
  49. required Function(bool) onChanged,
  50. }) {
  51. return Row(
  52. mainAxisSize: MainAxisSize.min,
  53. children: <Widget>[
  54. MyAssetImage(path, width: 22, height: 22),
  55. SizedBox(width: 8),
  56. MyTextView(text, marginLeft: 10, textColor: ColorConstants.white, fontSize: 14, isFontRegular: true),
  57. ],
  58. ).marginOnly(right: 20).onTap((){
  59. onChanged(true);
  60. });
  61. }
  62. }