我正在学习 Flutter 的 BloC 设计模式。
这是我的教程https://medium.com/flutterpub/architecting-your-flutter-project-bd04e144a8f1
我的问题是 StreamBuilder
中的 snapshot.data
始终为 null。
这是我的幻灯片模型:
class SlideModel {
Widget dot;
String urlImage, name;
SlideModel(this.dot, this.urlImage, this.name);
}
这是我的提供商:
class SlideProvider {
List<SlideModel> getList() {
List<SlideModel> listSlide = List<SlideModel>();
listSlide.add(SlideModel(
Dots.dot(Colors.black54), 'https://i.imgur.com/c7Uvh6h.jpg', 'A'));
listSlide.add(SlideModel(
Dots.dot(Colors.black54),
'https://cdn.shopify.com/s/files/1/0810/8331/files/category_banner_ip8.jpg?1347021331059137510',
'B'));
listSlide.add(SlideModel(
Dots.dot(Colors.black54), 'https://i.imgur.com/gAumC4V.jpg', 'C'));
listSlide.add(SlideModel(
Dots.dot(Colors.black54), 'https://i.imgur.com/n7g3Naf.jpg', 'D'));
return listSlide;
}
}
这是我的存储库:
class Repository {
SlideProvider _slideProvider = SlideProvider();
List<SlideModel> getAllSlide() {
return _slideProvider.getList();
}
}
幻灯片 block :
class SlideBloc {
Repository _repository = Repository();
final _streamController = PublishSubject<List<SlideModel>>();
Observable<List<SlideModel>> stream() {
return _streamController.stream;
}
getAllSlide() {
List<SlideModel> slides = _repository.getAllSlide();
_streamController.sink.add(slides);
}
dispose(){
_streamController.close();
}
}
final slideBloc = SlideBloc();
这是我的 UI 小部件,总是打印“无数据”。 我想修复它:
@override
Widget build(BuildContext context) {
slideBloc.getAllSlide();
// TODO: implement build
return StreamBuilder(
stream: slideBloc.stream(),
builder: (context, snapshot) {
if (!snapshot.hasError) {
if (snapshot.hasData) {
return slideShow(snapshot.data);
} else {
print('No data');
return Text('No Data');
}
} else {
print(snapshot.error);
return Text(snapshot.error);
}
},
);
}
最佳答案
我觉得可能跟
getAllSlide() {
List<SlideModel> slides = _repository.getAllSlide();
_streamController.sink.add(slides);
}
在您的 slideBloc 文件中。
试着把它变成这样:
fetchAllMovies() async {
ItemModel itemModel = await _repository.fetchAllMovies();
_moviesFetcher.sink.add(itemModel);
}
如果有帮助,请告诉我。
关于android - (BloC) StreamBuilder 总是 !snapshot.hasData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157209/