Экспо ImagePicker застревает на ActivityIndicator при отмене - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю проект, в котором мне нужно, чтобы пользователь выбрал изображение из своей фотогалереи.Однако я столкнулся с проблемой, когда пользователь отменяет ImagePicker, находясь в своей галерее, появляется индикатор активности, и пользователь больше не может выбрать изображение.Как я могу сделать так, чтобы при нажатии кнопки отмены кнопка «Загрузить изображение» снова отображалась?

Вот мой код:

              {!this.state.loading ? (
                <Button
                  full
                  style={{
                    fontFamily: "nunito",
                    backgroundColor: "#f3d95c"
                    // alignSelf: "center",
                  }}
                  onPress={() => this.imagePicker()}
                >
                  <Text
                    style={{
                      fontFamily: "nunito"
                      // color: "white"
                    }}
                  >
                    {this.state.imageUrl === ""
                      ? "Upload Photo"
                      : "Photo Selected"}
                  </Text>
                </Button>
              ) : (
                <ActivityIndicator size="large" color="#0000ff" />
              )}

РЕДАКТИРОВАТЬ: Вот функция

imagePicker = () => {
    this.setState({ loading: true });
    Permissions.askAsync(Permissions.CAMERA_ROLL);
    ImagePicker.launchImageLibraryAsync({
      allowsEditing: false,
      base64: true
    }).then(async result => {
      const blob = await new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.onload = function() {
          resolve(xhr.response);
        };
        xhr.onerror = function(e) {
          reject(new TypeError("Network request failed"));
        };
        xhr.responseType = "blob";
        xhr.open("GET", result.uri, true);
        xhr.send(null);
      });

      const ref = firebase
        .storage()
        .ref()
        .child(uuid.v4());
      const snapshot = await ref.put(blob);
      blob.close();
      let imageUrl = await snapshot.ref.getDownloadURL();

      this.setState({ imageUrl: imageUrl, loading: false });
    });
  };
...