Я занимаюсь разработкой своего первого приложения Flutter.Я застрял в PageView.На самом деле, я получаю список вопросов и опций от API и все вопросы, которые я показываю в PageView с опциями.Есть 3 кнопки: 1 - «Предыдущая», 2 - «Обзор», 3 - «Далее».Когда пользователь нажимает «Предыдущий», пользователь переходит на предыдущий вопрос, если он не первый, Когда пользователь нажимает на «Следующий», пользователь переходит к следующему вопросу. Когда пользователь нажимает на «Обзор», пользователь видит список того, на какой вопрос пытался илине.
Мне нужны две вещи:
Когда пользователь перейдет к другому вопросу после нажатия на ответ на другой вопрос, а затем пользователь снова вернется на этот вопрос, которыйответ должен быть там (ответы отображаются по радио)
Когда пользователь перейдет на экран «Просмотр», появится список вопросов, которые пытались или нет, я хочу, когда пользователь нажимает на некоторыеэлемент списка пользователь перейдет на тот же вопрос, где щелкнул.
Это Listview:
Container(
child: ListView.builder(
itemCount: data == null ? 0 : data.length,
padding: const EdgeInsets.all(15.0),
itemBuilder: (context, position) {
return Column(
children: <Widget>[
ListTile(
contentPadding: EdgeInsets.all(15.0),
leading: Text(
'${data[position]["state"]}',
style: TextStyle(
fontSize: 22.0,
color: Colors.deepOrangeAccent,
),
),
title: Column(
children: <Widget>[
CircleAvatar(
backgroundColor: Colors.blueAccent,
radius: 40.0,
child:'${data[position]["state"]}' != "True" ? Text("Not Attemted",style: TextStyle(
fontSize: 18.0,
color: Colors.white,
),) : Text(
'Attempted',
style: TextStyle(
fontSize: 18.0,
color: Colors.white,
),
),
)
],
),
onTap: () {}
)
],
);
}),
)
Это Радио: значение счетчика просто для проверки, какой из вариантовПользователь выбирает ответ и отправляет его, чтобы нажать «Далее» значение счетчика.
String counter = "0000";
int radioValue = 0;
int ans1Value = 1;
int ans2Value = 2;
int ans3Value = 3;
int ans4Value = 4;
void handleRadioValueChanged(int value) {
setState(() {
radioValue = value;
switch (radioValue) {
case 1:
counter="1000";
break;
case 2:
counter="0100";
break;
case 3:
counter="0010";
break;
case 4:
counter="0001";
break;
}
});
}
Expanded(
flex: 2,
child:new Container(
child: new SingleChildScrollView(
child: new Row(
children: <Widget>[
new Padding(padding: EdgeInsets.all(20.0)),
new Flexible(
child: new Text('${questions[position]["question"]}',
style: TextStyle(color: Colors.black87,
fontSize: 20.0,fontWeight: FontWeight.bold,
),textAlign: TextAlign.start,),
flex: 1,
),
],
),
),
color: Colors.greenAccent,
)
),
Expanded(
flex: 3,
child: new Container(
child: new SingleChildScrollView(
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Padding(padding: EdgeInsets.all(5)),
new Row(
children: <Widget>[
new Radio(value: ans1Value,groupValue: radioValue, onChanged: handleRadioValueChanged),
new Text(
'${questions[position]["op1"]}',
style: new TextStyle(fontSize: 16.0),
),
],
),
new Padding(padding: EdgeInsets.all(5)),
new Row(
children: <Widget>[
new Radio(
value: ans2Value,
groupValue: radioValue,
onChanged: handleRadioValueChanged,
),
new Text(
'${questions[position]["op2"]}',
style: new TextStyle(
fontSize: 16.0,
),
),
],
),
new Padding(padding: EdgeInsets.all(5)),
new Row(
children: <Widget>[
new Radio(value: ans3Value,groupValue: radioValue, onChanged: handleRadioValueChanged),
new Text(
'${questions[position]["op3"]}',
style: new TextStyle(fontSize: 16.0),
),
],
),
new Padding(padding: EdgeInsets.all(5)),
new Row(
children: <Widget>[
new Radio(
value: ans4Value,
groupValue: radioValue,
onChanged: handleRadioValueChanged,
),
new Text(
'${questions[position]["op4"]}',
style: new TextStyle(
fontSize: 16.0,
),
),
],
),
new Padding(padding: EdgeInsets.all(5)),
],
),
),
)
),