Flutter Riverpod FutureProvider提供异步值依赖项注入不可能

Flutter Riverpod FutureProvider提供异步值依赖项注入不可能,flutter,asynchronous,dependency-injection,provider,riverpod,Flutter,Asynchronous,Dependency Injection,Provider,Riverpod,我有一个抽象类讲师职位,由讲师职位impl实现讲师职位执行初始化SharedReferences SharedReferences LectureLocalDataSourceImpl({@required this.sharedPreferences}) 现在,我想使用Riverpod访问存储库,因此: FutureProvider<LectureLocalDataSource>( (ref) async { return LectureLocalDataSo

我有一个抽象类
讲师职位
,由
讲师职位impl
实现<代码>讲师职位执行初始化
SharedReferences SharedReferences

LectureLocalDataSourceImpl({@required this.sharedPreferences})
现在,我想使用Riverpod访问存储库,因此:

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

我应该如何处理AsyncValue?

您可以调用AsyncValue上的
.data
,这将为您提供基础数据值。如果您需要区分加载、数据和错误,AsyncValue文档将解释如何使用。

我让If这样工作,对于使用
SharedReferences的持久主题:

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

final themeChangeNotifier = ChangeNotifierProvider<ThemeChangeNotifier>((ref) {
  final prefs = ref.watch(sharedPreferences)?.data?.value;
  return ThemeChangeNotifier(prefs);
});
我希望几天后能发布一段视频和回购协议:)

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(),
    );