有没有办法访问提供的“ .family”更改通知程序的实例(已经实例化,传递了正确的参数)而无需再次传递参数?
在提供者中
当您创建 ChangeNotifier(需要参数)的提供程序时,您可以获得与它提供的相同的更改通知程序Provider.of<ChangeNotif>(context);
class ChangeNotif extends ChangeNotifier {
final String id;
const ChangeNotif(this.id);
}
ChangeNotifierProvider(create: (_) => ChangeNotif("dash"));
Run Code Online (Sandbox Code Playgroud)
一旦使用正确的参数创建了提供者,您就可以在该小部件树的任何位置获取它提供的任何内容,而无需任何类似Provider.of<ChangeNotif("dash")>(context)but 的语法Provider.of<ChangeNotif>(context)。
在河港
由于在获取它的实例时必须将参数传递给提供者,因此我不得不将提供者分配给一个变量,以便将其传递给需要提供者提供的更改通知程序的子级。
final changeNotifProvider = ChangeNotifierProvider.family<ChangeNotif, String>((ref, id) => ChangeNotif(id));
class A extends HookWidget {
build() {
final _changeNotifProvider = changeNotifProvider("dash");
final _changeNotif = useProvider(_changeNotifProvider);
return Column(
children: [
B(),
c(_changeNotifProvider),
]
);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在_changeNotif不将其作为参数传递给子小部件的情况下获得实例化?有什么方法可以在另一个不是 A 子级的小部件中获取 _changeNotif 的相同实例(例如Provider.of<ChangeNotif>(context)在 Provider 中使用而无需传递新参数)?
是否有与 Riverpod 中 Provider 的 ChangeNotifierProvider 小部件等效的小部件?
用例是仅当父小部件为 ChangeNotifierProvider/或在其小部件树中具有 ChangeNotifierProvider 的页面已使用 推送到导航器堆栈时才创建提供程序create。我希望在弹出页面时自动处理提供者,并且 ChangeNotifierProvider 小部件从小部件树中删除,就像在 Provider 中一样。
provider state-management flutter flutter-change-notifier riverpod