Sem*_*maz 18 dart flutter google-cloud-firestore
我使用 SliverStaggeredGrid.countBuilder 显示从 Firestore 获得的数据,没有任何问题。我想用 listview.builder 显示我的数据。
我的正常代码是这样的,我想改变它以便能够过滤。
body: CustomScrollView(
slivers: [
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection(widget.title)
.orderBy("id", descending: true)
.snapshots(),
builder: (context, dataSnapshot) {
return !dataSnapshot.hasData
? SliverPadding(
sliver: SliverToBoxAdapter(
child: ColorLoader(
dotOneColor: Colors.white,
dotTwoColor: Colors.white,
dotThreeColor: Colors.white,
),
),
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)
当我在 sliver 中使用带有 listview.builder 的代码时,它不会在屏幕上显示任何数据。
body: CustomScrollView(
slivers: [
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('posts')
.orderBy("id", descending: true)
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> dataSnapshot) {
return !dataSnapshot.hasData
? SliverPadding(
sliver: SliverToBoxAdapter(
child: ColorLoader(
dotOneColor: Colors.white,
dotTwoColor: Colors.white,
dotThreeColor: Colors.white,
),
),
padding: EdgeInsets.all(0),
)
: ListView.builder(
itemCount: dataSnapshot.data!.docs.length,
itemBuilder: (context, index) {
DataModel model = DataModel.fromJson(
dataSnapshot.data!.docs[index].data()
as Map<String, dynamic>);
return sourceInfo(model, context);
},
);
},
),
],
),
Run Code Online (Sandbox Code Playgroud)
在这种情况下我该怎么办?
sal*_*ler 25
Flutter 有两个协议来绘制小部件。Sliver 和 Box 协议。StreamBuilder 最初是一个 StatefulWidget,它使用 Box 协议。这不适用于 CustomScrollView。
您可以使用 SliverToBoxAdapter 包装 StreamBuilder 以保持原样。还要删除 StreamBuilder 内的 SliverPadding 以拥有盒子协议小部件。
body: CustomScrollView(
slivers: [
SliverToBoxAdapter(
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection('posts')
.orderBy("id", descending: true)
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> dataSnapshot) {
return !dataSnapshot.hasData
? Padding(
child: ColorLoader(
dotOneColor: Colors.white,
dotTwoColor: Colors.white,
dotThreeColor: Colors.white,
),
padding: EdgeInsets.all(0),
)
: ListView.builder(
itemCount: dataSnapshot.data!.docs.length,
itemBuilder: (context, index) {
DataModel model = DataModel.fromJson(
dataSnapshot.data!.docs[index].data()
as Map<String, dynamic>);
return sourceInfo(model, context);
},
);
},
),
),
],
),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26835 次 |
| 最近记录: |