Проблема с повторными данными ListBuilder в том же виде флаттера - PullRequest
0 голосов
/ 09 октября 2019

Я сгенерировал список вопросов в моем listBuilder. Я хочу создать одно представление для одного списка, потому что на данный момент у меня есть право с ответами, но все на одно представление.

Но я хочу ответить на мой первый вопрос, и когда я нажимаю на следующую кнопку, генерируетсятот же экран со следующим вопросом.

class _Poll extends State<PollPage> {
  List<String> choix = [];


  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: Text("Blackblox"),
        leading: Image.asset(
          'assets/img/logo_ineat.png',
          fit: BoxFit.contain,
          height: 32,
        ),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            new Flexible(
              child: new Container(
                child: new FutureBuilder<List<PollQuestionsDto>>(
                    future: Poll().getPollQuestions(),
                    builder: (BuildContext context, AsyncSnapshot snapshot) {
                      if (snapshot.hasData) {
                        if (snapshot.data != null) {
                          return new Column(
                            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                            children: <Widget>[
                              new Expanded(
                                child: new ListView.builder(
                                  itemCount: snapshot.data.length,
                                  itemBuilder: (BuildContext context, index) {
                                    return PollListViewItem(
                                      entitled: snapshot.data[index].entitled,
                                      answers: snapshot.data[index].answers,
                                    );
                                  },
                                ),
                              ),
                            ],
                          );
                        }
                      } else {
                        new Text("Loading...");
                        return new CircularProgressIndicator();
                      }
                    }),

Ответы [ 2 ]

1 голос
/ 09 октября 2019
void initState(){
  super.initState();
  Poll().getPollQuestions();
}
1 голос
/ 09 октября 2019

Потому что ваш FutureBuilder срабатывает снова и снова. Вы должны избегать, чтобы параметр future запускался один раз (например, внутри initState, как обычно рекомендуют люди).

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

Сделайте что-то вроде:

class _Poll extends State<PollPage> {
Future future;

@override
void initState(){
  future = Poll().getPollQuestions();
  super.initState();
}

и измените future параметр внутри FutureBuilder:

future: future,
...