@@ -5,16 +5,17 @@ import isEqual from 'lodash.isequal';
55import { Picker } from '@react-native-picker/picker' ;
66import { defaultStyles } from './styles' ;
77import { Dimensions } from 'react-native' ;
8-
9- // Measuring the modal before rendering is not working reliably, so we need to hardcode the height
10- // This height was tested thoroughly on several iPhone Models (from iPhone 8 to 14 Pro)
11- const IOS_MODAL_HEIGHT = 262 ;
8+ import { PickerAvoidingView } from './PickerAvoidingView' ;
9+ import { PickerStateContext , PickerStateProvider } from './PickerStateProvider' ;
10+ import { IOS_MODAL_HEIGHT } from './constants' ;
1211
1312const preserveSpaces = ( label ) => {
1413 return label . replace ( / / g, '\u00a0' ) ;
1514} ;
1615
1716export default class RNPickerSelect extends PureComponent {
17+ static contextType = PickerStateContext ;
18+
1819 static propTypes = {
1920 onValueChange : PropTypes . func . isRequired ,
2021 items : PropTypes . arrayOf (
@@ -286,11 +287,16 @@ export default class RNPickerSelect extends PureComponent {
286287
287288 togglePicker ( animate = false , postToggleCallback ) {
288289 const { disabled } = this . props ;
290+ const { showPicker } = this . state ;
289291
290292 if ( disabled ) {
291293 return ;
292294 }
293295
296+ if ( this . context ) {
297+ this . context . setIsPickerOpen ( ! showPicker ) ;
298+ }
299+
294300 this . triggerOpenCloseCallbacks ( ) ;
295301
296302 if ( Keyboard . isVisible ( ) ) {
@@ -635,4 +641,4 @@ export default class RNPickerSelect extends PureComponent {
635641 }
636642}
637643
638- export { defaultStyles } ;
644+ export { defaultStyles , PickerStateProvider , PickerAvoidingView } ;
0 commit comments