# #firebase #flutter #dart #file-upload #photo
Вопрос:
У меня есть этот код в форме регистрации в моем профиле. Это займет две разные фотографии, но после отправки формы firebase использует только один URL-адрес для них обоих. Это форма профиля, которая запускается при регистрации пользователя. Это передается в ProfileBloc, и Пользовательское хранилище-это место, где вызывается firebase. Это работает для одной фотографии, и я могу позвонить ей, когда мне понадобится первая фотография. Firebase видит как фотографию, так и фотографию питомца, но использует один и тот же URL-адрес для обоих, поэтому будет отображаться только первая загруженная фотография.
Код
class ProfileForm extends StatefulWidget {
final UserRepository _userRepository;
ProfileForm({@required UserRepository userRepository, userId})
: assert(userRepository != null),
_userRepository = userRepository;
@override
_ProfileFormState createState() => _ProfileFormState();
}
File photo, petPhoto;
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
BlocBuilder<ProfileBloc, ProfileState>(
builder: (context, state) {
Container(
width: size.width,
child: Stack(
children: <Widget>[
CircleAvatar(
radius: size.width * 0.3,
backgroundColor: Colors.transparent,
child: photo == null
? GestureDetector(
onTap: () async {
File getPic =
await FilePicker.getFile(
type: FileType.image);
if (getPic != null) {
setState(() {
photo = getPic;
});
}
},
child: Image.asset(
'assets/images/addPhoto.png'),
)
: GestureDetector(
onTap: () async {
File getPic =
await FilePicker.getFile(
type: FileType.image);
if (getPic != null) {
setState(() {
photo = getPic;
});
}
},
child: CircleAvatar(
radius: size.width * 0.3,
backgroundImage: FileImage(photo),
),
),
),
Positioned(
top: 50,
left: 150.0,
child: CircleAvatar(
radius: size.width * 0.3,
backgroundColor: Colors.transparent,
child: petPhoto == null
? GestureDetector(
onTap: () async {
File getPetPic =
await FilePicker.getFile(
type: FileType.image);
if (getPetPic != null) {
setState(() {
petPhoto = getPetPic;
});
}
},
child: Image.asset(
'assets/images/addPetPhoto.png'),
)
: GestureDetector(
onTap: () async {
File getPetPic =
await FilePicker.getFile(
type: FileType.image);
if (getPetPic != null) {
setState(() {
petPhoto = getPetPic;
});
}
},
child: CircleAvatar(
radius: size.width * 0.3,
backgroundImage:
FileImage(petPhoto),
),
),
),
)
],
));}}
Future<User> userInfo(userId) async {
User _user = User();
await _firestore.collection('users').document(userId).get().then((user) {
_user.uid = user.documentID;
_user.photo = user['photoUrl'];
_user.petPhoto = user['petPhotoUrl'];
});
return _user;
}
//profile setup
Future<void> profileSetup(File photo,
String userId,
File petPhoto) async {
StorageUploadTask storageUploadTask;
storageUploadTask = FirebaseStorage.instance
.ref()
.child('userPhotos')
.child(userId)
.child(userId)
.putFile(photo);
return await storageUploadTask.onComplete.then((ref) async {
await ref.ref.getDownloadURL().then((url) async {
await ref.ref.getDownloadURL().then((urlPet) async {
await _firestore.collection('users').document(userId).setData({
'uid': userId,
'photoUrl': url,
'petPhotoUrl': urlPet,
});
});
});
});
}