Riverpod:为什么使用 Provider 而不是全局最终变量

Riverpod: why use a Provider instead of a global final variable

我遇到了一些使用 Riverpod 的代码,例如使用 Riverpod 提供程序使用 Dio 检索 http 数据,如下所示:

final client = Provider((ref) => Dio());

然后用它来获取数据:

final response = await ref.watch(client).getUri<Map<String, Object?>>(uri, cancelToken: cancelToken);

为什么要为客户端使用 Riverpod Provider,因为它的引用永远不会改变,而不是使用全局变量?:

final clientDio = Dio();

final response = await clientDio.getUri<Map<String, Object?>>(uri, cancelToken: cancelToken);

使用提供程序允许使用覆盖将实现替换为不同的实现。

对于 HTTP 客户端,这可以允许用 returns 预先确定的响应的假客户端替换它。 这对于测试或 development/debugging 目的很有用。