断言失败:第 1702 行 pos 12:'center!.parent == this':不是 true

Sem*_*maz 6 dart firebase flutter google-cloud-firestore

出现错误的原因是什么?

当我将调试标志放入 Streambuilder 行时,我的应用程序在进入主屏幕之前就冻结了。

body: CustomScrollView(
        slivers: [
          StreamBuilder<QuerySnapshot>(
            stream: FirebaseFirestore.instance
                .collection('posts')
                .limit(10)
                .orderBy('id', descending: true)
                .snapshots(),
            builder: (BuildContext context,
                AsyncSnapshot<QuerySnapshot> dataSnapshot) {
              return !dataSnapshot.hasData
                  ? SliverToBoxAdapter(
                      child: linearProgress(),
                    )
                  : SliverStaggeredGrid.countBuilder(
                      crossAxisCount: 1,
                      staggeredTileBuilder: (val) => StaggeredTile.fit(1),
                      itemBuilder: (context, index) {
                        DataModel model = DataModel.fromJson(
                            dataSnapshot.data!.docs[index].data()
                                as Map<String, dynamic>);
                        return sourceInfo(model, context);
                      },
                      itemCount: dataSnapshot.data!.docs.length);
            },
          ),
        ],
      ),
Run Code Online (Sandbox Code Playgroud)

我将相关代码导入SliverPadding时没有问题。编辑后的代码。

StreamBuilder<QuerySnapshot>(
            stream: FirebaseFirestore.instance
                .collection('posts')
                .limit(10)
                .orderBy('id', descending: true)
                .snapshots(),
            builder: (BuildContext context,
                AsyncSnapshot<QuerySnapshot> dataSnapshot) {
              return !dataSnapshot.hasData
                  ? SliverPadding(
                sliver: SliverToBoxAdapter(
                  child: ColorLoader(),
                ),
                padding: EdgeInsets.all(0),
              )
                  : SliverPadding(
                sliver: SliverStaggeredGrid.countBuilder(
                    crossAxisCount: 1,
                    staggeredTileBuilder: (_) => StaggeredTile.fit(1),
                    itemBuilder: (context, index) {
                      DataModel model = DataModel.fromJson(
                          dataSnapshot.data!.docs[index].data()
                          as Map<String, dynamic>);
                      return sourceInfo(model, context);
                    },
                    itemCount: dataSnapshot.data!.docs.length),
                padding: EdgeInsets.all(0),
              );
            },
          ),
Run Code Online (Sandbox Code Playgroud)

小智 5

根据Github 线程中针对类似问题的评论,如果被替换的条子不是第一个,它应该可以正常工作。

因此,一个可能的解决方法是在 BodyContent() 之前添加空的 SliverToBoxAdapter() 作为第一个 sliver。

Github 线程中有更多信息和可能的解决方案,我建议您查看一下。