Я новичок во 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 виджеты с кодом, который слушает изменения моего провайдера, это неправильно? Должен ли я использовать виджеты без сохранения состояния только в классах с провайдером и помещать все переменные, которым требуется состояние, в некоторый класс модели уведомлений об изменениях.
- Вместо маршрутов страниц я также использую провайдера для переключения между страницами в моем приложении. решить, какой виджет будет обработан с помощью логического селектора. Это неправильно, если я просто использую маршруты страниц вместо этого? Я чувствовал, что с маршрутами страниц у них не было такого же предка, как там, где я выдвигал их для правильной работы провайдера.
- Многие из указанных выше потоков, потребителей и селекторов принадлежат к одному классу, если я заставляю каждого провайдера быть в своем собственном виджете без учета состояния, или это нормально, чтобы провайдеры и селекторы были в одном виджете без сохранения состояния или состояния.
Спасибо.