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.

83 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. tag: widget.tag,
  36. builder: (data) {
  37. return BlocProvider(
  38. create: (context) => CommonDataBloc(repository: Repository())..add(DataFetched(tbSupply: widget.supply, condition: widget.condition)),
  39. child: BlocBuilder<CommonDataBloc, CommonDataState>(
  40. bloc: _commonDataBloc,
  41. builder: (contextb, state) {
  42. if (state is CommonDataFailure) {
  43. return Center(child: Text(''));
  44. }
  45. if (state is CommonDataSuccess) {
  46. if ((state.items ?? []).isEmpty) {
  47. return Center(child: Text(''));
  48. }
  49. List<CommonData> listItem = state.items!.cast<CommonData>();
  50. if (data?.currentData?.id != null) {
  51. listItem.forEach((element) {
  52. if (element.id == (data.currentData?.id ?? -1)) {
  53. selectedItem = element;
  54. }
  55. });
  56. }
  57. return RadioGroup<CommonData>.builder(
  58. groupValue: selectedItem,
  59. onChanged: (value) {
  60. setState(() {
  61. selectedItem = value ?? CommonData();
  62. widget.onPressed(value ?? CommonData());
  63. controller?.change(value ?? CommonData());
  64. });
  65. },
  66. items: state.items!.cast<CommonData>(),
  67. itemBuilder: (item) => RadioButtonBuilder(item.name ?? ''),
  68. );
  69. }
  70. return Center(child: CircularProgressIndicator());
  71. },
  72. ),
  73. );
  74. });
  75. }
  76. }