Aula 2 - React Native - Interface Gráfica Com React Native
Aula 2 - React Native - Interface Gráfica Com React Native
Descrição
Propósito
Conhecer os componentes de
interface gráfica disponíveis no
framework React Native para o
desenvolvimento de aplicativos
mobile.
Preparação
Objetivos
Módulo 1
Interface interativa de
um aplicativo mobile
Módulo 2
Componentes de lista e
multivalorados
Descrever os componentes de lista e
multivalorados disponíveis no React
Native.
Módulo 3
Principais modelos de
navegação
Módulo 4
Recursos de estilização e
animação
1 - Interface
interativa de um
aplicativo mobile
Ao final deste módulo, você será
capaz de esquematizar os passos
para a definição da interface
interativa de um aplicativo
mobile.
Primeiras palavras
Um importante passo antes de se
iniciar, de fato, a codificação de um
aplicativo (e o mesmo pensamento
também deve valer para qualquer tipo
de software) é estruturar como o
aplicativo funcionará.
Interface de aplicações.
Requisitos ou
funcionalidades
Como primeiro passo para a
esquematização da interface e
interatividade de nosso aplicativo
mobile, devemos ter em mãos as suas
funcionalidades, ou seja, precisamos
conhecer tudo o que o aplicativo
deverá fazer e tudo o que poderá ser
feito por meio dele. Essa lista de
funcionalidades pode ser:
Simples
close
Elaborada
Pagamento de contas.
Transferência bancária.
Telas e elementos
visuais
Continuando nosso exercício e
considerando os requisitos descritos,
podemos fazer um primeiro esboço
dos sete elementos que comporão a
interface de nossa aplicação:
3 Consulta de extrato Logomarca; textos; títulos (label). Botão de ação; menu de navegação.
Consulta de fatura de
Logomarca; texto; títulos (label); Botão de ação; menu de navegação;
6 lançamentos de cartão de
listagem de texto. input de dados; seleção de dados.
crédito
Escolha dos
componentes
imagem
Confecção de protótipos navegáveis
imagem
Escolha dos componentes nativos ou de
terceiros a serem utilizados
Saiba mais
Há várias ferramentas disponíveis para
a confecção de protótipos navegáveis
– inclusive gratuitas.
React Native
content_copy
1 return (
2 <View
3 style={{
4 flexDirection: 'row',
5 height: 100,
6 padding: 20
7 }}
8 >
9 <View>
10 <Image />
11 </View>
12
13 <View>
14 <Text>Hello World!</Text>
Dica
Utilize o componente View como
container de outros componentes,
inclusive de outras Views. Isso ajudará
a organizar o código e a estilizá-lo.
React Native
content_copy
1 return (
2 <SafeAreaView>
3 <ScrollView>
4 <Text>
5 Lorem ipsum dolor sit amet,
6 consectetur adipiscing elit, sed do
7 eiusmod tempor incididunt ut labore et
8 dolore magna aliqua. Ut enim ad
9 minim veniam, quis nostrud exercitation ullamco
10 laboris nisi ut
11 aliquip ex ea commodo consequat. Duis aute irure
12 dolor in reprehenderit in voluptate velit esse
13 cillum dolore eu fugiat nulla
14 pariatur Excepteur sint occaecat cupidatat non
ScrollView
SafeAreaView
Saiba mais
Componentes de
interface e interação
Modal
React Native
content_copy
1 return (
2 <View>
3 <Modal
4 animationType='slide'
5 transparent={true}
6 visible={modalVisible}
7 onRequestClose={() => {
8 setModalVisible(!modalVisible);
9 }}
10 >
11 <View>
12 <View>
13 <Text>Texto dentro da modal</Text>
14 <Pressable
Botões
touch_app
Button
touch_app
TouchableHighlight
touch_app
TouchableOpacity
touch_app
TouchableWithoutFeedback
A principal característica
do Button é reagir a
eventos de interação por
parte do usuário, como o
toque, leve ou demorado,
sobre eles.
Quando estivermos montando nossas
telas, deveremos definir claramente
seu título a fim de indicar qual ação
será disparada no toque. Outra dica é
utilizar, além de um título, um ícone.
Isso vale, por exemplo, quando tais
elementos são usados tanto
individualmente quanto em barras de
navegação.
Exemplo de button.
Recomendação
ActivyIndicator
Este componente exibe elementos
visuais que comumente chamamos de
“loading”. Embora bastante
negligenciado, trata-se de um dos mais
importantes elementos em termos de
interatividade, pois seu uso permite
informar ao usuário que uma tarefa
está sendo processada.
Loading.
Recomendação
A sugestão em relação a esse
componente é utilizá-lo sempre que
uma requisição a um recurso externo
seja realizada. Com isso, mesmo que
haja demora na resposta, o usuário é
informado de que algo está
acontecendo. Do contrário, a espera
pela conclusão de uma tarefa
demorada sem nenhuma indicação
visual pode dar a ele a sensação de
que o aplicativo travou, por exemplo.
Outros componentes
Além dos componentes vistos até
aqui, há vários outros disponíveis para
a organização das telas de nosso
aplicativo. Eles possuem, além de
organizar visualmente os elementos ou
fornecer interatividade, diferentes
funções, como permitir a navegação
entre telas e a apresentação otimizada
de recursos específicos, como listas e
cards.
video_library
Processo de
definição da
interface de um
aplicativo mobile
Neste vídeo, falaremos sobre os
pontos relevantes e de atenção ao
realizarmos uma esquematização do
passo a passo para definição da
interface interativa de um aplicativo
mobile.
Falta pouco para
atingir seus
objetivos.
Questão 1
O processo de esquematização da
interface interativa de um aplicativo
precisa levar em conta aspectos, como
os requisitos de software e os
recursos disponíveis na linguagem a
D
ser utilizada em sua construção. Além
disso, outros aspectos, como um
design em sintonia com os demais
supracitados, tendem a garantir uma
boa experiência para os usuários.
Questão 2
Em termos de componentes de
interface, estão disponíveis as
mesmas opções tanto para a
B
plataforma Android quanto para a iOS,
sem exceções.
Componentes
específicos para
tarefas específicas
Existem componentes para a
construção de interfaces interativas
que, além de serem utilizados com a
finalidade de montagem da interface e
de interação, também podem ser
empregados para outras
funcionalidades.
Componentes de
lista
O React Native possui três principais
componentes nativos de listas:
code
VirtualizedList
code
SectionList
code
FlatList
Estabeleceremos as definições e a
utilidade desses três componentes,
assim como suas implementações.
Antes disso, no entanto, é importante
entender o comportamento geral
deles.
VirtualizedList
Este componente constitui a
implementação-base para os outros
dois componentes de lista, que
acabam sendo mais utilizados devido
às suas particularidades – o que, aliás,
faz com que ambos também sejam
mais bem documentados.
Otimização
Otimização do consumo de memória e
de desempenho no manuseio de
grandes listas.
Manutenção de janela
Manutenção de janela finita de
renderização de itens ativos e
substituição daqueles que estejam
fora da janela de renderização.
Adaptação da janela à
rolagem de tela
A adaptação permite que os itens
sejam renderizados de forma
incremental, o que minimiza a
ocorrência de espaços em branco.
React Native
content_copy
Recomendação
Antes de continuar, copie e execute o
código para conseguir ver o
componente em funcionamento.
Data expand_more
getItem expand_more
getItemCount expand_more
renderItem expand_more
keyExtractor expand_more
initialNumToRender expand_more
Saiba mais
Além dos atributos e das funções
descritas, há outros disponíveis para o
VirtualizedList. Consulte a
documentação oficial a respeito.
SectionList
A SectionList é um componente para a
exibição de dados em formato de lista
que permite que eles sejam
seccionados, ou seja, exibidos em
seções. Para ficar mais fácil de
entender o funcionamento e a utilidade
desse componente, imagine que você
tenha uma lista de produtos para exibir
e que esses produtos pertencem a
diferentes categorias de produtos.
React Native
content_copy
sections
Propriedade obrigatória e que define
os dados a serem listados.
renderSectionHeader
Define o elemento a ser renderizado no
início de cada seção.
FlatList
Conceitos e
funcionalidades
Possui suporte a múltiplas Permite exibir os itens de Possui suporte a cabeçalho Permite a inclusão de
plataformas. forma horizontal. e rodapé. separadores (componentes
que podem ser usados para
separar os itens da lista).
Saiba mais
Alguns desses recursos também são
suportados pelos demais
componentes de lista, os quais, aliás,
também podem possuir recursos
específicos. Para mais detalhes,
consulte a documentação oficial do
React Native.
Vejamos um exemplo de
implementação do FlatList:
React Native
content_copy
1 import React from 'react';
2 import { View, FlatList, StyleSheet, Text, StatusBar } from 'react-native';
3
4 const DADOS = [
5 {
6 id: '1',
7 descricao: 'TV Led 49',
8 categoria_id: 1
9 },
10 {
11 id: '4',
12 descricao: 'Camisa Trilha',
13 categoria_id: 2
14 },
Recursos adicionais do
FlatList
O componente FlatList, assim como os
outros dois apresentados
anteriormente, possui alguns recursos
adicionais para tratar a exibição de
dados considerando aspectos mais
avançados, como, por exemplo, a
atualização dos dados.
tate
Todo dado capaz de variar ao longo da
aplicação, podendo tal mudança ser
(ou não) proveniente da interação do
usuário.
Exemplo de FlatList.
Outro recurso muito interessante
presente no FlatList – e nos demais
componentes de lista – é o
“onEndReached” (e,
consequentemente, o
“onEndReachedThreshold). Com o uso
dessa função, podemos informar ao
nosso aplicativo que determinada ação
deverá ser executada quando o usuário
chegar ou visualizar o final dos
elementos da lista. Normalmente, ela é
usada para carregar, mediante
demanda, novos conteúdos.
Comentário
Você, com certeza, já observou o
emprego desse recurso em aplicativos
de redes sociais, pois inicialmente é
carregado um conjunto limitado de
dados. Conforme você rola a tela para
baixo e chega ao final desse conjunto
inicial de dados, novas informações
são carregadas.
Próximos passos
Até aqui, você viu como esquematizar
a interface interativa de um aplicativo
utilizando diversos componentes,
alguns mais gerais e de múltiplos
usos, como a View, e outros mais
específicos e voltados para
determinadas necessidades, como as
listas.
video_library
Componentes de
lista no React Native
Neste vídeo, abordaremos os
principais componentes de lista e
multivalorados disponíveis no React
Native.
Falta pouco para
atingir seus
objetivos.
Os componentes FlatList e
VirtualizedList são especializações do
componente SectionList, exceto pelo
E
fato de ambos não possibilitarem a
exibição de títulos para as seções
contidas nos dados que renderizam.
Questão 2
É recomendado o uso do
VirtualizedList para os casos em que
A se precisa de menos flexibilidade que
aquela fornecida pelos componentes
Flat e SectionList.
O componente VirtualizedList é a
implementação básica dos outros dois
componentes de lista: FlatList e
E
SectionList. Esses componentes são
muito parecidos, tendo em comum
uma série de recursos.
Navegando em um
aplicativo mobile
Estamos acostumados a utilizar o
conceito de navegação proveniente
dos sites ou sistemas web. Em tais
ambientes, estão presentes termos
como:
Atenção
Embora muitos desenvolvedores
utilizem o termo “página”, é comum
também se referir às seções do
aplicativo como “telas”. É ainda mais
usual referenciar tais termos em seus
equivalentes no idioma inglês: pages
ou screens.
Preparando o nosso
ambiente
Para implementar os exemplos que
serão demonstrados neste módulo, é
necessário instalar algumas novas
dependências em nosso projeto (se
você ainda não criou um projeto,
recomendo que o faça agora). Essas
dependências serão listadas a seguir:
@react-navigation/native
react-native-reanimated
react-native-gesture-handler
react-native-screens
react-native-safe-area-context
Dica
Para instalar as dependências
descritas, use um gerenciador de
dependências (NPM ou YARN) a partir
do terminal, estando na raiz da pasta
que contém seu projeto. Observe a
necessidade de executar o comando
“react-native link” caso esteja
utilizando uma versão do React Native
Cli inferior a 0.60. Além disso, no
ambiente iOS, será preciso rodar os
pods por meio do comando “npx pod-
install ios” para completar o processo
de “linking” das dependências.
Stack Navigation
Apresentação
O primeiro modelo de navegação que
veremos é o Stack Navigation. Como
seu nome diz, esse modelo consiste
no empilhamento de telas. Ou seja,
cada nova tela acessada por meio dele
é colocada por cima em uma pilha,
sobrepondo a tela anterior.
Navegador
Histórico
offline_share
Transição entre telas.
history
Gestão do histórico de
navegação em um
aplicativo.
Dica
Antes de codificarmos, precisamos
instalar a seguinte dependência:
@react-navigation/native-stack
Estrutura do projeto
Estrutura de um projeto.
React Native
content_copy
home.js
React Native
content_copy
about.js
Criação do Stack
Navigator
React Native
content_copy
App.js
Análise do código
NavigationContainer
Container responsável por conter toda
a navegação de nosso aplicativo.
createNativeStackNavigator
Responsável por criar o Stack de
navegação.
Repare que criamos uma constante
denominada Stack – ela poderia ter
qualquer nome, ficando à sua escolha
– e a definimos como uma instância
de createNativeStackNavigator. Na
função App, usaremos essa constante
para definir os parâmetros de
navegação.
navigation.navigate('About')
navigation.navigate('Home')
Histórico expand_more
navigation.push(‘Home’)
Opções avançadas
Recomendação
Primeiro, implemente e busque
entender o funcionamento dos códigos
apresentados, para só então se
aprofundar no entendimento do
modelo de navegação Stack Navigator.
Apresentação
Este estilo de navegação é composto
por guias ou abas que contêm botões
– com título e ícone ou por suas
possíveis combinações – por meio dos
quais se navega ao pressionar tais
elementos. Essa navegação é
normalmente inserida na parte inferior
do aplicativo, embora também possa
se localizar no topo.
Exemplo de navegação com Tab Navigation.
Atenção
@react-navigation/bottom-tabs
Estrutura do projeto
Recomendação
Crie um projeto copiando do anterior
apenas as duas telas já mencionadas.
React Native
content_copy
Análise do código
Importar a dependência.
Dica
Tendo mantido o mesmo código para
as screens Home e About, clique nos
botões que incluímos no exemplo
anterior. Perceba que é possível
navegar entre as telas, no Tab
Navigator, usando o props “navigation”
e seu método “navigate”.
Drawer Navigation
Apresentação
O último modelo de navegação que
veremos é o Drawer Navigation. Esse
modelo consiste em fornecer um
menu de navegação que inicialmente
fica invisível na tela, sendo acessado
ao se arrastar a tela da esquerda (ou,
caso queiramos, da direita) em direção
ao meio dela.
Dica
Para usar o Drawer, é necessário
instalar a seguinte dependência:
@react-navigation/drawer
Estrutura do projeto
Criação do Drawer
Navigation
React Native
content_copy
App.js
Análise do código
Atenção
No Drawer, em específico, foi incluído
um atributo adicional, que é opcional,
por meio do qual definimos a tela
inicial a ser apresentada. Quando ela
não é definida por meio de atributo, em
todos os modelos de navegação, por
padrão, é exibida a primeira tela
definida dentro dos itens: screens.
Combinando os
modelos de
navegação
Os modelos de navegação
apresentados podem ser usados
individualmente, como demonstramos
nos códigos apresentados no módulo,
ou de forma combinada.
video_library
Modelos de
navegação no React
Native
Os três principais modelos de
navegação utilizados no design de
interface interativa com o React Native
são abordados no vídeo a seguir.
Falta pouco para
atingir seus
objetivos.
Questão 1
Ao compararmos o modelo de
navegação tradicional em um website
ou sistema web com os modelos
disponíveis no React Native, podemos
dizer que:
São modelos totalmente diferentes
A que não compartilham nenhum tipo de
semelhança entre si.
Questão 2
React Native
content_copy
1 //...
2 //imports
3 //...
4
5 const TabNav = createBottomTabNavigator();
6 function TabNavScreen() {
7 return (
8 <TabNav.Navigator>
9 <TabNav.Screen name='Home' component={HomeScreen} />
10 <TabNav.Screen name='About' component={AboutScreen} />
11 </TabNav.Navigator>
12 );
13 }Com a utilização de bibliotecas externas, é possível adicionar ao React Native alguns componentes qu
14
Estilizando
aplicativos em
React Native
Estilização de aplicativo.
SS
A estilização de aplicativos em React
Native segue os mesmos princípios
daquela realizada em páginas web. No
entanto, enquanto nessas páginas
utilizam-se as folhas de estilo (CSS -
do inglês Cascading Style Sheets), no
React Native emprega-se um código
JavaScript por meio da propriedade
(props) style.
Como funciona a
propriedade Style
invert_colors
Inline no próprio
componente.
invert_colors
Interna no mesmo
script.
invert_colors
Externa em um script
separado.
Este fragmento demonstra a definição
inline da cor do texto para o
componente Text:
React Native
content_copy
1 //...
2 <Text style={{color: 'blue'}}>Texto Azul</Text>
3 //...
React Native
content_copy
React Native
content_copy
React Native
content_copy
Styled Components
Apresentação
styled-components
React Native
content_copy
format_color_reset
Entender (e
sobrescrever) estilos.
code
Passar as propriedades
de estilo entre os
componentes como
props.
animation
Ter suporte a animações
(que será visto a seguir).
Animações em
React Native
Em React Native, estão disponíveis
dois recursos nativos para a animação
de objetos: a Animated API e a
LayoutAnimation API. Com os
recursos disponibilizados por ambas, é
possível, entre outras, realizar as
seguintes ações:
Animated API
Funcionamento
Esta API se baseia em relações
declarativas entre entradas e saídas,
fazendo uso de transformações
configuráveis por meio de métodos,
como iniciar e parar, por meio dos
quais podemos controlar a sua
execução. Nativamente, é possível
animar os seguintes componentes
React:
visibility
View
text_fields
Text
image
Image
touch_app
ScrollView
reorder
FlatList
view_list
SectionList
Hooks
No código, são utilizados dois hooks:
useRef e useEffect. Não se preocupe
ainda em relação a eles. Por enquanto,
saiba que o useEffect permite que
ações sejam executadas quando o
aplicativo for renderizado na tela.
Animated.timing
Veja a sintaxe do método
Animated.timing. São definidos nele o
valor até o qual o efeito de fade será
aplicado e o tempo de execução da
animação. Quanto maior for o tempo,
mais lenta será a execução.
Animated.Text
No exemplo, o Animated.Text é
utilizado como container para o texto a
ser exibido a aplicação da animação.
Como já mencionamos, também
poderíamos ter usado o
Animated.View e outros elementos.
React Native
content_copy
Outros recursos da
Animated API
Saiba mais
Cada um desses recursos pode ser
explorado a fundo por meio da
documentação oficial do React Native.
LayoutAnimation API
Funcionamento e análise
de código
Demonstraremos o funcionamento da
LayoutAnimation API. Em seguida,
faremos comentários sobre o código
utilizado. Vamos lá!
React Native
content_copy
Comentário 1 expand_more
O primeiro ponto de atenção no código
diz respeito a este fragmento:
UIManager.setLayoutAnimationEnabledExperimental
&&
UIManager.setLayoutAnimationEnabledExperimental(true);
Comentário 2 expand_more
Comentário 3 expand_more
Em relação à animação, o
pressionamento do botão faz com que
a função _onPress seja executada.
Essa função utiliza o LayoutAnimation
para animar o efeito de diminuição das
dimensões do quadrado.
Quando utilizar a
LayoutAnimation API
Atenção
Embora seja um recurso poderoso, a
LayoutAnimation API oferece menos
controle que a Animated API.
video_library
Estilização e
animação do React
Native
Neste vídeo, abordaremos os recursos
de estilização e animação disponíveis
no React Native.
Falta pouco para
atingir seus
objetivos.
Questão 1
As similaridades na aplicação de
estilos entre esses dois ambientes nos
permitem copiar um código CSS
B utilizado em uma página web e aplicá-
lo diretamente em um elemento no
aplicativo para que o código funcione
sem nenhum tipo de adaptação.
Questão 2
A utilização de animações é um
recurso importante em aplicativos,
porque elas tendem a melhorar a
experiência do usuário, oferecendo
interações mais fluidas no lugar de
elementos simplesmente estáticos.
Nesse contexto, da utilidade das
animações e de sua implementação
em React Native, é correto afirmar que:
Considerações
finais
Neste conteúdo, apresentamos alguns
recursos importantes do React Native
de forma prática e teórica, a começar
pela esquematização dos passos para
a definição da interface interativa de
um aplicativo mobile. Dos passos
apresentados, conseguimos introduzir
alguns componentes do React
voltados para a construção de layout e
a conteinerização de conteúdos e
outros elementos.
Além desses componentes, vimos, na
sequência, alguns com funções mais
específicas: os componentes de lista e
multivalorados. Em seguida,
descrevemos os três principais
modelos de navegação em um
aplicativo mobile disponíveis no
framework.
headset
Podcast
Ouça o podcast. Nele, falamos sobre o
processo de definição da interface de
um aplicativo mobile, componentes de
lista, modelos de navegação e os
recursos de estilização e animação do
React Native.
Referências
REACT NATIVE. Docs. Consultado na
internet em: 12 ago. 2021.
Explore +
Explore outros recursos sobre
animações e transições em aplicativos
mobile no site do Android Developer.
DEVELOPERS. Animações e
transições. Consultado na internet em:
12 ago. 2021.