Комментарии 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
Спасибо, понятнее стало)
Возможно я неправильно объяснял в начале, там изменение языка это по сути лишь пример. Для рядового, кто только щупает риверпод, то для них при его использовании могут быть проблемы с мульти-запросами, во-о-от я и попытался своим решением поделиться, так как в интернете ничего особо не нашел. Поэтому рад к корректировкам и благодарен тебе.
Как подключить локализацию L10n c Riverpod без ошибок с HTTP Requests