【发布时间】:2021-12-03 07:52:46
【问题描述】:
我想用单选按钮创建一个名为 JSON 的数据列表。但是,当我选择任何单选按钮时,它会选择每个单选按钮,而不是选择一个。而且,当我单击按钮时如何获取所选单选按钮的值?
我是新来的颤振。有没有什么办法可以解决这类问题?
这是我的代码
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Container(
height: 270,
color: Colors.white,
child: CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(context, i) {
return Column(
children: <Widget>[
Container(
width: 450,
padding: EdgeInsets.all(7.0),
margin: EdgeInsets.only(right: 8.0, left: 8.0, top: 10.0),
decoration: BoxDecoration(
border: Border.all(color: const Color(0xffededed)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget> [
Text(modelOptions[i].optionName.toString(),
style: TextStyle(
fontSize: 18,
color: Colors.amber,
),
),
],
),
),
Container(
margin: EdgeInsets.only(left: 8.0, right: 8.0),
padding: EdgeInsets.all(7.0),
decoration: BoxDecoration(
border:
Border.all(color: const Color(0xffededed)),
),
child: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: modelOptions[i].modelOptionValues.length,
itemBuilder: (context, j) {
return
Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Radio(
groupValue: selectedRadio,
value: modelOptions[i].modelOptionValues[j].optionValueID,
activeColor: Colors.orangeAccent,
onChanged:(value) {
setState(() {
value = modelOptions[i].modelOptionValues[j].optionValueID.toString();
selectedRadio = value;
print("check radio: ${selectedRadio}");
showToastMessage('${selectedRadio} is selected'); //get the selected radio button's value.
});
}),
});
}),
Text(
modelOptions[i].modelOptionValues[j].valueName,
style: TextStyle(
color: Colors.black, fontSize: 16,
),),
],
);
}))
],
);
},
childCount: modelOptions.length,
),
),
],
)),
],
));
}
【问题讨论】:
-
您正在以一种命令式的方式而不是声明式的方式思考。您应该已经知道该值并将该数据应用于单选按钮。
-
我不太明白你在说什么。是不是我的概念做错了?
-
你不应该为它的价值要求任何东西,你应该知道它的价值并将这个价值应用到事物上。
-
但是现在当我点击一个按钮时,它会全选。
-
因为你有一次数据源
_isSelected这是一个布尔值。所以他们都将被设置为那个。你需要一个List<bool>。并使用该值更新索引。
标签: flutter radio-button flutter-sliver