I'm trying to create multiple checkbox for my app like in the image below. I created it, but a facing problem that it's alignment is not good.
Here is my code in which I'm trying to create it, I created Separate component for that so I can use it in multiple places. I use code just facebook which is looking bad. Is there any library for that or better way to do it? It not looking good compare to image.
//component code
function Choice({data, onValueChange, style}) {
const [selectedIndex, setSelectedIndex] = useState(-1);
const FilterButton = ({
callback,
text,
id,
selectedIndex,
btnstyles,
btnTxtStyles,
btnstylesSelect,
btnTxtStylesSelect,
imageStyle,
}) => {
const clicked = selectedIndex === id;
return (
<View style={{flexDirection: 'row'}}>
{!clicked ? (
<>
<TouchableOpacity
style={[btnstyles]}
onPress={() => {
callback(id);
}}></TouchableOpacity>
</>
) : (
<>
<TouchableOpacity
style={btnstylesSelect}
onPress={() => {
callback(id);
}}>
<Image source={imagePath.tick} style={{borderRadius: 5}} />
</TouchableOpacity>
</>
)}
</View>
);
};
return (
<View style={[style]}>
{data.map((x, i) => (
<FilterButton
text={x.title}
id={i}
btnstyles={x.btnstyles}
btnTxtStyles={x.btnTxtStyles}
selectedIndex={selectedIndex}
btnTxtStylesSelect={x.btnTxtStylesSelect}
imageStyle={x.imageStyle}
btnstylesSelect={x.btnstylesSelect}
callback={(id) => {
setSelectedIndex(id);
if (onValueChange) {
onValueChange(id);
}
}}
/>
))}
</View>
);
}
//Main code
<View
style={{
flexDirection: 'row',
}}>
<Text style={{...styles.time1, ...commonStyles.fontSize14}}>
1hr
</Text>
<Text style={{...styles.time2, ...commonStyles.fontSize14}}>
2hr
</Text>
<Text style={{...styles.time2, ...commonStyles.fontSize14}}>
3hr
</Text>
<Text style={{...styles.time2, ...commonStyles.fontSize14}}>
4hr
</Text>
</View>
If anyone know how to do it better or any library for that please suggest.
