Touchable Opacity Closing in React Native Flatlist

159 views Asked by At

I'm trying to do collapsible flatlist in react-native but there is a problem.There are 5 Text in a flatlist card.If i put one more text line (or touchable opacity) and click for collapsing, application stop working and it close.There is no error/warning message on log.Why is this happening and any solution?

import React, { useEffect, useState } from 'react';
import { StyleSheet, Text, View, StatusBar, TouchableOpacity, TextInput } from 'react-native';
import { SafeAreaView } from 'react-navigation';
import * as firebase from 'firebase';
import { FlatList } from 'react-native-gesture-handler';
import { Transition, Transitioning } from 'react-native-reanimated';

const transition = (
  <Transition.Together>
    <Transition.In type="fade" durationMs={200} />
    <Transition.Change />
    <Transition.Out type="fade" durationMs={200} />
  </Transition.Together>
)

const App = () => {
  const [filteredData, setfilteredData] = useState([]);
  const [search, setsearch] = useState('');
  const [items, setitems] = useState([]);
  const [CurrentIndex, setCurrentIndex] = useState(null);
  const ref = React.useRef();
  useEffect(() => {
    getItems();
    return () => {
    }
  }, [])

  const searchFilter = (text) => {
    if (text) {
      const newData = items.filter((item) => {
        const itemData = item.title ? item.title.toUpperCase() : ''.toUpperCase();
        const textData = text.toUpperCase();
        return itemData.indexOf(textData) > -1;
      });
      setfilteredData(newData);
      setsearch(text);
    } else {
      setfilteredData(items);
      setsearch(text);
    }
  }

  const ItemSeperatorView = () => {
    return (
      <View
        style={{ height: 0.5, width: '100%', backgroundColor: 'black', marginBottom: 3 }}
      />
    )
  }

  const getItems = () => {
    firebase.database().ref('/coordinates')
      .orderByChild('description')
      .once('value', snapshot => {
        var storeItems = [];
        snapshot.forEach(function (snap) {
          var info = snap.val();
          info.key = snap.key;
          storeItems.push(info);
        });
        setitems(storeItems);
        setfilteredData(storeItems);
      });
  }
  return (
    <SafeAreaView style={{ flex: 1 }}>
      <Transitioning.View 
      style={styles.container}
      transition={transition}
      ref={ref}
      >
        <TextInput
          style={styles.textInputStyle}
          value={search}
          placeholder="Aramak istediğini yaz"
          underlineColorAndroid="transparent"
          onChangeText={(text) => searchFilter(text)}
        />
        <FlatList
          data={filteredData}
          style={styles.cardContainer}
          renderItem={({ item }) => (
            <TouchableOpacity onPress={() => {
              ref.current.animateNextTransition();
              setCurrentIndex(item.key === CurrentIndex ? null : item.key);
            }}>
              <View style={styles.card}>
                <Text style={styles.heading}>{item.title}</Text>
                {item.key === CurrentIndex && (
                <View style={styles.subCategoriesList}>
                  <Text>Store Owner: {item.owner_name}</Text>
                  <Text>Store Owner Email: {item.owner_email}</Text>
                  <Text>Store Latitude: {item.latitude}</Text>
                  <Text>Store Longitude: {item.longitude}</Text>       
                  <Text>Store Longitude: {item.description}</Text>       
                  //*This is where I try to add text*               
                </View>)}                          
              </View>
            </TouchableOpacity>
          )}
          ItemSeparatorComponent={ItemSeperatorView}
        />
      </Transitioning.View>
    </SafeAreaView>
  );
};
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'black',
    justifyContent: 'center',
  },
  card: {
    flexGrow: 1,
    alignItems: 'center',
    justifyContent: 'center',
    backgroundColor: '#c8c8c8',
    minHeight:100,
    borderRadius:10,
    borderWidth: 0,
  },
  cardContainer:{
    flexGrow:1,
    paddingRight:3,
    paddingLeft:3,
  },
  heading: {
    fontSize: 20,
  },
  subCategoriesList: {
    marginTop:5,
    marginBottom:10,
    fontSize: 14,
    textAlign: 'center',
  },
  textInputStyle: {
    height: 50, 
    borderWidth: 1,
    paddingLeft: 20,
    margin: 3,
    borderColor: 'black',
    backgroundColor: 'white',
    borderRadius: 15,
    marginBottom:4,
    left:1,
  },
  directionButton:{
    alignItems:'center',
    justifyContent:'center',
    marginTop:5,
    marginBottom:3,
    backgroundColor:'red',
    margin:'auto',
  }
});

export default App;

Screenshot of the application

0

There are 0 answers