1. Antes de começar
Pré-requisitos
- Conhecimento básico de SQL para leitura e manipulação de um banco de dados relacional.
- Saber usar o Room em um app Android para ler e gravar em um banco de dados.
- Saber usar o DataStore para armazenar dados simples.
- Saber criar interfaces do usuário moderadamente complexas com o Compose.
O que você vai criar
- Um app Android que solicita ao usuário um aeroporto de partida, pesquisa em um banco de dados pré-preenchido para consultar uma lista de voos de partida do aeroporto em questão, permite que o usuário salve os voos favoritos e atualiza o banco de dados no Room.
O que é necessário
- Um computador com o Android Studio.
2. Visão geral
Parabéns por concluir a Unidade 6. Você começou com uma visão geral dos bancos de dados relacionais e da linguagem de consulta estruturada (SQL), integrou um banco de dados relacional em um app com o Room e aprendeu sobre o Preferences DataStore para armazenar as configurações e o estado da IU. É hora de colocar em prática tudo o que você aprendeu.
Neste projeto, você vai criar o app de pesquisa de voos em que os usuários escolhem um aeroporto e podem consultar uma lista de destinos que usam esse aeroporto como partida. Esse projeto oferece a oportunidade de praticar suas habilidades com SQL, Room e DataStore ao fornecer um conjunto de requisitos de apps que você precisa atender. Especificamente, o app de pesquisa de voos precisa atender a estes requisitos:
- Fornecer um campo de texto para que o usuário insira o nome de um aeroporto ou acesse o identificador de aeroportos da Associação Internacional de Transportes Aéreos (IATA, na sigla em inglês).
- Consultar o banco de dados para dar sugestões de preenchimento automático conforme o usuário digita.
- Quando o usuário escolher uma sugestão, gerar uma lista de voos disponíveis desse aeroporto, incluindo o identificador da IATA e o nome do aeroporto para outros aeroportos no banco de dados.
- Permitir que o usuário salve rotas individuais favoritas.
- Quando nenhuma consulta de pesquisa for inserida, mostrar todas as rotas favoritas selecionadas pelo usuário em uma lista.
- Salvar o texto de pesquisa usando o Preferences DataStore. Quando o usuário reabrir o app, o texto de pesquisa, se houver, vai precisar preencher automaticamente o campo de texto com os resultados adequados do banco de dados.
Fornecemos um banco de dados pré-preenchido para esse projeto. No entanto, esperamos que você crie um app do zero de acordo com os requisitos, ou seja, pratique o trabalho que faz como desenvolvedor Android. Esse projeto também é uma boa chance de recapitular ou refinar ainda mais suas habilidades de criação de IU com o Compose, já que você não precisou trabalhar muito com IU desde a Unidade 4.
3. Acessar o banco de dados de voos
Os dados do app são provenientes do banco de dados de voos. Esse banco de dados contém duas tabelas: airport e favorite.
A tabela airport tem o esquema abaixo.
Coluna | Tipo de dado | Descrição |
id | INTEIRO | Identificador exclusivo (chave primária) |
iata_code | VARCHAR | Código da IATA de três letras |
name | VARCHAR | Nome completo do aeroporto |
passengers | INTEIRO | Número de passageiros por ano |
A tabela favorite tem o esquema abaixo.
Coluna | Tipo de dado | Descrição |
id | INTEIRO | Identificador exclusivo (chave primária) |
departure_code | VARCHAR | Código da IATA para partida |
destination_code | VARCHAR | Código da IATA para o destino |
Você pode usar a tabela "airport" para procurar aeroportos e criar uma lista de possíveis voos. Use a tabela "favorite", que inicialmente está vazia, para salvar os pares de destinos de partida e chegada selecionados pelo usuário.
Faça o download do arquivo flight_search.db
na ramificação project
do repositório de noções básicas do SQL do GitHub neste link (em inglês).
4. Planejar seu app
Planejar a IU
Você pode criar seu app como quiser. Como guia, as descrições e imagens abaixo são um exemplo do que um usuário pode encontrar no app.
Ao abrir o app pela primeira vez, o usuário acessa uma tela vazia com um campo de texto solicitando um aeroporto.
Quando o usuário começa a digitar, o app mostra uma lista de sugestões de preenchimento automático que correspondem ao nome ou identificador do aeroporto.
Quando o usuário seleciona uma sugestão, o app mostra uma lista de todos os voos possíveis desse aeroporto. Cada item inclui o identificador e os nomes dos dois aeroportos, além de um botão para salvar o destino como favorito. Fique à vontade para testar o layout desde que ele tenha todas as informações necessárias.
Quando o usuário limpa a caixa de pesquisa ou não digita uma consulta, o app mostra uma lista de destinos favoritos salvos, se houver algum.
Usar o Room para integrar o banco de dados de voos
Para implementar os recursos acima, você precisa aproveitar seu conhecimento sobre SQL e Room. O banco de dados já tem duas tabelas, airport e favorite, e você precisa de entidades para cada uma delas. Selecione os tipos de dados do Kotlin apropriados para acessar os valores em cada tabela.
Além disso, você precisa considerar estes requisitos ao consultar o banco de dados de voos e armazenar dados:
- Pesquise sugestões de preenchimento automático na tabela "airport". Não esqueça que o usuário talvez já saiba o código do aeroporto. Portanto, você precisa comparar a entrada dele com a coluna
iata_code
, além da colunaname
, ao pesquisar texto. Também é possível usar a palavra-chaveLIKE
para realizar pesquisas de texto. - Mostre os aeroportos mais visitados em ordem decrescente usando a coluna de passageiros para classificação.
- Suponha que todos os aeroportos tenham voos para todos os outros aeroportos do banco de dados (exceto para si mesmo).
- Quando não houver texto na caixa de pesquisa, mostre uma lista de voos favoritos, com os aeroportos de partida e destino. Como a tabela "favorite" inclui apenas colunas para os códigos de aeroporto, não é esperado que você encontre os nomes de aeroportos nessa lista.
- Realize todas as consultas no banco de dados com as APIs SQL e Room. O objetivo é NÃO carregar todo o banco de dados na memória de uma só vez, mas apenas extrair os dados conforme necessário.
Armazenar o estado do usuário usando o Preferences DataStore
Além de SQL e Room, você também sabe armazenar valores individuais, como as configurações do usuário. Para o app de pesquisa de voos, você precisa armazenar a string de pesquisa do usuário no Preferences DataStore para que seja preenchida quando o usuário reiniciar o app. Se o campo de texto estiver vazio quando o usuário sair do app, a lista de voos favoritos vai precisar ser mostrada.
5. Criar o app de pesquisa de voos
Agora que você leu todos os requisitos, é hora de criar o app. Embora esta unidade se concentre exclusivamente na persistência de dados, é importante continuar praticando. Você já encontrou exemplos de capturas de tela do app de pesquisa de voos em ação. No entanto, este projeto é sua oportunidade de criar um app e se destacar.
Embora as etapas exatas ainda não tenham sido explicadas, você já sabe quais são todos os conceitos principais necessários para criar o projeto. Se você tiver dificuldades ou precisar relembrar alguma coisa, consulte os codelabs anteriores.
Os materiais abaixo podem ser úteis para a criação do seu projeto:
- Usar SQL para ler e gravar em um banco de dados
- Persistência de dados com o Room
- Ler e atualizar dados com o Room
- Salvar preferências localmente com o DataStore
Acima de tudo, aproveite o processo! Aprender é uma jornada. Mesmo que você ache este projeto desafiador, é provável que aprenda algo novo e resolva os mesmos problemas facilmente na próxima vez. Divirta-se e até mais.