【问题标题】:Radio Button widget not working inside AlertDialog Widget in Flutter单选按钮小部件在 Flutter 的 AlertDialog 小部件中不起作用
【发布时间】:2019-07-11 02:00:19
【问题描述】:

我希望用户在移动到我的 Flutter 应用程序的第二页之前选择单选按钮中给出的选项。我在 Alertdialog 中显示单选按钮小部件,它显示但单选按钮在选择后未更改。

一切状态类

floatingActionButton: FloatingActionButton(
      child: Icon(Icons.create),
      onPressed: () {
        return showDialog(
            context: context,
            builder: (context) => AlertDialog(
              title: Text("Select Grade System and No of Subjects"),
              actions: <Widget>[
                    Radio(value: 0, groupValue: groupValue, onChanged: selectRadio),
                    Radio(value: 1, groupValue: groupValue, onChanged: selectRadio),
                    ],
            ));
      },
    ),

selectRadio 函数

void selectRadio(int value)
{
setState(() {
  groupValue=value;
});
}

【问题讨论】:

  • 你能粘贴一段代码吗(build 方法)?您是否尝试过直接点击标签上的单选按钮?
  • 请添加您所做的代码sn-p。
  • @ChennaReddy 代码添加
  • @Harshapulikollu 代码已添加
  • showDialog 创建新的上下文,因此调用小部件上的 setState 不会影响对话框

标签: dart flutter


【解决方案1】:

custom language popup 您需要创建单独的 statefulwidget 类来处理单选按钮的状态。参考this例子

【讨论】:

    【解决方案2】:

    我有同样的问题。我用这个解决了它:

    showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        int selectedRadio = 0;
        return AlertDialog(
          content: StatefulBuilder(
            builder: (BuildContext context, StateSetter setState) {
              return Column(
                mainAxisSize: MainAxisSize.min,
                children: List<Widget>.generate(4, (int index) {
                  return Radio<int>(
                    value: index,
                    groupValue: selectedRadio,
                    onChanged: (int value) {
                      setState(() => selectedRadio = value);
                    },
                  );
                }),
              );
            },
          ),
        );
      },
    

    【讨论】:

    • 很好,很直接的答案!!
    • 这对我来说很直接并且易于实施.....
    • 太棒了……它的工作原理
    【解决方案3】:

    正如我所说,上面的评论 showDialog 创建了新的上下文,因此调用小部件上的 setState 不会影响对话框 您可以创建新的有状态小部件,命名为 MyDialog.Checkout this gist,这样您就可以获得它(它使用下拉菜单,但您可以以相同的方式实现无线电小部件)。

    【讨论】:

    • 谢谢你,它的工作,我使用了这个链接:github.com/flutter/flutter/issues/17044 所以每当使用 showdialog 我们需要创建 statefulwidget?
    • 不是每次都喜欢,如果您希望像“按 OKAY 退出”这样的提醒用户,带有确定和取消按钮,那么您不需要创建有状态小部件。如果您想在对话框中进行一些 UI 渲染/更改,就像您对无线电小部件所做的那样,那么您必须使用有状态小部件。否则仅用于警报/错误/关于您不需要创建有状态小部件的消息。
    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2011-07-07
    • 2021-07-01
    相关资源
    最近更新 更多