Почему состояние родительского виджета флаттера обновляется каждый раз, когда изменяется состояние дочернего виджета?

Я создал приложение с запуском (домашний экран), которое отображает список данных, извлеченных из вызова API REST. Это срабатывает при обновлении состояния виджета - все работает нормально.

У меня также есть несколько дочерних экранов (например, экран настроек), загруженных:

Navigator.push

Я заметил, что, если состояние изменяется на моем экране настроек, состояние домашнего экрана также обновляется, и поэтому он снова вызывает API REST. Я провел некоторое тестирование, и это, кажется, работает для любого дочернего виджета в стеке навигатора, где обновление состояния, кажется, передается обратно вверх по дереву виджетов прямо вверх.

Является ли это ожидаемым поведением, когда я думал, что изменения состояния спустились вниз по дереву виджетов, а не обратно, или это мое недопонимание того, как это работает?

Мне просто кажется неэффективным, что мой вызов REST на HomeScreen продолжает выполняться, и экран обновляется каждый раз, когда дочерний виджет имеет изменение состояния, поскольку он является основой стека навигатора и не используется / не просматривается.

Я разместил простой тестовый проект, который показывает это на Github здесь.

  • Флаттер (Channel beta, v0.11.3, в Mac OS X 10.14.1 18B75, локаль en-GB)
  • Android toolchain - разработка для устройств Android (Android SDK 28.0.3)
  • iOS toolchain - разработка для устройств iOS (Xcode 10.1)
  • Android Studio (версия 3.1)
  • Код VS (версия 1.29.1)

0 ответов

Другие вопросы по тегам