我使用 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 …
出现错误的原因是什么?
当我将调试标志放入 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( …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 imagepicker 从图库中选择图像并将其上传到 firebasestorage。当应用程序运行时,它会给出错误“无法打开文件,path = ''(操作系统错误:错误地址,errno = 14)和未处理的异常:类型'XFile'不是类型转换中'File'类型的子类型” 。
GestureDetector(
onTap: () => pickPhotoFromGallery(),
child: CircleAvatar(
radius: 70,
// ignore: unnecessary_null_comparison
child: (_imageFile != null)
? Image.file(_imageFile)
: Image.asset('assets/images/icon.png'),
),
),
Future pickPhotoFromGallery() async {
File imageFile =
(await _imagePicker.pickImage(source: ImageSource.gallery)) as File;
setState(() {
_imageFile = imageFile;
});
}
Run Code Online (Sandbox Code Playgroud)
当我单击“保存”按钮时,它显示“断言失败:第 127 行第 12 行:‘file.absolute.existsSync()’:不正确。” 我遇到了错误。
onPressed: uploading ? null : () => uploadImageAndSaveItemInfo(),
Run Code Online (Sandbox Code Playgroud)
uploadImageAndSaveItemInfo() async {
setState(() {
uploading = true;
});
String imageDownloadUrl = await uploadItemImage(_imageFile);
saveItemInfo(imageDownloadUrl);
saveItemInfoCategory(imageDownloadUrl); …Run Code Online (Sandbox Code Playgroud)