#flutter #stacked
#flutter #многоуровневый
Вопрос:
Я использую многоуровневую архитектуру в приложении Flutter.
У меня есть два представления — ScoresPage и NewScorePage, каждое со своей собственной ViewModel. Оценки хранятся в базе данных локально, но также отправляются в API.
ScoresPage отображает все оценки, а NewScorePage собирает информацию и запрашивает свою ViewModel создать новую оценку.
Я перехожу со страницы результатов через вызов Navigator.push на страницу новостей и использую Navigator.pop, чтобы вернуться к странице результатов.
Я хотел бы обновить страницу результатов при добавлении новой оценки после открытия страницы новостей. Каков наилучший способ сделать это?
Ответ №1:
вы можете проверить эту страницу https://pub.dev/packages/stacked чтобы перестроить ваш пользовательский интерфейс с новым обновленным состоянием ViewModel, было упомянуто там
Комментарии:
1. Я просмотрел эту страницу перед публикацией этого вопроса, и это было не очень очевидно. Можете ли вы указать ответ здесь?
Ответ №2:
Вы можете вернуть данные из страницы новостей в страницу результатов с помощью Navigator.pop, прочитайте этот пример. Также проверьте, являются ли возвращаемые данные нулевыми, потому что пользователь может вернуться без создания нового результата. После получения данных вы можете обновить их локально или вызвать функцию, которая будет извлекать данные из API и обновлять ваше представление.
Ответ №3:
Дейн Макье — автор stacked package упомянул об этой проблеме, вот 3 решения по его словам.
- Обратный вызов из службы: укажите способ установки обратного вызова для службы, который будет вызываться, когда что-либо в службе было обновлено и нуждается в обновлении.
- Встроенный в базовую модель: есть внутренняя служба обмена сообщениями, которая предоставляет потоки для прослушивания любому пользователю. Когда сообщения обновляются, они транслируются через эту службу. В модели или базовой модели прослушивайте сообщения и вызывайте слушателей notify, когда что-либо поступает.
- Снова транслируйте все сообщения: предоставьте поток сообщений в PostsService, на которые могут подписаться модели. Когда мы что-то меняем, мы транслируем новые сообщения.