Aula 20
Modifição do Componente de Detalhes para Mostrar a Imagem Corretamente
Summary
Resumo do Problema de Exibição de Imagem
Problemas Identificados
-
Redirecionamento de URL:
- O
content URL
que deveria fornecer o link direto da imagem é, na verdade, um URL de redirecionamento. O React Native não aceita esse tipo de redirecionamento.
- O
-
Requisitos de HTTPS no iOS:
- Ao usar um dispositivo iOS, há uma restrição que impede o carregamento de imagens que não estejam sob um protocolo HTTPS. Isso não é um problema em Android, mas afeta a exibição em iOS.
Exemplificação
- Ao buscar uma imagem e clicar nela, o
content URL
obtido gera um link que redireciona. Por exemplo, ao analisar uma imagem do Wikimedia (HTTPS), o link direto funciona. No entanto, muitos links do Bing não são HTTPS, causando erro de carregamento no iOS.
Alternativa Proposta
- Uso de
thumbnail URL
:- Em vez de usar o
content URL
, utilizar othumbnail URL
. Isso garante que a imagem carregue corretamente, dado que othumbnail URL
sempre fornece um link HTTPS, que é compatível com iOS.
- Em vez de usar o
// Alteração no código
const imageUrl = item.thumbnailURL; // Substituição de content URL por thumbnail URL
Implementação do Botão de Voltar
- A implementação do botão de voltar é simples, mas é necessário entender como navegar na pilha do navegador.
- Para retornar à cena anterior, utilizamos o método
pop
na navegação.
Observações Finais
- O iOS exige sempre um protocolo HTTPS para carregar imagens. Essa solução usando
thumbnail URL
resolve o problema de compatibilidade com o iOS e assegura que imagens sejam exibidas corretamente na aplicação.
Video Transcript
Então, a razão porque a imagem não está aparecendo é, na verdade, devido ao UI aqui
que a gente deu para esse componente.
Então se lembra que a gente pegou os dados da API, quando a gente clicou em um dos itens
da lista, a gente passou como props o content URL, dentro do content URL, a gente esperava que
recebeu o local onde a imagem está na web, mas tem um problema aqui, na verdade tem dois
problemas. Se a gente olhar o conteúdo desta variável aqui, nós vamos observar que é,
na verdade, um URL de redirecionamento para outro link da imagem. Então, deixa eu voltar aqui,
vou atualizar e vou dar outra busca, fazer outra busca aqui. Então, aqui tem um mesmo navegador,
deixa eu só colocar aqui do lado. Então, quando eu clico em um deles, vocês se lembram que a gente fez um
log do item que foi clicado. Então, a gente passou como props para essa nova cena o objeto que a gente
quer, que tem os dados da imagem que a gente quer e apareça. Aí a gente esperou que essa content
URL tenha um link para a imagem, vamos copiar esse link, vou abrir o nova tab e deixa eu remover
essas quotes aqui. Se você observar, a gente, ele está, na verdade, redirecionando para outro link.
Então, esse é o problema número um que a gente tem, não temos o link direto para a imagem, tá bom?
Agora, o outro problema é, no meu caso, que eu estou usando o iOS, né, da Apple, ele tem uma restrição
aqui para apps do iOS, o padrão é que não deixa você carregar imagens com o que não seja um HTTPS, tá bom?
Isso é uma coisa do iOS, no Android vai funcionar legal, ainda se não fosse uma imagem sem HTTPS,
mas no iOS não vai funcionar, então é o segundo problema meu aqui. Para ilustrar esse segundo problema,
vamos ver essa outra imagem que eu tenho, que é da Wikimedia, que é do HTTPS. Eu vou copiar esse link
só para você ver, e no lugar aqui no componente de imagem, na URI, no lugar de content, URL, eu vou passar,
na verdade, essa URL direto, o link direto, com o HTTPS, ok? Vou salvar e vou fazer qualquer busca aqui.
Note que vai ser sempre a mesma imagem para qualquer item que você clicar, vou clicar nesse é o gato,
você notou que a imagem agora apareceu, não é? Eu botei diretamente o link e a HTTPS, então funciona.
Nós sabemos que o jeito que a gente está adicionando a imagem, na verdade, está correto, então o problema
não era com esse negócio, mas com a content URL aqui. Agora vou voltar isso aqui.
Então como a gente vai resolver esse problema?
Então, vou voltar aqui, vou copiar esse content URL que a gente usou, tá? Vou só copiar aqui.
Deixa eu abrir o editor de texto aqui. Então, problema número 1 é que a content URL,
na verdade, tem um link que redireciona para outro link da imagem. Esse é o problema número 1,
e parece que o eact neire não aceita esse redirecionamento. E o problema número 2 é que,
no caso meu do iOS, não vai carregar imagens que não sejam HTTPS, bom? Nem todas as imagens que
vêm do Bing aqui são HTTPS. Por exemplo, essa aqui do gato branco, a gente viu que ele vai redirecionar
para uma imagem que não é HTTPS, se não é privado. Mas tem outros, por exemplo, se eu tenho uma
busca de novo, do gato, esse gato meditando aqui, eu cliquei, vou dar um console log, vamos voltar
para a minha debugger, até o final o item foi clicado, né? Esse é o object, aqui a content URL,
eu vou copiar e vou colar aqui, remove as quotes. Você nota que redireciona para uma imagem que tem
HTTPS. Se você quiser saber como uma maneira de extrair o URL original desse
content URL, eu vou fazer outro vídeo, mas você pode extrair o URL original daqui que tem aqui,
na verdade está entre esses negócios aqui, você nota que esse é o URL original. A gente pode extrair
e dar um decode, usando o decode URL component para recuperar o URL original, mas ainda tem o problema
do HTTPS, porque nem todos são, né? Então, no meu caso, eu vou escolher outra opção para resolver
esse problema que a gente tem, em vez de usar o content URL, eu vou usar a mesma coisa que a gente usou
para o outro acena, o thumbnail URL, tá bom? Então, resolver isso, eu vou voltar aqui, então,
em vez de pegar o content URL, eu vou botar em thumbnail, tá bom? Então, eu note que eu
selecionei os dois ao mesmo tempo, eu apertei comando D, no meu caso, que eu uso Mac, no seu caso,
pode ser o Ctrl D, se você usa o outro sistema, eu vou, eu uso o Atom como o texto editor, mas eu sei
também que editores como Sublime também têm essa função, funcionalidade. Então, eu botei thumbnail
URL aqui, vamos ver o que acontece agora. Carregando, clicar neste cara, tá aí, pareceu o thumbnail,
né? E o botão de voltar ainda não está definido, né? Ah, se você notar, no meu caso, que eu estou
com a iOS, sempre tem que ter o HTTPS, a imagem tem que ter, de um source que tem HTTPS, no meu caso,
que você olhar na descrição aqui do objeto, na thumbnail, né? O URL é sempre HTTPS, porque tá
do content clever network, um CDN do BIM, né? Se você copiar isso, colar, remover quotes, aí,
HTTPS sempre. Então, é uma solução para o meu problema. Então, vamos lá continuar, vamos implementar
o botão de voltar. Então, a gente já, para fazer o botão de voltar, é sempre muito simples, mas a
primeira coisa que a gente tem que saber é como ir voltar para a cena anterior usando o navegador,
né? Se você se lembra que para a gente vir para essa cena, a gente deu um push da cena anterior,
na home. Cadê aqui? Tá home aqui. Se você ver aqui, a gente clica item, a gente deu um navegueiro
push. A gente empilhou para o pilha do navegador, a stack, né? Nos caras agora a gente vai dar um pop
para voltar. Então, vamos lá. Mas o problema aqui é que esse cena aqui, essa cena, não tem acesso
ao navegador, porque? Vamos olhar no nosso index aqui para ver as rotas. Você note que o único
componente que tem acesso ao navegador aqui é o home, né? Que a gente passou o navegador com as
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: