如何将图像 URL(从 Firebase 存储)存储到 Firestore [Flutter]
How to store image URL (from Firebase storage) to Firestore [Flutter]
我是 Flutter 新手。我目前正在开发我的 flutter 项目。基本上,我的项目有一个注册页面、登录页面和个人资料页面。用户必须填写一些详细信息,然后在注册页面选择一个临时头像(例如:1、2、3...)。单击“注册”按钮后,所有详细信息将保存到 Firestore。用户登录后,选择的头像将显示为用户头像,用户可以稍后更改。
这是我的注册页面的样子。头像在水平列表视图中,带有数字。用户可以选择头像并在下面的 TextFormField 中输入。此处显示的头像为资产图片。
Register Page
我已将这些头像上传到我的 Firebase 存储。
Firebase Storage
所以我现在面临的问题是,我不知道如何将 照片 URL 保存到 Firestore。
我希望图像 Firebase Storage URL 与用户详细信息一起存储在 Firestore 中,而不是存储数字并由我自己分配 URL。所以以后,用户可以在登录后更改他们的头像。
这是注册页面上的短代码
(将详细信息上传到 Firestore 部分):
FirebaseAuth _auth = FirebaseAuth.instance;
FirebaseFirestore _fires = FirebaseFirestore.instance;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final idController = TextEditingController();
final nameController = TextEditingController();
final emailController = TextEditingController();
final avatarController = TextEditingController();
String _studentid, _name, _email, _password, _avatar;
_register() async { // ---> (register button) onPressed: _register,
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
_auth.createUserWithEmailAndPassword(
email: _email, password: _password).then((currentUser) =>
_fires.collection("users").doc(_auth.currentUser.uid).set({
"uid": _auth.currentUser.uid,
"Name": "$_name",
"Email": "$_email",
"Avatar": "$_avatar" //only store numbers now (avatar 1, 2, 3, ...)
}).then((result) => {
//a page that show registration success, then back to login page
Navigator.pushReplacementNamed(context, "RegisterComplete"),
idController.clear(),
nameController.clear(),
emailController.clear(),
avatarController.clear()
}).catchError((e) => print(e)))
.catchError((e) => showError(e.message));
}
}
(输入头像编号部分的文本框):
Container(
child: TextFormField(
validator: (input) {
if (input.length != 1) return 'Please choose your avatar';
return null;},
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(r'[0-9]')),],
controller: avatarController,
decoration: InputDecoration(
labelText: 'Avatar',
labelStyle: TextStyle(
fontSize: 18,
color: Color(0xFF2C4D83),
),
prefixIcon: Icon(Icons.face, color: Color(0xFF2C4D83),),
),
onSaved: (String value) => _avatar = value),
),
我想我必须创建一个条件,如果输入_avatar = 1,那么URL将是“gs://.../avatar1.jpg”,并存储到Firestore中,但是不知道应该怎么写,代码放在哪里
如果有人能帮助我或给我一些指导,我将不胜感激。谢谢。
使用此功能下载 url 上传的图片。然后将它们存储在 firestore 中的某个位置。您可以在带有存储的 firestore 中使用相同的标识符。
Future <String> _uploadphotofile(mFileImage) async {
final Reference storageReference = FirebaseStorage.instance.ref().child("products");
UploadTask uploadTask = storageReference.child("product_$productId.jpg").putFile(imgfile);
String url = await (await uploadTask).ref.getDownloadURL();
return url;
}
我是 Flutter 新手。我目前正在开发我的 flutter 项目。基本上,我的项目有一个注册页面、登录页面和个人资料页面。用户必须填写一些详细信息,然后在注册页面选择一个临时头像(例如:1、2、3...)。单击“注册”按钮后,所有详细信息将保存到 Firestore。用户登录后,选择的头像将显示为用户头像,用户可以稍后更改。
这是我的注册页面的样子。头像在水平列表视图中,带有数字。用户可以选择头像并在下面的 TextFormField 中输入。此处显示的头像为资产图片。 Register Page
我已将这些头像上传到我的 Firebase 存储。 Firebase Storage
所以我现在面临的问题是,我不知道如何将 照片 URL 保存到 Firestore。 我希望图像 Firebase Storage URL 与用户详细信息一起存储在 Firestore 中,而不是存储数字并由我自己分配 URL。所以以后,用户可以在登录后更改他们的头像。
这是注册页面上的短代码 (将详细信息上传到 Firestore 部分):
FirebaseAuth _auth = FirebaseAuth.instance;
FirebaseFirestore _fires = FirebaseFirestore.instance;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final idController = TextEditingController();
final nameController = TextEditingController();
final emailController = TextEditingController();
final avatarController = TextEditingController();
String _studentid, _name, _email, _password, _avatar;
_register() async { // ---> (register button) onPressed: _register,
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
_auth.createUserWithEmailAndPassword(
email: _email, password: _password).then((currentUser) =>
_fires.collection("users").doc(_auth.currentUser.uid).set({
"uid": _auth.currentUser.uid,
"Name": "$_name",
"Email": "$_email",
"Avatar": "$_avatar" //only store numbers now (avatar 1, 2, 3, ...)
}).then((result) => {
//a page that show registration success, then back to login page
Navigator.pushReplacementNamed(context, "RegisterComplete"),
idController.clear(),
nameController.clear(),
emailController.clear(),
avatarController.clear()
}).catchError((e) => print(e)))
.catchError((e) => showError(e.message));
}
}
(输入头像编号部分的文本框):
Container(
child: TextFormField(
validator: (input) {
if (input.length != 1) return 'Please choose your avatar';
return null;},
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(r'[0-9]')),],
controller: avatarController,
decoration: InputDecoration(
labelText: 'Avatar',
labelStyle: TextStyle(
fontSize: 18,
color: Color(0xFF2C4D83),
),
prefixIcon: Icon(Icons.face, color: Color(0xFF2C4D83),),
),
onSaved: (String value) => _avatar = value),
),
我想我必须创建一个条件,如果输入_avatar = 1,那么URL将是“gs://.../avatar1.jpg”,并存储到Firestore中,但是不知道应该怎么写,代码放在哪里
如果有人能帮助我或给我一些指导,我将不胜感激。谢谢。
使用此功能下载 url 上传的图片。然后将它们存储在 firestore 中的某个位置。您可以在带有存储的 firestore 中使用相同的标识符。
Future <String> _uploadphotofile(mFileImage) async {
final Reference storageReference = FirebaseStorage.instance.ref().child("products");
UploadTask uploadTask = storageReference.child("product_$productId.jpg").putFile(imgfile);
String url = await (await uploadTask).ref.getDownloadURL();
return url;
}