I have a StreamController which should update a List
but it doesn't happen:
class LocationService {
StreamController<List<bg.Geofence>> geofencesController = StreamController<List<bg.Geofence>>();
updateGeofences(geofences) {
logger.i('listing geofences $geofences');
geofencesController.add(List.from(list));
}
}
When I call updateGeofences
I got many geofences in logs.
But widget are not rebuilt!
Here is my providers setup:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<List<bg.Geofence>>.value(
updateShouldNotify: (_, __) {
logger.i('updateShouldNotify, $_, $__');
return true;
},
initialData: List<bg.Geofence>(),
stream: LocationService().geofencesController.stream)
],
child: MaterialApp()
);
}
}
When I listen directly from my service with
geofencesController.stream.listen((onData) {
logger.i('Got eem! $onData');
});
The streams emits new data...
But not in the StreamProvider: updateShouldNotify
is never called (I tried without luck this answer's solutions)
Here is how I get my data in view:
class GPSView extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<bg.Geofence> geofences = Provider.of<List<bg.Geofence>>(context);
But this list remains empty.
I have another StreamController with a simple Map which works perfectly. What's wrong?