Riverpod的提供商



所以我使用的是Flutter游戏模板,我发现它是:

ProxyProvider2<SettingsController, ValueNotifier<AppLifecycleState>,
AudioController>(
// Ensures that the AudioController is created on startup,
// and not "only when it's needed", as is default behavior.
// This way, music starts immediately.
lazy: false,
create: (context) => AudioController()..initialize(),
update: (context, settings, lifecycleNotifier, audio) {
if (audio == null) throw ArgumentError.notNull();
audio.attachSettings(settings);
audio.attachLifecycleNotifier(lifecycleNotifier);
return audio;
},
dispose: (context, audio) => audio.dispose(),
),

但不幸的是,我不喜欢提供者。如何将此提供程序转换为riverpod?

Riverpod中的等价物是:

final settingsProvider = Provider<SettingsController>(...);
final appLifecycleStateProvider = Provider<ValueNotifier<AppLifecycleState>>(...);

final audioControllerProivder = Provider<AudioController>((ref) {
final audio = AudioController()..initialize();
ref.onDispose(audio.dispose);
ref.listen<SettingsController>(settingsProvider, (prev, next) {
audio.attachSettings(next);
});
ref.listen<ValueNotifier<AppLifecycleState>>(appLifecycleStateProvider, (prev, next) {
audio.attachLifecycleNotifier(next);
});
return audio;
});

尽管有可能通过使用ref.watch来进一步简化这一点。但上面的片段应该是的一个良好开端

Remi Rousselet

使用ref.listen不起作用,我只是把它改成了ref.watch

最新更新