как заставить элементы пользовательского интерфейса строить параллельно при использовании StreamBuilders - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть некоторые проблемы с производительностью в моем приложении (джанк и зависание кадров), которые видны пользователю даже в режиме релиза. Мои проблемы начинаются с того, что пользовательскому интерфейсу приходится много перестраивать на основе одного действия - кнопки воспроизведения / паузы.

Мое приложение построено на базе streamBuilders, и при нажатии кнопки «Воспроизведение / пауза» в поток добавляется состояние, и необходимо перестроить до 4 виджетов одновременно, чтобы справиться с изменениями. Это вызывает зависание в кадрах от 0,5 секунды до даже 1 секунды с явным сотрясением в виджетах spla sh из Inkwell.

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

Код триггера - это простой вызов плагина (изолированный ) и обновление потока с новым значением. Весь код хранится и выполняется в одном и том же потоке (потоке пользовательского интерфейса).

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

РЕДАКТИРОВАТЬ: мой код с открытым исходным кодом: https://github.com/moda20/flutter-tunein

Таким образом, запуск этого скажет плагину audioPlayer для воспроизведения треков это происходит мгновенно и не имеет проблем. проблема заключается в следующих строках, где вызывается updatePlayback, и он выдвигает новое значение MapEntry<PlaybackState, Tune>, содержащее текущее состояние воспроизведения и текущее воспроизведение песни в поток playerState$. Это приведет к тому, что все подписки streamBuilder будут обновлены sh, и есть несколько таких, которые в настоящее время уже собраны и хранятся в памяти.

...