flutter обновляет содержимое виджета, но оно остается старым

#flutter

Вопрос:

[РЕШЕНО] Проверьте источник данных listview builder.

Я хочу обновить содержимое столбца, но когда я удаляю элемент и добавляю новый элемент в todoFutureBuilder, пользовательский интерфейс по-прежнему отображает старые данные(и новые данные после старых данных). Почему это происходит? Что я должен сделать, чтобы обновить содержимое?

код

способ инициализации

   List<Widget> todoFutureBuilder=[];
  
  @override
  void initState() {
    todoFutureBuilder.add(Text('This is result'));
    super.initState();
  }
 

способ сборки

   @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          getSearchBar(),
          Expanded(
            child: Column(
              children: todoFutureBuilder,
            ),
          )
        ],
      ),
    );
  }
 

способ изменения содержимого виджета.

   showSearchArtistResults() {
    setState(() {
      if(todoFutureBuilder.length!=1){
        todoFutureBuilder.removeAt(1); 
      }
      print(todoFutureBuilder);
    });
    setState(() {
        todoFutureBuilder.add(
            FutureBuilder(
              future: getSearchArtistResultList(),
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  print(snapshot.data);
                  if (snapshot.data == 'have_result') {
                    return Expanded(child: buildArtistResultList());
                  } else {
                    return Text('No Result, Please Search Again');
                  }
                } else if (snapshot.hasError) {
                  return Text("${snapshot.error}");
                }
                return CircularProgressIndicator();
              },
            )
        );
        print(todoFutureBuilder);
      });
  }
 

Ответ №1:

используйте todoFutureBuilder.clear() функцию

Комментарии:

1. это не работает. На самом деле отладчик показывает, что todoFutureBuilder-это [Текст(«Результат»), FutureBuilder<Строка>], Просто содержит 2 виджета, но на экране все еще отображается 3(или более)

2. если(todoFutureBuilder.length!=1){ } Возможно, это ограничение вызывает ошибку

3. Я нашел проблему. Я использую другой список для хранения данных и забываю обновить его, в то время как список виджетов в порядке. Спасибо.