Как правильно использовать провайдера в моем приложении чата, сделанном во флаттере? - PullRequest
0 голосов
/ 25 апреля 2020

Я новичок во Flutter и потратил много времени на изучение руководств и бесед Google io по управлению состоянием. Я решил использовать провайдера в своем приложении чата, которое также использует Google Cloud Firestore в качестве бэкэнда для всего, от аутентификации до отправки и извлечение сообщений. Мне уже дважды приходилось перестраивать приложение из-за ошибок дизайна.

Вот как в настоящее время работает мое приложение, и использует ли оно провайдера правильно или неправильно?

Вот дерево виджетов более высокого уровня

Main -> Provider // Backend для разрешения зарегистрироваться и войти с помощью firebase

--- Дочерний объект: StreamProvider FirebaseUser.value (FirebaseAuthService.onAuthStateChanged)

--- Дочерний объект: потребитель FirebaseUser

- --Child is: Provider FirestoreService, который принимает значение зарегистрированного пользователя и выполняет все мои действия, такие как создание и присоединение к групповому чату для пользователя и отправка сообщения для пользователя

--- Дочерний объект: Consumer FirestoreService

--- дочерний элемент: StreamProvider User.value (значение: userService.getUserProfileStream ()) // Этот поток из пользовательского документа в firestore, который создается после того, как пользователь зарегистрировал учетную запись

--- дочерний элемент : Потребительский пользователь // Моя пользовательская модель пользователя

--- Дочерний объект: ChangeNotifierProvider ValueNotifier bool // Переносит список моих групповых чатов и страницу сообщений, если true показывает групповые чаты list, если false показывает, что сообщения для страницы группового чата были выбраны

--- Дочерний объект: StreamBuilder Iterable GroupChat (stream: firestoreService.getGroupChatsStream ()) // Я передаю любые изменения в документы групповых чатов из firestore для пользователя

--- дочерний элемент: селектор ValueNotifier bool, bool // если true показывает список групповых чатов, если false показывает сообщения для выбранной страницы группового чата

--- дочерний элемент is: страница списка групповых чатов, если селектор true

--- дочерний элемент: страница сообщения, если false

Как я использую Provider

- прямо сейчас я смешиваю StateFull виджеты с кодом, который слушает изменения моего провайдера, это неправильно? Должен ли я использовать виджеты без сохранения состояния только в классах с провайдером и помещать все переменные, которым требуется состояние, в некоторый класс модели уведомлений об изменениях.

- Вместо маршрутов страниц я также использую провайдера для переключения между страницами в моем приложении. решить, какой виджет будет обработан с помощью логического селектора. Это неправильно, если я просто использую маршруты страниц вместо этого? Я чувствовал, что с маршрутами страниц у них не было такого же предка, как там, где я выдвигал их для правильной работы провайдера.

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

Спасибо.

...