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 目的很有用。
我遇到了一些使用 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 目的很有用。