gpt4 book ai didi

flutter - StreamProvider未更新列表

转载 作者:行者123 更新时间:2023-12-03 03:39:53 26 4
gpt4 key购买 nike

我有一个StreamController应该更新List,但不会发生:

class LocationService {
StreamController<List<bg.Geofence>> geofencesController = StreamController<List<bg.Geofence>>();

updateGeofences(geofences) {
logger.i('listing geofences $geofences');
geofencesController.add(List.from(list));
}
}

当我调用 updateGeofences时,日志中出现了许多地理围栏。
但是小部件不会重建!

这是我的提供商设置:

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()
);
}
}


当我直接通过服务收听

geofencesController.stream.listen((onData) {
logger.i('Got eem! $onData');
});

流发出新数据...
但不是在StreamProvider中:永远不会调用 updateShouldNotify(我很幸运地尝试了这个 answer's解决方案)

这是我如何查看数据的方法:

class GPSView extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<bg.Geofence> geofences = Provider.of<List<bg.Geofence>>(context);


但是此列表仍然为空。

我有另一个StreamController和一个简单的Map,可以很好地工作。怎么了?

最佳答案

因此,由于@pskink和@RémiRoussele的评论,我设法解决了这个问题:

我通过调用LocationService重新创建了LocationService().geofencesController.stream

我将代码更新为

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<List<bg.Geofence>>(
builder: (_) => locator<LocationService>().geofencesController,
initialData: List<bg.Geofence>(),
),
],
child: MaterialApp();
}
}

现在一切正常!干杯!

关于flutter - StreamProvider未更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57788589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com