Flutter 在颤振中重置无线电列表
我仍然是一个新手与颤振,我正在一个测验应用程序的工作现在 在单选按钮列表中,每当应用程序转到下一个问题时,单选按钮不会被重置,如果有人能指导我如何在调用下一个问题功能时重置单选按钮,我将不胜感激 伪码Flutter 在颤振中重置无线电列表,flutter,radio-button,flutter-layout,Flutter,Radio Button,Flutter Layout,我仍然是一个新手与颤振,我正在一个测验应用程序的工作现在 在单选按钮列表中,每当应用程序转到下一个问题时,单选按钮不会被重置,如果有人能指导我如何在调用下一个问题功能时重置单选按钮,我将不胜感激 伪码 class _QuizPageState extends State<QuizPage> { List<dynamic> myQuestion; _QuizPageState(this.myQuestion); int i = 0; int count =
class _QuizPageState extends State<QuizPage> {
List<dynamic> myQuestion;
_QuizPageState(this.myQuestion);
int i = 0;
int count = 0;
int selectedRadioTile;
int marks = 0;
var selected;
Widget choiceButton(String k, int value) {
return Padding(
padding: EdgeInsets.symmetric(
vertical: 10,
),
child: RadioListTile(
value: value,
groupValue: selectedRadioTile,
title: Container(
child: Text(myQuestion[i][k] ?? "None"),
),
onChanged: (val) {
setSelectedRadioTile(val);
selected = val;
},
activeColor: Colors.green,
selected: true,
),
);
}
void initState() {
selectedRadioTile = 0;
super.initState();
}
setSelectedRadioTile(int val) {
setState(() {
selectedRadioTile = val;
});
}
void checkAnswer() {
var e = int.parse(myQuestion[i]["Answer"]);
if (e == selected) {
marks = marks + 1;
} else {
print("wrong");
}
nextquestion();
}
void nextquestion() {
setState(() {
if (count < 9) {
i = randomBetween(0, myQuestion.length);
} else {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => resultpage(marks: marks),
));
}
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
return showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(
"Alert",
),
content: Text("You Can't Go Back At This Stage."),
actions: <Widget>[
FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'Ok',
),
)
],
));
},
child: Scaffold(
appBar: AppBar(
elevation: 30.0,
title: Center(
child: Text(
'Quiz',
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
fontFamily: "Quando",
fontWeight: FontWeight.bold,
),
),
),
backgroundColor: Colors.amber[800],
),
body: LayoutBuilder(
builder: (context, constraint) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraint.maxHeight),
child: IntrinsicHeight(
child: Column(
children: <Widget>[
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Center(
child: Container(
padding: EdgeInsets.only(top: 20, left: 10),
child: Text(
myQuestion[i]["Question"] ?? "None",
style: TextStyle(
fontSize: 15.0,
fontFamily: "Quando",
fontWeight: FontWeight.bold,
),
),
),
),
SizedBox(
height: 20,
),
Expanded(
child: AspectRatio(
aspectRatio: 16 / 11,
child: ClipRect(
child: SizedBox(
height: 50,
child: PhotoView(
imageProvider: AssetImage(
myQuestion[i]["Image"] ?? "None"),
minScale:
PhotoViewComputedScale.contained *
0.5,
maxScale:
PhotoViewComputedScale.covered * 2,
initialScale: 0.6,
backgroundDecoration: BoxDecoration(
color: Theme.of(context).canvasColor,
),
),
),
),
),
),
Text(
"To adjust the image double Tap",
style: TextStyle(
fontFamily: "Quando",
color: Colors.black26,
fontSize: 15.0,
fontWeight: FontWeight.bold,
),
),
],
),
),
SizedBox(
height: 10,
),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
choiceButton("option1", 1),
choiceButton("option2", 2),
choiceButton("option3", 3),
choiceButton("option4", 4),
],
),
),
Expanded(
flex: 0,
child: RaisedButton(
splashColor: Colors.blueAccent,
color: Colors.blueAccent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
),
onPressed: () {
checkAnswer();
count = count + 1;
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text(
"Explaination",
),
content: Text(
myQuestion[i]["Explanation"] ?? "None",
style: TextStyle(
fontSize: 15.0,
fontFamily: "Quando",
),
),
actions: <Widget>[
FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(
'Ok',
),
)
],
));
},
child: Text(
'Submit',
),
),
),
SizedBox(
height: 40,
)
],
),
),
),
);
},
),
),
);
}
}
class\u QuizPageState扩展状态{
列出我的问题;
_QuizPageState(这个.我的问题);
int i=0;
整数计数=0;
int-选择放射性同位素;
整数分=0;
选择var;
小部件选择按钮(字符串k,int值){
返回填充(
填充:EdgeInsets.symmetric(
垂直:10,
),
孩子:放射科医生(
价值:价值,
groupValue:selectedRadioTile,
标题:集装箱(
child:Text(我的问题[i][k]??“无”),
),
一旦更改:(val){
设置选定的放射性同位素(val);
所选=val;
},
activeColor:Colors.green,
选择:正确,
),
);
}
void initState(){
selectedRadioTile=0;
super.initState();
}
setSelectedRadioTile(int val){
设置状态(){
selectedRadioTile=val;
});
}
无效检查答案(){
var e=int.parse(myQuestion[i][“Answer”]);
如果(e==选定){
分数=分数+1;
}否则{
打印(“错误”);
}
nextquestion();
}
void nextquestion(){
设置状态(){
如果(计数<9){
i=random介于(0,myQuestion.length)之间;
}否则{
导航器.of(上下文).pushReplacement(MaterialPage路线(
生成器:(上下文)=>resultpage(标记:标记),
));
}
});
}
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:(){
返回显示对话框(
上下文:上下文,
生成器:(上下文)=>AlertDialog(
标题:正文(
“警报”,
),
内容:文本(“您在此阶段无法返回。”),
行动:[
扁平按钮(
已按下:(){
Navigator.of(context.pop();
},
子:文本(
“好的”,
),
)
],
));
},
孩子:脚手架(
appBar:appBar(
标高:30.0,
标题:中心(
子:文本(
“测验”,
样式:TextStyle(
颜色:颜色,白色,
字体大小:20.0,
丰特家族:“泉多”,
fontWeight:fontWeight.bold,
),
),
),
背景颜色:颜色。琥珀色[800],
),
正文:布局生成器(
生成器:(上下文,约束){
返回SingleChildScrollView(
子:约束框(
约束:BoxConstraints(最小高度:constraint.maxHeight),
孩子:内在的(
子:列(
儿童:[
扩大(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
mainAxisSize:mainAxisSize.min,
儿童:[
居中(
子:容器(
填充:仅限边缘设置(顶部:20,左侧:10),
子:文本(
我的问题[i][“问题”]??“无”,
样式:TextStyle(
字体大小:15.0,
丰特家族:“泉多”,
fontWeight:fontWeight.bold,
),
),
),
),
大小盒子(
身高:20,
),
扩大(
孩子:AspectRatio(
专题:11月16日,
孩子:ClipRect(
孩子:大小盒子(
身高:50,
孩子:照片视图(
imageProvider:AssetImage(
我的问题[i][“图像”]??“无”),
明斯克:
PhotoViewComputedScale.com包含*
0.5,
最大刻度:
PhotoViewComputedScale.covered*2,
初始刻度:0.6,
背景装饰:盒子装饰(
颜色:主题。背景。画布颜色,
),
),
),
),
),
),
正文(
“要调整图像,请双击”,
样式:TextStyle(
丰特家族:“泉多”,
颜色:颜色。黑色,
字体大小:15.0,
fontWeight:fontWeight.bold,
),
),
],
),
),
大小盒子(
身高:10,
),
扩大(
子:列(
void nextquestion() {
setState(() {
selectedRadioTile = 0;
if (count < 9) {
i = randomBetween(0, myQuestion.length);
} else {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => resultpage(marks: marks),
));
}
});
}