【问题标题】:Flutter Riverpod: Filter rebuilds with StateNotifier and .select()Flutter Riverpod:使用 StateNotifier 和 .select() 重建过滤器
【发布时间】:2021-12-01 04:52:00
【问题描述】:

这是我目前的状态管理解决方案

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 提供了一种方法来做到这一点link,但我无法让它与我的 StateNotifier 一起工作。

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

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

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

感谢任何帮助!

【问题讨论】:

    标签: flutter flutter-provider riverpod


    【解决方案1】:

    根据doc,“这种监听对象的方法目前只有来自 hooks_riverpod 和 ProviderContainer.listen 的 useProvider 支持”。

    尝试创建另一个可以在 UI 中使用的提供程序。

    final nameProvider = StateProvider<String>((ref) => ref.watch(userNotifierProvider.select((user) => user.name)));
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 2021-04-04
        • 2021-03-26
        • 1970-01-01
        • 2021-03-17
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2023-02-01
        相关资源
        最近更新 更多