Describe the bug
When using react-native-keyboard-controller with KeyboardAwareScrollView, opening a React Native Modal after focusing and dismissing a TextInput causes the modal to appear without its content (invisible).
If the modal is opened without focusing an input first, it works fine.
Packages Used
"react-native-keyboard-controller": "^1.18.5",
"expo": "~52.0.47",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-native": "0.76.9",
"expo-status-bar": "~2.0.1",
...
Code snippet (ready to use)
app/_layout.tsx
import { KeyboardProvider } from 'react-native-keyboard-controller'
import { Stack } from 'expo-router'
import { StatusBar } from 'expo-status-bar'
function RootLayout() {
return (
<>
<KeyboardProvider>
<Stack
screenOptions={{
headerStyle: { backgroundColor: Colors.bgDark },
headerTintColor: Colors.white,
headerShadowVisible: false,
navigationBarColor: Colors.bgDark,
}}
>
<Stack.Screen name="index" options={{ headerShown: false }} />
</Stack>
</KeyboardProvider>
<StatusBar style="light" backgroundColor={'transparent'} />
</>
)
}
app/index.tsx
import { useState } from 'react'
import { Button, Modal, StyleSheet, Text, TextInput, View } from 'react-native'
import { KeyboardAwareScrollView } from 'react-native-keyboard-controller'
import { SafeAreaView } from 'react-native-safe-area-context'
export default function IndexPage() {
const [isShowModal, setIsShowModal] = useState(false)
return (
<SafeAreaView style={{ flex: 1 }}>
<View style={styles.container}>
<KeyboardAwareScrollView
showsVerticalScrollIndicator={false}
contentContainerStyle={{
flexGrow: 1,
justifyContent: 'space-between',
}}
>
<View style={styles.inpustWrapper}>
<TextInput style={styles.input} placeholder="input1" />
<TextInput style={styles.input} placeholder="input2" />
<TextInput style={styles.input} placeholder="input3" />
<TextInput style={styles.input} placeholder="input4" />
<TextInput style={styles.input} placeholder="input5" />
</View>
<Button onPress={() => setIsShowModal(true)} title="Open modal" />
</KeyboardAwareScrollView>
</View>
<Modal visible={isShowModal}>
<View style={styles.modal}>
<Text>This text and button should appear</Text>
<Button title="close modal" onPress={() => setIsShowModal(false)} />
</View>
</Modal>
</SafeAreaView>
)
}
const styles = StyleSheet.create({
container: { paddingHorizontal: 20, flex: 1 },
inpustWrapper: { gap: 16, marginBottom: 20, flex: 1 },
input: { borderWidth: 1, borderColor: 'black', height: 35, paddingHorizontal: 8 },
modal: {
backgroundColor: 'rgba(0,0,0,0.2)',
justifyContent: 'center',
alignItems: 'center',
flex: 1,
gap: 10,
},
})
To Reproduce
- Tap Open Modal button → modal works fine, content is visible.
- Tap on any TextInput → keyboard opens.
- Dismiss the keyboard.
- Tap Open Modal button again → modal appears, but content is gone / invisible.
Expected behavior
Modal content should always render correctly, even if it is opened after focusing and dismissing a TextInput.
Smartphone (please complete the following information):
- Desktop OS: Windows 11
- Device: Xiaomi Redmi Note 9
- OS: MIUI 12.5.5
- RN version: 0.76.9
- RN architecture: new/fabric
- JS engine: Hermes
- Library version: 1.18.5
Additional context
This issue only happens when using KeyboardAwareScrollView from react-native-keyboard-controller.
Using a plain ScrollView or opening modal without focusing input works fine.
Describe the bug
When using react-native-keyboard-controller with KeyboardAwareScrollView, opening a React Native Modal after focusing and dismissing a TextInput causes the modal to appear without its content (invisible).
If the modal is opened without focusing an input first, it works fine.
Packages Used
Code snippet (ready to use)
app/_layout.tsx
app/index.tsx
To Reproduce
Expected behavior
Modal content should always render correctly, even if it is opened after focusing and dismissing a TextInput.
Smartphone (please complete the following information):
Additional context
This issue only happens when using KeyboardAwareScrollView from react-native-keyboard-controller.
Using a plain ScrollView or opening modal without focusing input works fine.