Skip to content

React Native Picker for Android and IOS with dynamically updating selected items on scroll.

License

Notifications You must be signed in to change notification settings

sosog/react-native-dynamically-selected-picker

Repository files navigation

react-native-dynamically-selected-picker

React Native Picker for Android and IOS with dynamically updating selected items on scroll. Idea was taken at react-native-swipe-picker

Android Ios

Installation

yarn add react-native-dynamically-selected-picker react-native-linear-gradient

or

npm i react-native-dynamically-selected-picker react-native-linear-gradient --save

Then, if you didn't install react-native-linear-gradient before: Enter command cd /ios and pod install. Now you can run project

Basic usage

import React, { useState } from 'react';
import { Dimensions, StyleSheet, Text, View } from 'react-native';

import DynamicallySelectedPicker from 'react-native-dynamically-selected-picker';

export default function App() {
  const [selectedItemIndex, setSelectedItemIndex] = useState<number>(0);
  const initialSelectedIndex = 1;
  const windowWidth = Dimensions.get('window').width;
  const height = 300;

  return (
    <View style={styles.container}>
      <DynamicallySelectedPicker
        items={[
          {
            value: 1,
            label: 'Item 1',
          },
          {
            value: 2,
            label: 'Item 2',
          },
          {
            value: 3,
            label: 'Item 3',
          },
          {
            value: 4,
            label: 'Item 4',
            itemColor: 'blue',
          },
          {
            value: 5,
            label: 'Item 5',
          },
        ]}
        onScroll={({ index }) => setSelectedItemIndex(index)}
        onMomentumScrollBegin={({ index }) => setSelectedItemIndex(index)}
        onMomentumScrollEnd={({ index }) => setSelectedItemIndex(index)}
        onScrollBeginDrag={({ index }) => setSelectedItemIndex(index)}
        onScrollEndDrag={({ index }) => setSelectedItemIndex(index)}
        initialSelectedIndex={initialSelectedIndex}
        height={height}
        width={windowWidth}
      />
      <View style={styles.selectedItemWrapper}>
        <Text>Selected item index {selectedItemIndex}</Text>
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  selectedItemWrapper: {
    marginTop: 50
  },
});

Properties (All are optional)

Prop Default Type Description
items [{value: 0, label: 'No items', itemColor: 'red'}] Array<object> -
onScroll - func Returns selected selected index
onMomentumScrollBegin - func Returns selected selected index
onMomentumScrollEnd - func Returns selected selected index
onScrollBeginDrag - func Returns selected selected index
onScrollEndDrag - func Returns selected selected index
initialSelectedIndex 0 number Set index number of initial item.
transparentItemRows 3 number Set number of items at top and bottom of selected index.
width 300 number -
height 300 number -
horizontal false boolean If true then a Horizontal picker.
allItemsColor #000 string -
selectedItemBorderColor '#cecece' string -
fontSize - number -
fontFamily 'Arial' string -
renderItem - func Custom render function for each item. Passed in PickerListItemProps See source for a working example.
renderGradientOverlay true boolean Render gradient over outer items.
topGradientColors [...] Array<string> See default value in source.
bottomGradientColors [...] Array<string> See default value in source.