Flutter Riverpod:使用 StateNotifier 和 .select() 重建过滤器
Flutter Riverpod: Filter rebuilds with StateNotifier and .select()
这是我目前的状态管理解决方案
class UserState {
final int id;
final String name;
}
class UserNotifier extends StateNotifier<UserState> {
UserNotifier() : super(User(1, 'Pero Peric'));
}
final userNotifierProvider = StateNotifierProvider((ref) => UserNotifier());
我想重建我的 UI 只有当名字改变而不是 ID 时!
Riverpod 提供了执行此操作的方法link,但我无法使用我的 StateNotifier。
我会这样写,但它不是这样工作的。
// inside Consumer widget
final userName = watch(userNotifierProvider.select((value) => value.state.name));
你能重构我的代码以使其工作或提出另一个解决方案吗?
感谢任何帮助!
class UserState {
UserState({
required this.id,
required this.name,
});
final int id;
final String name;
}
class UserNotifier extends StateNotifier<UserState> {
UserNotifier() : super(UserState(id: 1, name: 'Pero Peric'));
}
final userNotifierProvider =
StateNotifierProvider<UserNotifier, UserState>((ref) => UserNotifier());
在消费者中,
final userName =
watch(userNotifierProvider.select((value) => value.name)); // value is the state
根据 doc,“目前只有 hooks_riverpod 和 ProviderContainer.listen 的 useProvider 支持这种监听对象的方法”。
尝试创建另一个提供程序,您可以在 UI 中使用它。
final nameProvider = StateProvider<String>((ref) => ref.watch(userNotifierProvider.select((user) => user.name)));
这是我目前的状态管理解决方案
class UserState {
final int id;
final String name;
}
class UserNotifier extends StateNotifier<UserState> {
UserNotifier() : super(User(1, 'Pero Peric'));
}
final userNotifierProvider = StateNotifierProvider((ref) => UserNotifier());
我想重建我的 UI 只有当名字改变而不是 ID 时!
Riverpod 提供了执行此操作的方法link,但我无法使用我的 StateNotifier。
我会这样写,但它不是这样工作的。
// inside Consumer widget
final userName = watch(userNotifierProvider.select((value) => value.state.name));
你能重构我的代码以使其工作或提出另一个解决方案吗?
感谢任何帮助!
class UserState {
UserState({
required this.id,
required this.name,
});
final int id;
final String name;
}
class UserNotifier extends StateNotifier<UserState> {
UserNotifier() : super(UserState(id: 1, name: 'Pero Peric'));
}
final userNotifierProvider =
StateNotifierProvider<UserNotifier, UserState>((ref) => UserNotifier());
在消费者中,
final userName =
watch(userNotifierProvider.select((value) => value.name)); // value is the state
根据 doc,“目前只有 hooks_riverpod 和 ProviderContainer.listen 的 useProvider 支持这种监听对象的方法”。
尝试创建另一个提供程序,您可以在 UI 中使用它。
final nameProvider = StateProvider<String>((ref) => ref.watch(userNotifierProvider.select((user) => user.name)));