flutter - 如何在颤动中选择默认单选按钮
问题描述
我在我的颤振项目中实现了三个单选按钮。但是在执行应用程序后,没有一个单选按钮显示为选中状态。任何人都可以帮我解决我哪里出错了!
尽管我单击它,但没有选择单选按钮。我无法弄清楚原因。请帮我解决它。这是我的代码:
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
------------------
-----------------
// 在Text的onTap()属性中调用getStatus()
GestureDetector(
child: Text(patient.status,
style: getTextStyle('Poppins-Regular',15.0, FontWeight.bold, options[status]),
),
onTap: () async{
await getStatus(context);
},
),
}
}
即使单击它,也没有一个单选按钮被选中。请帮我解决它。
解决方案
首先,Radio
默认情况下没有选择任何一个,因为您的首字母groupValue
是0
并且您没有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;
});
}
}
推荐阅读
- postgresql - 使用 Postgresql,计算长度大于 5 的表中的连续数字
- java - 有效负载文档大小大于最大值 16793600
- java - 我找不到 mainactivity.java 文件和布局文件夹
- sql - 通过左外连接的标题将虚拟行显示为组
- reactjs - 延迟一个字符更新状态
- javascript - 刷新后如何保持复选框处于活动状态
- angular - 获取 Angular 9 中所有当前注册组件的列表
- node.js - 在 nextJS (next.config.js) 中设置 webpack 配置
- python-3.x - 从服务主体凭据连接时,azure python sdk 抛出 SSL 握手错误
- flutter - 像工厂一样使用 Provider