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)));