在加载数据或等待加载数据时,如何重新加载Consumer。我正在使用Future Provider,当加载数据(currentPosition Fetched(时,一切都在重建自己,并在等待时使用circularProgress()
。但消费者并不是在重建自己,也不能使用等待和消费者套餐。当我在调试时保存代码时,当它热重新加载时,一切都很好,但这不是一个解决方案。我希望消费者在获取数据时自动重新加载。我正在获取数据以在google_Maps_Flutter 上制作标记
body: (currentPosition != null)
? Consumer<List<Bar>>(builder: (_, places, child) {
List.generate(places.length, (index) async {
print(places.length);
print(index);
print(imageUrl(places[index].photoRef));
List<String> wordList = places[index].name.split(" ");
bitmapIcon = await customBitmapDescriptor(
imageUrl: imageUrl(places[index].photoRef),
title: wordList[0],
);
markers = markerService.getBarMarkers(
places,
markerIcon: this.bitmapIcon,
);
print(markers.isEmpty);
});
加载数据时使用setState((){});
重建。在要重建的位置添加setState((){});
,例如,如果要在位图中加载数据时重新加载Icon,则添加
bitmapIcon = await convertImageFileToCustomBitmapDescriptor(
imageUrl: imageUrl(places[index].photoRef),
title: wordList[0],
).then((value) {
setState(() {});
});
如果您想在标记中加载数据时重新加载,请使用
setState(() {
markers = markerService.getBarMarkers(
places,
markerIcon: this.bitmapIcon,
);
});
第一种情况
body: (currentPosition != null)
? Consumer<List<Bar>>(builder: (_, places, child) {
List.generate(places.length, (index) async {
print(places.length);
print(index);
print(imageUrl(places[index].photoRef));
List<String> wordList = places[index].name.split(" ");
bitmapIcon =await convertImageFileToCustomBitmapDescriptor(
imageUrl: imageUrl(places[index].photoRef),
title: wordList[0],
).then((value) {
setState(() {});
});
markers = markerService.getBarMarkers(
places,
markerIcon: this.bitmapIcon,
);
print(markers.isEmpty);
});
第二种情况
body: (currentPosition != null)
? Consumer<List<Bar>>(builder: (_, places, child) {
List.generate(places.length, (index) async {
print(places.length);
print(index);
print(imageUrl(places[index].photoRef));
List<String> wordList = places[index].name.split(" ");
bitmapIcon = await convertImageFileToCustomBitmapDescriptor(
imageUrl: imageUrl(places[index].photoRef),
title: wordList[0],
);
if(!isSet){
setState(() {
markers = markerService.getBarMarkers(
places,
markerIcon: this.bitmapIcon,
);
});
}
print(markers.isEmpty);
});
如果此解决方案有帮助,请竖起大拇指
使用notifyListener()
可以更改使用者的状态。
下面是一个示例代码。如果你需要更多,请告诉我。
Consumer<DataProviderClass>(
builder: (context, portfolioProvider, _) {
print("state changed");
return RaisedButton(
child: Text("Press"),
onPressed : () =>
Provider.of<DataProviderClass(context).fetchData(),
);
}
);
class DataProviderClass with ChangeNotifier{
fetchData(){
notifyListener();
}
}