实现用户注册未上传头像时存入默认Profile Photo URL至Database
实现默认头像URL逻辑的解决方案
步骤1:定义默认头像URL常量
先在代码中定义你的默认头像地址(替换成实际可访问的链接,比如上传到S3的默认头像URL):
// 替换为你的默认头像实际链接 const String _defaultProfileImageUrl = "https://your-bucket.s3.region.amazonaws.com/default-avatar.png";
步骤2:优化上传头像函数
修改uploadImage函数,让它能处理用户未上传头像的情况,直接返回默认URL,同时避免空指针异常:
// add_a_file_to_aws_s3 Future<String> uploadImage(File? file, String? key) async { // 用户未选择头像时,直接返回默认URL if (file == null || key == null) { return _defaultProfileImageUrl; } try { await Amplify.Storage.uploadFile( local: file, key: key, onProgress: (progress) { // ignore: avoid_print print('Fraction completed: ${progress.getFractionCompleted()}'); }, ); GetUrlResult urlResult = await Amplify.Storage.getUrl(key: key); // 返回实际URL字符串,避免用toString()导致格式问题 return urlResult.url; } on StorageException { rethrow; } }
步骤3:更新注册流程代码
直接调用优化后的函数,自动处理默认头像逻辑,同时修复原代码的整数转换错误:
final result = await Amplify.Auth.signUp( username: username.text.trim(), password: password.text.trim(), options: CognitoSignUpOptions(userAttributes: userAttributes), ); // 获取头像URL(自动返回默认值如果用户未上传) String profileImageUrl = await uploadImage(file, 'Profile Photos'); await userController.addUserData( username.text, password.text, emailAddress.text, profileImageUrl, 0, // 替换原int.parse('zero'),避免字符串转整数报错 0, birthday.text, gender.text, location.text, phoneNumber.text, ); setState(() { isSignUpComplete = result.isSignUpComplete; });
注意事项
- 确保默认头像URL可公开访问,如果存在S3中,需设置该文件的访问权限为公开可读
- 原代码的
int.parse('zero')会触发运行时异常,直接使用数字0即可
内容的提问来源于stack exchange,提问作者khomotjo_codes
相关产品推荐
相关产品推荐

