Riverpod FutureProvider обеспечивает внедрение зависимостей AsyncValue, что невозможно

У меня абстрактный класс LectureRepository реализовано. LectureRepositoryImpl инициализирует SharedPreferences sharedPreferences с участием

      LectureLocalDataSourceImpl({@required this.sharedPreferences})

Теперь я хочу использовать Riverpod для доступа к репозиторию, поэтому делаю:

          FutureProvider<LectureLocalDataSource>(
  (ref) async {
    return LectureLocalDataSourceImpl(sharedPreferences: await SharedPreferences.getInstance());
  },
);

но теперь в lectureRepositoryProvider, когда я читал lectureLocalDataRepositoryProvider Я получаю AsyncValue в значении localDataSource, который я не могу назначить здесь:

      final lectureRepositoryProvider = FutureProvider<LectureRepository>((ref) async {
  final localDataSource = ref.read(lectureLocalDataRepositoryProvider);
  return LectureRepositoryImpl(localDataSource: localDataSource);
});

Как мне обрабатывать AsyncValue?

2 ответа

Я сделал, если так работает, для темы, устойчивой с SharedPreferences:

      final sharedPreferences =
    FutureProvider((ref) => SharedPreferences.getInstance());

final themeChangeNotifier = ChangeNotifierProvider<ThemeChangeNotifier>((ref) {
  final prefs = ref.watch(sharedPreferences)?.data?.value;
  return ThemeChangeNotifier(prefs);
});

и используйте это так:

       final isDartTheme = watch(themeChangeNotifier).isDarkTheme;
    final prefs = watch(sharedPreferences);
    return prefs.when(
      loading: () => Material(
        child: CircularProgressIndicator(),
      ),
      data: (_) => MaterialApp(
        title: 'Flutter Demo',
        theme: isDartTheme ? ThemeData.dark() : ThemeData.light(),
        home: SearchPage(),
      ),
      error: (_, __) => SizedBox.shrink(),
    );

Надеюсь, через пару дней опубликую видео и репо :)

Вы можете позвонить .dataна AsyncValue, который дает вам базовое значение данных. Если вам нужно различать загрузку, данные и ошибку, документ AsyncValue объяснит, как это сделать.

Другие вопросы по тегам