Flutter - невозможно изменить список <Widget> - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть список фиксированной длины, который используется в функции "build". Я хочу заменить один элемент в этом списке другим. Оба элемента в списке являются контейнерами. Я заменяю элемент в списке и делаю setState (). Функция build использует List в теле Scaffold. Я не получаю ошибки, однако, когда восстановление выполнено, ничего не изменилось.

Насколько мне известно, это не нарушает никаких правил и, насколько я знаю, не должно вызывать проблем.

Пока я Я мог бы решить эту проблему, я думаю, что с чем-то таким фундаментальным, мне нужно найти причину для этого.

Любые идеи относительно того, почему это происходит?

Код добавлен ниже:

Ниже приведен код, который НЕ работает

    if (_lwDisplay[iNdxDisplay] == null) /*INITIAL DISPLAY */ {
    _lwDisplay[iNdxDisplay] = wContainer;
    } else {
      setState(() {
        _tfDataHasChanged = true;
        _lwDisplay[iNdxDisplay] = wContainer;
      });
    }

Ниже приведен код, который НЕ работает

  if (_lwDisplay[iNdxDisplay] == null) /*INITIAL DISPLAY */ {
      _lwDisplay[iNdxDisplay] = wContainer;
    } else {
       _tfDataHasChanged = _fnHasDataChanged() /* FOR FAB */;
      List<Widget> lwDisplay2 = List(_lwDisplay.length);
      for (int iNdx = 0; iNdx < lwDisplay2.length; iNdx++) {
        if (iNdx != iNdxDisplay) {
          lwDisplay2[iNdx] = _lwDisplay[iNdx];
        }
      }
      lwDisplay2[iNdxDisplay] = wContainer;
      _lwDisplay = lwDisplay2;
      setState(() {});
    }

1 Ответ

1 голос
/ 10 февраля 2020

Не видя всего кода и в соответствии с этим ТА вопрос ,

Переместите создание экземпляра списка виджетов в метод сборки вашего основного виджета.

IE

class MainWidgetState extends State<MainWidget> {
      List<YOUR_WIDGET> _lwDisplay = new List();

     Widget build(BuildContext context) {
          //Create your list
     }
}

Кроме того, добавьте ключ к каждому элементу в вашем виджете (если вы еще этого не сделали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...