ProviderScopeをoverrideする際に、Cannot override providers on a non-root ProviderContainer/ProviderScope
とエラーが出た時は、以下のようにScopedProvider
を使うと解決します。
https://github.com/rrousselGit/river_pod/pull/49#issuecomment-658603800 より引用
final itemIndex = ScopedProvider<int>(null);
...
ListView(
children: [
ProviderScope(
overrides: [
productId.overrideAs(0)
],
child: Item(),
),
ProviderScope(
overrides: [
productId.overrideAs(1)
],
child: Item(),
),
],
),
...
// inside Item
Widget build(context) {
final itemId = useProvider(productId);
}
ScopedProvider
ははじめて知ったのですが、Scopedな(一部分で使われる、動的に作られる)Providerということがわかりやすくなって良いアップデートだと思います。
riverpodはアップデートが頻繁なので時々困ることもありますね・・