似乎无法让应用从相机将图像上传到Firebase存储



我正在学习如何在我的手机拍照后将图像上传到firebase存储。我被赋予解决这个问题的flutter课程已经过时了,程序不会将图像上传到firebase存储。

处理上传用户数据到Firebase的代码块。await ref.putFile(image).onComplete;"返回一个错误,因为"onComplete"不存在了

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:chat_app2/widgets/auth/auth_form.dart';
import 'package:flutter/services.dart';
import 'package:firebase_storage/firebase_storage.dart';
class AuthScreen extends StatefulWidget {
@override
_AuthScreenState createState() => _AuthScreenState();
}
class _AuthScreenState extends State<AuthScreen> {
final _auth = FirebaseAuth.instance;
var _isLoading = false;
void _submitAuthForm(String email, String username, String password,
File image, bool isLogin, BuildContext ctx) async {
UserCredential authResult;
try {
setState(() {
_isLoading = true;
});
if (isLogin) {
authResult = await _auth.signInWithEmailAndPassword(
email: email,
password: password,
);
} else {
authResult = await _auth.createUserWithEmailAndPassword(
email: email,
password: password,
);

final ref = FirebaseStorage.instance
.ref()
.child('user_image')
.child(authResult.user!.uid + '.jpg');
await ref.putFile(image).onComplete;
await FirebaseFirestore.instance
.collection('users')
.doc(authResult.user!.uid)
.set({
'username': username,
'email': email,
});
}
} on PlatformException catch (err) {
var message = 'An error occured, please check your credentials';
if (err.message != null) {
message = err.message!;
}
final snackBar = SnackBar(
content: Text(message),
backgroundColor: Theme.of(ctx).errorColor,
);
ScaffoldMessenger.of(ctx).showSnackBar(snackBar);
setState(() {
_isLoading = false;
});
} catch (err) {
final snackBar = SnackBar(
content: Text(err.toString()),
backgroundColor: Theme.of(ctx).errorColor,
);
ScaffoldMessenger.of(ctx).showSnackBar(snackBar);
setState(() {
_isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColor,
body: AuthForm(
_submitAuthForm,
_isLoading,
),
);
}
}

选择"来自相机的图像

// ignore_for_file: unnecessary_null_comparison
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class UserImagePicker extends StatefulWidget {
UserImagePicker(this.imagePickFn);
final void Function(File pickedImage) imagePickFn;
@override
_UserImagePickerState createState() => _UserImagePickerState();
}
class _UserImagePickerState extends State<UserImagePicker> {
File? _pickedImage;
void _pickImage() async {
final pickedImageFile =
await ImagePicker.pickImage(source: ImageSource.camera);
setState(() {
_pickedImage = pickedImageFile;
});
widget.imagePickFn(pickedImageFile);
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
CircleAvatar(
radius: 50,
backgroundColor: Colors.grey,
backgroundImage:
_pickedImage != null ? FileImage(_pickedImage!) : null,
),
TextButton.icon(
style: TextButton.styleFrom(
primary: Theme.of(context).primaryColor,
),
onPressed: _pickImage,
icon: Icon(Icons.image),
label: Text('Add Image')),
],
);
}
}

如果我删除"onComplete"从第42行开始。它生成用户数据并记录在Firebase中。唯一的问题是,如果我这样做,程序似乎不会上传图像。

我刚刚解决了你的问题。如果您需要解释,请参阅文档,您将完全了解如何使用firebase上传方法。上传任务

var uploadTask = ref.putFile(image);
var storageTaskSnapshot = await uploadTask;
String url =  await storageTaskSnapshot.ref.getDownloadURL();

最新更新