Configuração Inicial do Fluxo de Navegação
Já temos nosso fluxo de navegação entre telas funcionando. Nossa página inicial está exibindo um cabeçalho que não era exibido anteriormente, e o Stack está fazendo isso por nós. O botão "Quero Iniciar" está direcionando para a página de Pomodoro. No entanto, essa página de Pomodoro agora possui um cabeçalho que não deveria estar presente, conforme o layout no Figma. Precisamos customizar isso.
Removendo o Cabeçalho da Página de Pomodoro
Para remover o cabeçalho da página de Pomodoro, vamos ao VS Code e abrimos o arquivo layout_underline_layout.jsx. É nesse arquivo que faremos a configuração da nossa rota específica. Inicialmente, temos o retorno do stack como uma tag de fechamento automático:
Para permitir customizações, colocaremos tudo entre parênteses, abrindo e fechando o stack:
return (<Stack>
</Stack>);
Dentro do stack, chamaremos outro componente que começa com stack, mas não queremos um stack dentro de outro stack. Queremos um componente chamado screen. Vamos usar stack.screen para definir a tela:
Configurando a Tela Pomodoro
Precisamos informar ao stack qual é o nome ou path name dessa tela específica. Vamos configurar o nome como "pomodoro":
<Stack.Screen name='pomodoro'/>
Para essa tela específica, podemos fazer várias customizações. Podemos passar, como propriedade para o stack.screen, uma prop chamada options:
<Stack.Screen name='pomodoro' options={{}}/>
Ao pressionar control + espaço, o VS Code mostrará todas as opções disponíveis, como title, status bar, header title, entre outras. Queremos uma opção específica: esconder o cabeçalho. Para isso, usamos a prop headerShown. Por padrão, esse valor é true, o que significa que o stack exibe o cabeçalho automaticamente. Para esconder o cabeçalho, definimos headerShown como false:
options={{ headerShown: false }}
Isso ativará o hot reload, e o cabeçalho não aparecerá mais no simulador. Vamos quebrar algumas linhas para melhorar a legibilidade do código, como no name, options e ao fechar o stack.screen:
<Stack.Screen
name='pomodoro'
options={{ headerShown: false }}
/>
Considerações sobre Customizações de Layout
Essa é a estrutura básica de um roteador. Nosso stack possui vários tipos de roteadores diferentes, mas ele contém telas, e essas telas possuem opções configuráveis.
Repare que essa configuração é totalmente opcional. Se comentarmos esse código, ele retornará com o header, e o comportamento continuará o mesmo:
Quando devemos intervir no layout, dentro do stack, e especificar algo para o router? Quando queremos customizar. Quando desejamos tratar um caso especial e indicar que, nesse caso específico, o comportamento deve ser diferente. Foi isso que fizemos agora. No caso da tela Pomodoro, decidimos não exibir o header. Assim, o headerShown (ou seja, "exibe o header") está configurado como falso. Não queremos que o header seja exibido.
Organização de Imagens no Projeto
Dessa forma, configuramos partes específicas de uma tela dentro do ExpoRouter. Como estamos preparando nosso projeto para receber novas funcionalidades, há mais uma tarefa a ser feita: organizar as imagens que temos. Dentro da pasta app, temos os arquivos long.png, pomodoro.png e short.png. Atualmente, essas imagens estão na raiz do projeto. Como mencionado anteriormente, nosso roteador fará o roteamento baseado em nomes de partes e arquivos. Podemos usar a estrutura do próprio Expo para melhorar essa organização. Em vez de manter as imagens na raiz do projeto, vamos movê-las para a pasta "Assets".
Após mover as imagens, o compilador indicará que não consegue mais encontrar o arquivo pomodoro.png. Precisamos ajustar o caminho para essa imagem no arquivo pomodoro.jsx. Nas linhas 12, 18 e 24, o caminho não é mais ./nome_da_imagem. Agora, devemos voltar uma pasta, acessar "Assets", e dentro de "Assets", acessar a pasta "Imagem", onde está o arquivo pomodoro.png:
image: require('../assets/images/pomodoro.png'),
Vamos aplicar esse mesmo caminho relativo para o Require e corrigir os outros arquivos:
image: require('../assets/images/short.png'),
image: require('../assets/images/long.png'),
Testando e Corrigindo Erros no Emulador
Após salvar, pediremos ao emulador para tentar executar novamente. Se ocorrer algum problema, como o NPM Start se perder, devemos parar e reiniciar o NPM Start, abrir no iOS e fazer um reload. Caso o arquivo pomodoro.png não seja encontrado, devemos verificar se o nome do arquivo está correto.
Se houver um erro, como tentar acessar diretamente "assets" em vez de "imagens", devemos corrigir. Após ajustar, o Expo deve se recuperar e carregar corretamente. Verificamos se todas as imagens, como pausa curta e pausa longa, estão carregadas. O problema anterior ocorreu porque o nome do arquivo estava correto, mas o caminho estava errado. O Expo não consegue adivinhar automaticamente o que estamos fazendo.
Portanto, movemos nossas imagens para a pasta "imagens" dentro de "assets" e, no nosso layout, temos a customização para a tela do Pomodoro. Estamos progredindo bem, mas ainda há muito a ser feito. Vamos continuar evoluindo este aplicativo, que receberá muitas funcionalidades interessantes.