react-native-keyboard-controller substitui as suposições do KeyboardAvoidingView com a altura do teclado sincronizada com a animação nativa. Em telas de formulário, isso significa que o TextInput ativo permanece visível, a rolagem parece uma folha do sistema e o Android se comporta da mesma forma que o iOS - sem props behavior por plataforma.
Cartão de receita de referência rápida - pronto para copiar e colar.
// app/_layout.tsx - provider uma vez na raizimport { Stack } from "expo-router";import { KeyboardProvider } from "react-native-keyboard-controller";export default function RootLayout() { return ( <KeyboardProvider> <Stack /> </KeyboardProvider> );}
KeyboardProvider Ausente - KeyboardAwareScrollView recorre a comportamento inconsistente ou altura de teclado zero. Correção: Envolva o layout raiz, não telas individuais.
bottomOffset deixado em 0 com uma toolbar - O campo focado fica escondido sob o KeyboardToolbar. Correção: Defina bottomOffset para a altura da toolbar + área segura (geralmente 44–62 px antes do inseto).
keyboardShouldPersistTaps omitido - Toques em botões de envio dispensam o teclado sem disparar onPress. Correção:keyboardShouldPersistTaps="handled" na scroll view.
Aninhar KeyboardAvoidingView dentro de KeyboardAwareScrollView - Ajuste duplo ultrapassa o limite e causa oscilação. Correção: Escolha uma estratégia - keyboard-controller OU avoiding view, não ambos.
FlatList dentro de KeyboardAwareScrollView - Listas virtualizadas dentro de scroll views quebram a medição e o desempenho. Correção: Coloque as entradas em ListHeaderComponent / ListFooterComponent, ou use useKeyboardHandler para layouts de chat.
Redimensionamento da barra de abas do Android - As abas inferiores deslizam para cima com o teclado e achatam o formulário. Correção:softwareKeyboardLayoutMode: "pan" ou tabBarHideOnKeyboard: true.
Reanimated não configurado - Worklets do useKeyboardHandler falham silenciosamente ou lançam erro no Android. Correção: Verifique o plugin babel do react-native-reanimated conforme documentação do Reanimated do Expo.