簡體   English   中英

從 StreamBuilder BloC firestore Flutter 獲取數據時出錯

[英]Error when getting data from StreamBuilder BloC firestore Flutter

我在 Flutter 中的 APP 出現問題...我試圖從 Bloc 和 Repositore 和 Firestore 獲取數據,它顯示在我的 GridView 中,但出現此錯誤:

在此處輸入圖像描述

我的用戶界面代碼:

Widget bodyGallery2() => SafeArea(
    child: Scaffold(
      body: Stack(
        children: <Widget>[
          StreamBuilder<List<PhotoDish>>(
            stream: _dishBloc.streamPhotoDish,
            builder: (context, snapshot) {
              if (!snapshot.hasData) {
                return CircularProgressIndicator();
              }
              print(snapshot.toString());
              return GridView.count(
              crossAxisCount: 1,
              crossAxisSpacing: 4.0,
              mainAxisSpacing: 8.0,
              childAspectRatio: 3/2,
              children: snapshot.data
                    .map((photo)=>buildItemPhoto(photo)),
              );
            }
      )
        ]
    ),
    ),
  );

  Widget buildItemPhoto(PhotoDish listphoto){
    return Text(listphoto.idDish+":::PhotoDish");
  }

我的 Bloc 代碼,它有 Stream 到我的回購中的 PhotoDish 列表:

class DishBloc extends Bloc{ 
  RepositoryFirestore _repository = RepositoryFirestore();

  PhotoDishRepo _repo = FirestoreDishProvider();
  Stream<List<PhotoDish>> get streamPhotoDish => _repo.streamPhotoDish;

我的回購代碼調用從 firebase 獲取數據,並在 StreamController 中設置:

abstract class PhotoDishRepo {
  Stream<List<PhotoDish>> get streamPhotoDish;
}
class FirestoreDishProvider implements PhotoDishRepo{
  StreamController<List<PhotoDish>> _streamController = BehaviorSubject<List<PhotoDish>>();

  Firestore _firestore = Firestore.instance;
  List<PhotoDish> _listPhotoDish = List();

  FirestoreDishProvider() {

    _firestore
      .collection(Constants.namePhotoDishCollection) 
      .snapshots()
      .listen((QuerySnapshot snapshot){
        snapshot.documents.forEach((obj){
          _listPhotoDish.add(PhotoDish(
            date: DateTime.now(),
            id: obj.data["id"],
            idDish: obj.data["idDish"],
            idUser: obj.data["idUser"],
            photo: obj.data["photo"],
          ));
        });

print("TOTALL:::"+_listPhotoDish.length.toString());
        _streamController.add(_listPhotoDish);
      });
  }

我認為您只是想在將列表映射到小部件的末尾添加.ToList() 方法。

Map 僅將您的數據轉換為小部件,它返回單個小部件,而 gridview 子參數需要小部件列表,因此您必須將其轉換為列表。

children: snapshot.data
                    .map((photo)=>buildItemPhoto(photo)).toList(), //convert to list
              );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM