Cursos / Informática para Internet / Desenvolvimento para Dispositivos Móveis / Aula
Até o momento já estamos listando os itens na tela de Home, porém, ainda faltam alguns detalhes que daremos continuidade agora.
Já foi criado o estado isLoading e ele já está sendo setado. Porém, ainda não o utilizamos na tela.
Para isso, utilizaremos o componente ActivityIndicator como se vê abaixo:
<View style={styles.container}>
{isLoading
? <ActivityIndicator />
: <FlatList style={styles.lista} data={posts} renderItem={({ item }) => <Item item={item} />} keyExtractor={(item) => "#" + item.id}></FlatList>
}
</View>
Nosso texto do post vem no formato HTML e para manipulá-lo iremos precisar instalar uma biblioteca através do comando abaixo:
npm install react-native-render-html
Com a biblioteca já instalada, utilizaremos esse componente em Item. Veja abaixo as modificações:
const Item = (props) => {
const { width } = useWindowDimensions()
const previewText = props.item.texto.substring(0, 300) + '...'
const source = { html: `<div style='color: white'>${previewText}</div>` }
return (
<View style={styles.item}>
<Image style={styles.img} source={{ uri: props.item.foto }}> </Image>
<Text style={styles.titulo}>{props.item.titulo}</Text>
<RenderHTML contentWidth={width} source={source}></RenderHTML>
</View>
)
}
Agora queremos que ao clicar em uma postagem o usuário seja direcionado para uma tela nova contendo mais informações sobre o post.
Para isso, utilizaremos o componente TouchableOpacity. Veja abaixo como fazer o uso desse componente:
const Item = ({ item, navigation }) => {
const { width } = useWindowDimensions()
const previewText = item.texto.substring(0, 300) + '...'
const source = { html: `<div style='color: white'>${previewText}</div>` }
return (
<TouchableOpacity onPress={navigation.navigate('BlogPost', { post: item })} style={styles.item}>
<Image style={styles.img} source={{ uri: item.foto }}> </Image>
<Text style={styles.titulo}>{item.titulo}</Text>
<RenderHTML contentWidth={width} source={source}></RenderHTML>
</TouchableOpacity>
)
}
E no componente FlatList:
<FlatList style={styles.lista} data={posts} renderItem={({ item }) => <Item navigation={navigation} item={item} />} keyExtractor={(item) => "#" + item.id}></FlatList>
Versão 5.3 - Todos os Direitos reservados