Dart Riverpod 合并两个相同类型的提供商

问题描述 投票:0回答:1

我正在寻找一种方法将两个提供程序(都发出相同类型的值)组合成一个,以便生成的提供程序发出由两个输入提供程序之一发出的最新值。

示例:

import 'package:riverpod/riverpod.dart';

// Example StateNotifier for a simple counter.
class Counter extends StateNotifier<int> {
  Counter() : super(0);

  void increment() {
    state++;
  }
}

// Create multiple providers of the same type.
final counterProvider1 = StateNotifierProvider<Counter, int>((ref) => Counter());
final counterProvider2 = StateNotifierProvider<Counter, int>((ref) => Counter());

// Create a provider that combines the latest values.
final mergeCounterProvider = Provider<int>((ref) {
  final counter1 = ref.watch(counterProvider1);
  final counter2 = ref.watch(counterProvider2);

  // TODO return the latest value
  return ???;
});

mergeCounterProvider
需要更新并发出最新更新的计数器的值。

flutter dart provider riverpod
1个回答
0
投票

使用

ref.listen for both
,在构建/创建中进行设置,并将更新的值推送到
ref.state
。它将自动成为两个流中最新的一个

final mergeCounterProvider = Provider<int?>((ref) {
  ref
    ..listen(counterProvider1, (_, value) {
      ref.state = value;
    })
    ..listen(counterProvider2, (_, value) {
      ref.state = value;
    });
  return null;
});
© www.soinside.com 2019 - 2024. All rights reserved.