Управление состоянием флаттера с помощью профиля пользователя - PullRequest
0 голосов
/ 09 июля 2020

Я долго ломал голову над управлением состоянием в трепете, но есть проблема, которую я пытаюсь решить. Допустим, в вашем приложении есть функция под названием «профиль пользователя», которая похожа на профиль Facebook или Instagram. Пользователь может открывать страницу пользователя несколько раз, и если они обновят что-то в профиле (например, сообщение), вся страница профиля этого пользователя должна быть обновлена. Теперь в React Native у меня будет состояние пользователя, которое представляет собой карту {user_id -> user_profile}. Все страницы профиля пользователя, которым необходимы данные пользователя, будут ссылаться на профиль пользователя с указанным c идентификатором пользователя. Поскольку для идентификатора пользователя существует только один профиль пользователя, если я что-то обновлю, все страницы будут обновлены.

У меня аналогичная настройка во Flutter. У меня есть UserProfilesChangeNotifier, который содержит карту . Каждый раз, когда открыта страница пользователя, я использую ChangeNotifierProvider.value, чтобы передать ей карту. В initState я бы проверил, существует ли конкретный user_id на карте, в противном случае UserProfilesChangeNotifier должен будет получить данные с сервера. В методе build я бы прочитал пользовательские данные с помощью userProfile.map[user_id], и аналогичным образом я также обновляю данные с помощью UserProfilesChangeNotifier (с прикрепленным notifyListeners ()). Я могу подумать о некоторых проблемах с этой настройкой:

  • Согласно документации Flutter, вам следует избегать использования ChangeNotifier с большим количеством слушателей, поскольку это O (N²) для отправки уведомлений. В моем случае его придется слушать многим пользовательским страницам. Можно ли решить эту проблему с помощью ChangeNotifierProvider?
  • Если пользователь открывает страницу профиля для пользователя с идентификатором 1, 2, 3, 4, затем переходит к обновлению данных в пользователе с идентификатором 4 (запишите его на карту и notifyListeners), все пользовательские страницы для пользователя 1, 2, 3 также придется перестроить, хотя это и не требуется. Что бы вы сделали в этом случае?

1 Ответ

0 голосов
/ 09 июля 2020

На ваши вопросы, да, это разрешимо, например, с помощью ChangeNotifierProvider. Я работаю над музыкальным / видео приложением, которое также имеет сейчас много сложности, и с помощью State Management вы можете определить действительно хорошо, что вы хотите перезагружать, а не загружать.

Представьте себе действительно большое дерево виджетов, внутри только одно значение, которое необходимо обновить, бросило ваш userprofile, вы можете, например, использовать Consumer, который делает точно то же самое после того, как слушатели получили уведомление, но оно только перестраивает дерево над собой, что означает, что вы можете определить довольно Хорошо, что перезагружаются только указанные c части.

Вы также можете вызывать функции с выражением listen, false без уведомления какого-либо виджета. Существует множество сценариев ios, в которых вы просто вызываете саму функцию.

Проверьте эту статью, она действительно хороша для того, что возможно с поставщиками https://medium.com/flutter-community/making-sense-all-of-those-flutter-providers-e842e18f45dd

...