首页 > 解决方案 > 如何在颤动中选择默认单选按钮

问题描述

我在我的颤振项目中实现了三个单选按钮。但是在执行应用程序后,没有一个单选按钮显示为选中状态。任何人都可以帮我解决我哪里出错了!

尽管我单击它,但没有选择单选按钮。我无法弄清楚原因。请帮我解决它。这是我的代码:

class AdminHomeContent extends StatefulWidget {

  @override
  _AdminHomeContentState createState() => _AdminHomeContentState();
}

class _AdminHomeContentState extends State<AdminHomeContent> {

  static final Map<String, Color> options = {
    'All': Colors.black, 'Cancelled':Colors.red,
    'Pending': Colors.yellow, 'Visited': Colors.green[900],
  };

  List keyList = options.keys.toList();
  List keyColor = options.values.toList();

  String selectedOption = 'All';

  int groupValue = 0 ;

  void buttonValue(int v){
    setState(() {
 groupValue = v ;
    });
  }
 @override
    Widget build(BuildContext context) {
      return ChangeNotifierProvider<PatientDataNotifier>(
        create: (context) => PatientDataNotifier(),
        child: MaterialApp(
            home: Scaffold(
            
             // some of my other codes
             ----------
             -----------


//method that defines three radio buttons
 Future<dynamic> getStatus(BuildContext context) {
    return showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            content: SingleChildScrollView(
              child: Container(
                child: Column(
                  children: [
                    Row(
                      children: [
                        Radio(value: 1,
                            activeColor: Colors.blue,
                            groupValue: groupValue,
                            onChanged: (int v){
                          print(v);
                              buttonValue(v);
                            }
                        ),
                        Text(keyList[2] , style: TextStyle(color: keyColor[2]),)
                      ],
                    ),
                    Row(
                      children: [
                        Radio(value: 2,
                            activeColor: Colors.blue,
                            groupValue: groupValue,
                            onChanged: (int v) {
                          print(v);
                              buttonValue(v);
                            }
                        ),
                        Text(keyList[3] , style: TextStyle(color: keyColor[3]))
                      ],
                    ),
                    Row(
                      children: [
                        Radio(value: 3,
                            activeColor: Colors.blue,
                            groupValue: groupValue,
                            onChanged: (int v) {
                          print(v);
                              buttonValue(v);
                            }
                        ),
                        Text(keyList[1] , style: TextStyle(color: keyColor[1]))
                      ],
                    )
                  ],
                ),
              ),
            ),
          );
        }
    );
  }

     // some codes
   ------------------
-----------------

// 在TextonTap()属性中调用getStatus()

GestureDetector(
                            child: Text(patient.status,
                              style: getTextStyle('Poppins-Regular',15.0, FontWeight.bold, options[status]),
                            ),
                            onTap: () async{
                              await getStatus(context);
                            },
                          ),
                       }
                    }

这是我的输出

即使单击它,也没有一个单选按钮被选中。请帮我解决它。

标签: flutterandroid-studioradio-button

解决方案


首先,Radio默认情况下没有选择任何一个,因为您的首字母groupValue0并且您没有Radio这个value

这是一个完整的工作示例Radio

  class MyRadio extends StatefulWidget {
  @override
  _MyRadioState createState() => _MyRadioState();
}

int groupValue = 1;

class _MyRadioState extends State<MyRadio> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Column(
            children: [
              Radio(
                value: 1,
                activeColor: Colors.blue,
                groupValue: groupValue,
                onChanged: (int v) {
                  buttonValue(v);
                },
              ),
              Radio(
                value: 2,
                activeColor: Colors.blue,
                groupValue: groupValue,
                onChanged: (int v) {
                  buttonValue(v);
                },
              ),
              Radio(
                value: 3,
                activeColor: Colors.blue,
                groupValue: groupValue,
                onChanged: (int v) {
                  buttonValue(v);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

  void buttonValue(int v) {
    setState(() {
      groupValue = v;
    });
  }
}

推荐阅读