我正在尝试使用 ChangeNotifier 编写提供程序类。由于该类设计为通用的,因此其中的数据也是通用的,所以我想到将详细信息提取函数传递给此提供程序类。
这是我迄今为止所写的内容。
class MapProvider<T> with ChangeNotifier {
String Function(T) idExtract;
List<T> _locationList = [];
T? _selectedLocation;
MapProvider(this.idExtract);
...
并像这样使用它。
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => MapProvider(
(pin) => (pin as ILocationPin).id,
),
),
],
child: MapConsumerWidget()
)
但是,出现了错误,屏幕变红:Error: Could not find the correct Provider<MapProvider<dynamic>> above this MapConsumerWrapper widget.
我尝试将 的类型更改idExtract
为原始类型int
,代码可以正常工作。为什么会这样?如果可能的话,如何修复它?
编辑:添加了利用带有 Provider.of(context) 的通知程序的代码。
MapConsumerWrapper()
final mapProvider = Provider.of<MapProvider>(context, listen: false);
final providerState = Provider.of<MapProvider>(context);
final selectedPin = providerState.selectedLocation;
final locationList = providerState.locationList;
问题确实出在 的类型参数上。默认情况下使用
MapProvider
a ,因此实际上是 a 。dynamic
Provider.of<MapProvider>(context)
Provider.of<MapProvider<dynamic>>(context)
最好始终在
Provider
s 和类似项中设置类型参数(例如ChangeNotifierProvider
,以便始终清楚在树中实际提供的类型(以便可以使用来获取它Provider.of
:进而