You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
3.0KB

  1. import 'package:farm_tpf/custom_model/action_form/CommonData.dart';
  2. import 'package:farm_tpf/data/repository/repository.dart';
  3. import 'package:farm_tpf/presentation/screens/actions/state_management_helper/change_dropdown_controller.dart';
  4. import 'package:farm_tpf/presentation/screens/resources/bloc/bloc/common_data_bloc.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:get/get.dart';
  8. import 'package:group_radio_button/group_radio_button.dart';
  9. class RadioButtonWidget extends StatefulWidget {
  10. final String condition;
  11. final String supply;
  12. final String tag;
  13. final Function(CommonData) onPressed;
  14. RadioButtonWidget({
  15. required this.condition,
  16. required this.supply,
  17. required this.onPressed,
  18. required this.tag,
  19. });
  20. @override
  21. _RadioButtonWidgetState createState() => _RadioButtonWidgetState();
  22. }
  23. class _RadioButtonWidgetState extends State<RadioButtonWidget> {
  24. var selectedItem = CommonData();
  25. CommonDataBloc? _commonDataBloc;
  26. ChangeDropdownController? controller;
  27. @override
  28. void initState() {
  29. super.initState();
  30. controller = Get.put(ChangeDropdownController(), tag: widget.tag);
  31. }
  32. @override
  33. Widget build(BuildContext context) {
  34. return GetBuilder<ChangeDropdownController>(
  35. init: controller,
  36. tag: widget.tag,
  37. builder: (data) {
  38. return BlocProvider(
  39. create: (context) => CommonDataBloc(repository: Repository())..add(DataFetched(tbSupply: widget.supply, condition: widget.condition)),
  40. child: BlocBuilder<CommonDataBloc, CommonDataState>(
  41. bloc: _commonDataBloc,
  42. builder: (contextb, state) {
  43. if (state is CommonDataFailure) {
  44. return Center(child: Text(''));
  45. }
  46. if (state is CommonDataSuccess) {
  47. if ((state.items ?? []).isEmpty) {
  48. return Center(child: Text(''));
  49. }
  50. List<CommonData> listItem = state.items!.cast<CommonData>();
  51. if (data?.currentData?.id != null) {
  52. listItem.forEach((element) {
  53. if (element.id == (data.currentData?.id ?? -1)) {
  54. selectedItem = element;
  55. }
  56. });
  57. }
  58. return RadioGroup<CommonData>.builder(
  59. groupValue: selectedItem,
  60. onChanged: (value) {
  61. setState(() {
  62. selectedItem = value ?? CommonData();
  63. widget.onPressed(value ?? CommonData());
  64. controller?.change(value ?? CommonData());
  65. });
  66. },
  67. items: state.items!.cast<CommonData>(),
  68. itemBuilder: (item) => RadioButtonBuilder(item.name ?? ''),
  69. );
  70. }
  71. return Center(child: CircularProgressIndicator());
  72. },
  73. ),
  74. );
  75. });
  76. }
  77. }