Riverpod 替代 SetUpLocator

问题描述

我想在 Flutter 应用启动时调用我的 Remote Config 实例 我已将 Riverpod 设置如下

class ConfigService {
  // Will Initialise here
  final RemoteConfig _remoteConfig;
  ConfigService(this._remoteConfig);

  Future<void> initialise() async {
  ...// Will fetchAndActivate
}

final remoteConfigProvider = Provider<RemoteConfig>((ref) {
  return RemoteConfig.instance;
});

final configProvider = Provider<ConfigService>((ref) {
  final _config = ref.read(remoteConfigProvider);
  return ConfigService(_config);
});

我想在 main 之后调用

...
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
... here

但这无法完成,因为需要一个 ReaderProviderScope 低于此级别

如何在我的 main 中调用此提供程序?

解决方法

简短的回答是你不能。您应该做的是在 ProviderScope 中调用 Provider。

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(
    ProviderScope(
      child: MyApp(),),);
}

class MyApp extends ConsumerWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context,ScopedReader watch) {
    final config = watch(configProvider);
    return Container();
  }
}