I have a Provider
that returns a Map
. the map reference is constant, however the content of the map changes.
When I watch
my provider in a ConsumerWidget
, my build method does not get trigger. Even though I can clearly see my provider code executing.
<code>final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// we always get here
return value;
} else {
return CranesMap(); // we never really get here
}
});
</code>
<code>final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// we always get here
return value;
} else {
return CranesMap(); // we never really get here
}
});
</code>
final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// we always get here
return value;
} else {
return CranesMap(); // we never really get here
}
});
if I am creating a deep copy of the map, everything works, my build method gets triggered as expected.
<code>final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// workaround that works
final mapCopy = Map<String, CraneDescAndState>.from(value);
return mapCopy;
} else {
return CranesMap(); // we never really get here
}
});
</code>
<code>final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// workaround that works
final mapCopy = Map<String, CraneDescAndState>.from(value);
return mapCopy;
} else {
return CranesMap(); // we never really get here
}
});
</code>
final lastCraneDescStateProvider = Provider<CranesMap>((ref) {
final value = ref.watch(lastCraneDescStateStreamProvider).value;
if (value != null) {
// workaround that works
final mapCopy = Map<String, CraneDescAndState>.from(value);
return mapCopy;
} else {
return CranesMap(); // we never really get here
}
});
I know there is a ref.notifyListeners()
method I can call, but calling it inside the provider code did not make any difference.
So how can I force my provider to notify its listeners?