【发布时间】:2021-08-12 08:15:37
【问题描述】:
我习惯于提供者的Provider.of() 调用以从小部件树中的其他位置获取提供者,但我发现的每个 Riverpod 资源都依赖于已经可以访问提供者变量(通过将两个小部件放在同一个文件中)。对于仅通过两个小部件访问的提供程序,传递此变量非常简单,但我认为这对于访问在小部件树中创建的提供程序不可行。有没有合适的方法来获取提供者?
【问题讨论】:
我习惯于提供者的Provider.of() 调用以从小部件树中的其他位置获取提供者,但我发现的每个 Riverpod 资源都依赖于已经可以访问提供者变量(通过将两个小部件放在同一个文件中)。对于仅通过两个小部件访问的提供程序,传递此变量非常简单,但我认为这对于访问在小部件树中创建的提供程序不可行。有没有合适的方法来获取提供者?
【问题讨论】:
您可以简单地导入定义提供程序的文件。Riverpod 提供程序是在全局范围内创建的,因此可以在任何地方访问。
例如:
// hello_provider.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
final helloWorld = Provider<String>((_) => 'Hello World');
// widget.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:my_app/hello_provider.dart'
class MyWidget extends ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
return Text(watch(helloWorld));
}
}
【讨论】: