Problemas Conhecidos do Aplicativo
Nesta página você encontra a lista de bugs mapeados ou limitações conhecidas do Projeto Cupertino.
Sumário
- Aplicativo não funciona no iOS
- É inviável implementar os pins com Flutter
- O OCR pode interromper a execução do aplicativo
- ...
Aplicativo não funciona no iOS
<< inserir explicação aqui >>
É inviável implementar os pins com Flutter
Foi constatado, durante o desenvolvimento, a inviabilidade de desenvolvimento da task "US10 - Adicionar descrição a áreas específicas das fotos" e em razão disto a mesma foi descontinuada. Contudo, foi constatado que há sim a possibilidade de implementação desta em uma futura versão do projeto e em razão disto descreveremos agora os problemas encontrados durante a implementação e a única rota encontrada para implementação da task, juntamente com a justificativa para a inviabilidade desta.
Implementação crua, julgada como insuficiente:
Para posicionamento de "pins" em uma imagem em Flutter é necessário que se dê a posição (localização) em que este será desenhado. Utilizando das "posições absolutas da tela" foi possível implementação da anotações, mas devido à necessidade da imagem necessariamente aparecer por inteira na tela, a qualidade da imagem caiu muito, devido ao zoom inverso que por vezes era necessário, e por não existir a capacidade de expandir ou aproximar a imagem, a precisão do toque do usuário era extremamente baixa. A implementação crua, apesar de efetiva, mostrou-se insatisfatória.
Por que julgamos que sem o uso de plugins seria inviável:
Para que fosse resolvido a pendências da "implementação crua", se tornou necessário a implementação das funcionalidades de pinch (dar zoom na imagem, utilizando o movimento de pinça), double tap zoom (zoom na imagem, pressionando duas vezes) e drag (dado zoom na imagem, que seja possível ao usuário "navegar" pela imagem, arrastando-a). A implementação manual das features acima, além da alta complexidade das mesmas, levaria muito tempo para serem feitas, muito tempo para serem testadas e muito tempo para que pudéssemos garantir com certeza sua qualidade, precisão e performance. Por isso, o uso de plugins que as implementassem foi julgado como indispensável.
Plugin utilizado para os movimentos: https://pub.dev/packages/photo_view
Problemas no uso de plugin em relação aos pins:
Durante a implementação do plugin foi constatado que, para renderização correta dos pins, seria necessário que houvesse uma conversão do "posicionamento global" para o "posicionamento local", isto é, o posicionamento dos pins não deveria ser feito utilizando as coordenadas da tela, mas sim as coordenadas da imagem. A utilização das coordenadas da tela faria com que os pins estivessem presos à tela e por isso não serem afetados pelos movimentos de pinch e/ou drag.
Problema final:
Não foi possível encontrar uma forma utilizando aquele plugin de gerar e/ou converter de forma precisa as coordenadas da imagem, fazendo com que não fosse possível a renderização dos pins dentro da imagem de forma que os movimentos realizados pelo usuários fossem respeitos pela renderização, que fosse feita a atualização da posição dos pins de acordo com os movimentos do usuário. Os mesmos testes foram realizados em outros plugins e não foi possível encontrar nenhum outro plugin que realizasse as ações necessária de interação com a imagem, mas que possibilidade a conversão das coordenadas. Levando em consideração que a "implementação crua" utilizada anteriormente não demonstrava usabilidade para o usuário final devida à baixa qualidade, dificuldade de visualização e imprecisão de localização do toque, o time decidiu por descontinuar esta task.
O OCR pode interromper a execução do aplicativo
Durante a chamada do Cloud Vision da Google, API usada no processamento do OCR neste projeto, foi detectado que a tentativa de reprodução do OCR em imagens que não possuem texto pode causar com que a aplicação feche inesperadamente e sem nenhum erro. Este problema é conhecido, com diversos relatos em fóruns e nós não encontramos uma solução definitiva para o mesmo. Foi encontrado o relato deste mesmo erro em diversos projetos e apesar de tentarmos realizar a correção deste erro usando as sugestões que foram apontadas como corretas, não foi possível corrigir o erro nem prevenir o crash do aplicativo em aparelhos Android.
As diretivas recomendadas para controle deste erro são o uso de 'try/catch's durante o trecho de código que faz a transferência da imagem para o Cloud e espera o recebimento da resposta. No nosso projeto, dentro do arquivo "lib/pages/photo_detail.dart", dentro do método "ocrOperation()", o trecho de código "final VisionDocumentText visionDocumentText = await cloudDocumentTextRecognizer.processImage(visionImage);" foi devidamente enclausurado dentro de um 'try/catch', conforme recomendado, contudo a solução não foi eficiente