Flutter Firebase, добавление второй фотографии, но firebase использует только один URL

# #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,
    
            });
          });
        });
      });
    }