Estou tentando escrever uma classe de provedor com ChangeNotifier. Como a classe é projetada para ser genérica, então os dados dentro dela são genéricos, pensei em passar uma função de extração de detalhes para essa classe de provedor.
Aqui está o que escrevi até agora.
class MapProvider<T> with ChangeNotifier {
String Function(T) idExtract;
List<T> _locationList = [];
T? _selectedLocation;
MapProvider(this.idExtract);
...
E use assim.
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => MapProvider(
(pin) => (pin as ILocationPin).id,
),
),
],
child: MapConsumerWidget()
)
No entanto, um erro foi lançado com tela vermelha: Error: Could not find the correct Provider<MapProvider<dynamic>> above this MapConsumerWrapper widget.
Eu tentei mudar o tipo de idExtract
para tipo primitivo like int
e o código funciona. Por que isso acontece e como consertar, se possível?
Edição: Adicionado o código utilizando o notificador com 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;