Как перейти на конкретный элемент PageView из ListView? - PullRequest
0 голосов
/ 28 мая 2019

Я занимаюсь разработкой своего первого приложения Flutter.Я застрял в PageView.На самом деле, я получаю список вопросов и опций от API и все вопросы, которые я показываю в PageView с опциями.Есть 3 кнопки: 1 - «Предыдущая», 2 - «Обзор», 3 - «Далее».Когда пользователь нажимает «Предыдущий», пользователь переходит на предыдущий вопрос, если он не первый, Когда пользователь нажимает на «Следующий», пользователь переходит к следующему вопросу. Когда пользователь нажимает на «Обзор», пользователь видит список того, на какой вопрос пытался илине.

Мне нужны две вещи:

  1. Когда пользователь перейдет к другому вопросу после нажатия на ответ на другой вопрос, а затем пользователь снова вернется на этот вопрос, которыйответ должен быть там (ответы отображаются по радио)

  2. Когда пользователь перейдет на экран «Просмотр», появится список вопросов, которые пытались или нет, я хочу, когда пользователь нажимает на некоторыеэлемент списка пользователь перейдет на тот же вопрос, где щелкнул.

Это 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)),
                            ],
                          ),
                        ),
                      )
                    ),
...