【问题标题】:how to update selected radio button in flutter using getx statemanagment如何使用getx statemanagment在flutter中更新选定的单选按钮
【发布时间】:2021-04-29 00:46:16
【问题描述】:

我正在使用带有 GetX 插件的 Flutter,并且我在 statelessWidget 中有两个单选按钮 但是当用户单击它时,单选按钮不会更改为选中状态 我的问题是如何更新屏幕以显示使用 GetX pluing 更改的 groupValue 属性的选定收音机。 这是我的代码

Radio(
  value: reportController.period[0],
  groupValue: reportController.selectedPeriod,
  onChanged: (val) {
                     reportController.selectedPeriod = val;
                              
                    },
     )

这是我的控制器

import 'package:get/get.dart';

import 'package:ycom/models/report.dart';

class ReportController extends GetxController {
  var report = Report().obs;
  List<String> period = ["evening", "morning"];

  void set selectedPeriod(String selectedPeriod) {
    report.update((report) {
      report.selectedPeriod = selectedPeriod;
    });
  }

  String get selectedPeriod => report.value.selectedPeriod;
}

【问题讨论】:

    标签: flutter state-management flutter-getx


    【解决方案1】:

    我通过在 Obx() 函数中包装 Radio 小部件来解决它,如下所示

    Obx(() => Radio(
                     value: reportController.period[0],
                     groupValue: reportController.selectedPeriod,
                     onChanged: (val) {
                                       reportController.selectedPeriod = val;
    
    
                                    },
                   ))
    

    【讨论】:

      【解决方案2】:

      这是我为实现这一目标所做的:

      我的控制器:

            class ProfilePageController extends GetxController {
            String selectedGender;
            final List<String> gender = ["Male", "Female"];
      
            String select;
            void onClickRadioButton(value) {
            print(value);
            select = value;
            update();
            }
           }
      

      我的查看代码:

                Row addRadioButton(int btnIndex, String title) {
          return Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              GetBuilder<ProfilePageController>(
                builder: (_) => Radio(
                    activeColor: Colors.blue,
                    value: profilePageController.gender[btnIndex],
                    groupValue: profilePageController.select,
                    onChanged: (value) =>
                        profilePageController.onClickRadioButton(value)),
              ),
              Text(title)
            ],
          );
        }
      

      要使用,请调用 addRadioButton:

                Row(
                  children: [
                    addRadioButton(0, "Male"),
                    addRadioButton(1, "Female"),
                  ],
                ),
      

      【讨论】:

        【解决方案3】:

        尝试{setState(() {reportController.selectedPeriod = val;});} 而不是{reportController.selectedPeriod = val;},

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多