我用firebase和flutter创建了一个图像上传应用程序。当我试图使用flutter应用程序将图像上传到我的firebase时,但图像没有上传到firebase。我找不到错误。
这是我的flutter应用程序的代码文件的createBlog.dart
文件
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import '../services/blogCrud.dart';
import 'package:random_string/random_string.dart';
import 'package:firebase_storage/firebase_storage.dart';
class CreateBlog extends StatefulWidget {
const CreateBlog({super.key});
@override
State<CreateBlog> createState() => _CreateBlogState();
}
class _CreateBlogState extends State<CreateBlog> {
late String authorName, title, description;
File? selectedImage;
bool _isLoading = false;
//XFile? selectedImage;
BlogCrudMethods blogCrudMethods = new BlogCrudMethods();
Future getImage() async {
var image = await ImagePicker().pickImage(source: ImageSource.gallery);
setState(() {
selectedImage = File(image!.path);
});
}
uploadBlog() async {
if (selectedImage != null) {
setState(() {
_isLoading = true;
});
//uploading to the firebase storage
Reference firebaseStorageRef = FirebaseStorage.instance
.ref()
.child("blogImages")
.child("${randomAlphaNumeric(9)}.jpg");
final UploadTask task = firebaseStorageRef.putFile(selectedImage!);
var downloadUrl = await (await task).ref.getDownloadURL();
print("this is url $downloadUrl");
Navigator.pop(context);
} else {}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Row(
children: const <Widget>[
Text(
"***Flutter",
style: TextStyle(fontSize: 22),
),
Text(
"Blog",
style: TextStyle(fontSize: 22, color: Colors.blue),
),
],
),
backgroundColor: Colors.transparent,
elevation: 0.0,
actions: <Widget>[
GestureDetector(
onTap: () {
uploadBlog();
},
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16),
child: Icon(Icons.file_upload),
),
),
],
),
body: _isLoading
? Container(
alignment: Alignment.center,
child: CircularProgressIndicator(),
)
: Container(
child: Column(
children: <Widget>[
SizedBox(
height: 10,
),
GestureDetector(
onTap: () {
getImage();
},
child: selectedImage != null
? Container(
margin: EdgeInsets.symmetric(horizontal: 16),
height: 150,
width: MediaQuery.of(context).size.width,
child: ClipRRect(
borderRadius: BorderRadius.circular(6),
child: Image.file(
selectedImage!,
fit: BoxFit.cover,
),
),
)
: Container(
margin: EdgeInsets.symmetric(horizontal: 16),
height: 150,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(6)),
width: MediaQuery.of(context).size.width,
child: Icon(
Icons.add_a_photo,
color: Colors.black45,
),
),
),
SizedBox(
height: 8,
),
Container(
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(hintText: "Author Name"),
onChanged: (val) {
authorName = val;
},
),
TextField(
decoration: InputDecoration(hintText: "Title"),
onChanged: (val) {
title = val;
},
),
TextField(
decoration: InputDecoration(hintText: "Description"),
onChanged: (val) {
description = val;
},
),
],
),
)
],
),
),
);
}
}
这是我的flutter应用程序的blogCrud.dart
文件
import 'package:cloud_firestore/cloud_firestore.dart';
class BlogCrudMethods {
Future<void> addData(blogData) async {
FirebaseFirestore.instance
.collection("blogs")
.add(blogData)
.catchError((e) {
print(e);
});
}
}
如果有人可以请帮助我。谢谢!
1条答案
按热度按时间cbwuti441#
您可以尝试使用此插件来设置图像文件路径
对于上传,这对我很有效
进口:
上传功能