【发布时间】:2021-10-14 18:41:23
【问题描述】:
我是 Flutter 的新手。我目前正在开发我的颤振项目。基本上,我的项目有一个注册页面、登录页面和个人资料页面。用户必须填写一些详细信息,并在注册页面中选择一个临时头像(例如:1、2、3...)。一旦他们单击“注册”按钮,所有详细信息都将保存到 Firestore。用户登录后,选择的头像将显示为用户头像,用户可以稍后更改。
这就是我的注册页面的样子。头像在水平列表视图中,带有数字。用户可以选择头像并在下面的 TextFormField 中输入。此处显示的头像是资产图像。 Register Page
我已将这些头像上传到我的 Firebase 存储。 Firebase Storage
所以我现在面临的问题是,我不知道如何将 照片 URL 保存到 Firestore。 我希望图像 Firebase 存储 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,但我不知道我应该如何写它,代码应该放在哪里。
如果有人可以帮助我或为我提供一些指导,我将不胜感激。谢谢。
【问题讨论】:
标签: firebase flutter google-cloud-firestore firebase-storage