Как стать автором
Обновить

Комментарии 4

.interceptors.add

Зачем добавлять новые при каждом вызове get? Лучше поместить это в dioProvider

final container = ProviderContainer();

Зачем создавать контейнер для 1 зависимости?

LocaleNotifier() : super(sharedPreference.locale) {

sharedPreference лучше брать из контейнера

Спасибо, исправлю)

Но как по-другому, без контейнера получить доступ к провайдеру риверпода?

В целом в корне дерева создаётся контейнер с помощью ProviderScope или если нужно, то создаётся ранее и потом вставляется в корень дерева с помощью UncontrolledProviderScope

Так же, обычно провайдеры создают как top-level variables, что бы они не пересоздавались.

Так же достаточно удобная возможность - использование riverpod как DI:

final httpQueryProvider = Provider(
  (ref) => HttpQuery(
    ref.watch(dioProvider),
  ),
  dependencies: [
    dioProvider,
  ],
  name: 'httpQuery',
);

class HttpQuery {
  HttpQuery(this._dio);

  final Dio _dio;

  Future<Object?> get({
    required String url,
    Map<String, Object?>? queryParameters,
    Map<String, Object?>? headerData,
  })  {
    ...
  }
}

Кстати, я пересмотрел статью ещё раз и не понял как связан LocaleNotifier и HttpQuery

Спасибо, понятнее стало)

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории