Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

how to make scrollView known when hit end list

so i got a problem where my scrollView can infinite scroll until the banner or the container is gone, what i want is when you hit the lest section like number3 you can’t scroll anymore, because i want so the name part doesn’t move the only thing that move is only the chart – end

This is the Expo-Snack if you want to try it live:
https://snack.expo.dev/@mikess/excel-list

example of the code:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

NewTableScree.tsx:

    const dataDummy = [
    {
        key: 1,
        name: "Tommy",
        chart: "10",
        char2: "20",
        chart3: "30",
        number: "100",
        number2: "2000",
        number3: "2000", 
    },
    {
        key: 2,
        name: "William",
        chart: "10",
        char2: "20",
        chart3: "30",
        number: "100",
        number2: "2000",
        number3: "2000", 
    },
    {
        key: 3,
        name: "Robert",
        chart: "10",
        char2: "20",
        chart3: "30",
        number: "100",
        number2: "2000",
        number3: "2000", 
    }
]

const renderChart = ({ item }) => (
    <>
      <Div
        py={14}
        bg="white"
        row
        borderBottomWidth={1}
        borderColor="#c4c4c4"
        rounded={0}
        
      >
        {/* <Div flex={3}>
          <Text fontWeight="normal" textAlign="center" >
            {item.name}
          </Text>
        </Div> */}
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.chart}
          </Text>
        </Div>
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.char2}
          </Text>
        </Div>
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.chart3}
          </Text>
        </Div>
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.number}
          </Text>
        </Div>
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.number2}
          </Text>
        </Div>
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center">
            {item.number3}
          </Text>
        </Div>
      </Div>
    </>
  )

const renderSingle = ({ item }) => (
    <>
      <Div
        py={14}
        bg="white"
        row
        borderBottomWidth={1}
        borderColor="#c4c4c4"
        rounded={0}
        
      >
        <Div flex={3}>
          <Text fontWeight="normal" textAlign="center" >
            {item.name}
          </Text>
        </Div>
      </Div>
    </>
  )

const header = (title: string, title1: string, title2:string, title3: string, title4: string,title5: string) => {
    return (
      <Div
        py={18}
        row
        bg="red"
        style={{  borderTopRightRadius: 10 }}
      >
        {/* <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            Name
          </Text>
        </Div> */}
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title}
          </Text>
        </Div>
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title1}
          </Text>
        </Div>
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title2}
          </Text>
        </Div>
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title3}
          </Text>
        </Div>
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title4}
          </Text>
        </Div>
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            {title5}
          </Text>
        </Div>
      </Div>
    )
  }

const singleHeader = (title: string, title1: string, title2:string) => {
    return (
      <Div
        py={18}
        row
        bg="red"
        style={{ borderTopLeftRadius: 10}}
      >
        <Div flex={3}>
          <Text color="white" fontWeight="bold" textAlign="center">
            Name
          </Text>
        </Div>
      </Div>
    )
  }

  const NewTabelScreen = () => {
  const windowWidth = Dimensions.get("window").width
  const [index, setIndex] = React.useState(0)
  const onScrollEnd = (e: any) => {
    let contentOffset = e.nativeEvent.contentOffset
    let viewSize = e.nativeEvent.layoutMeasurement
    let pageNum = contentOffset.x / viewSize.width
    setIndex(pageNum)
  }
  return (
    <Div bg='#979797' row flex={1} p={10}>
    <FlatList 
     style={{width: widthPercentageToDP(30) }}
     data={dataDummy}
     renderItem={renderSingle}
     keyExtractor={(_, idx: number) => idx.toString()}
     ListHeaderComponent={singleHeader}
    />
     <ScrollView 
      style={{backgroundColor: "#979797"}}
      horizontal
      showsHorizontalScrollIndicator={false}
      scrollEventThrottle={16}
      bounces={false}
    >
        <FlatList 
            style={{ width: windowWidth, marginRight: heightPercentageToDP(50) }}
            data={dataDummy}
            renderItem={renderChart}
            keyExtractor={(_, idx: number) => idx.toString()}
            ListHeaderComponent={header("chart", "chart2", "chart3", "number", "number2", "number3")}
        /> 
     </ScrollView>
    </Div>
  )
}

export default NewTabelScreen

if anyone can solved my problem it will be a help Thank you very much.

>Solution :

FlatList has large right margin.

<FlatList
  style={{ 
    width: windowWidth, 
    marginRight: heightPercentageToDP(50) // remove it!
  }}
...

if you remove ‘marginRight’, then it works as expected

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading