Я новичок во Флаттере, и реактивное программирование для меня тоже новое.
Допустим, я хочу построить таймер с Flutter.
Я добавляю Scaffold
со всеми необходимыми вещами в нем и добавляю IconButton
, который запускает Stopwatch
иText
, который отображает прошедшее время.Я также добавляю Timer.periodic
для периодического (каждые 0,5 секунды) обновления текста.
Text
Виджет контролирует свое собственное состояние, проверяя, запущен ли Stopwatch
, и обновляя его значения.
Итак, теперь давайте предположим, что я хочу иметь более сложную логику, которая изменяет текст на основе некоторых действий с другими кнопками, которые являются родственными элементами Text
.Однако невозможно вызвать setState виджета Text
непосредственно из родственных виджетов.Как я понимаю, смысл реактивной парадигмы состоит в том, что состояние может передаваться по древу.Однако, если я сделаю свой Scaffold
как StatefulWidget
и обновлю состояние родителя каждые 0,5 секунды, он будет перерисовывать весь мой Scaffold
со всеми его потомками.Поэтому в конечном итоге, когда Scaffold
станет достаточно большим, ему придется обновить все вместо одного Text
виджета.
Я прав?И есть ли решение для этого.Я прочитал кое-что о Streams и Sinks, однако это выглядит очень сложно, и я думаю, что должно быть другое решение.