В стриме у тебя бы было не два значения а n-ое количество.
Здесь же все проще из-за хуков React - так как под капотом используются useEffect, он вызывает ре-рендер твоего компонента и текущим значение на данный момент.
Например: кеш есть? да, запускаем промис для обновления, но возвращаем кеш. когда промис дойдет - результат положим в кеш, и вызовем ре-рендер, который уже получит новые данные.
Это как я понимаю "механику" работы в React'e, но насчет Flutter'a я без понятия