首页 > 解决方案 > Flutter Riverpod:使用 StateNotifier 和 .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());

我只想在名称更改而不是 id 时重建我的 UI!

Riverpod 提供了一种方法来执行此链接,但我无法让它与我的 StateNotifier 一起使用。

我会这样写,但它不是这样工作的。

// inside Consumer widget
final userName = watch(userNotifierProvider.select((value) => value.state.name));

您可以重构我的代码以使其正常工作或提出其他解决方案吗?

任何帮助表示赞赏!

标签: flutterflutter-providerriverpod

解决方案


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

推荐阅读