Membuat Aplikasi Android Sistem Informasi DesaKu - Part 14
Aplikasi Android Sistem Informasi Desaku ini merupakan Tutorial Part 14, jadi jika anda belum mengikuti Tutorial Part 13 [/membuat-aplikasi-android-sistem-informasi-desaku-part-13/] diharapkan anda untuk mengikuti Tutorial Part 13 [/membuat…
Aplikasi Android Sistem Informasi Desaku ini merupakan Tutorial Part 14, jadi jika anda belum mengikuti Tutorial Part 13 diharapkan anda untuk mengikuti Tutorial Part 13 terlebih dahulu untuk memudahkan anda dalam memahami Tutorial Part 14 ini.
Pada Tutorial Part 13 kita menambahkan perubahan code php pada file src/navigasi/index.php dan src/screen/Daftar_DesaKu.php kemudian kita juga telah melakukan testing langsung melihat hasil dari perubahan code ke aplikasi android dengan menjalankan server debug. Pada Tutorial Part 14 ini kita akan membuat tampilkan untuk Suara DesaKu.
Baiklah sekarang buka folder project yaitu DesaKu dengan menggunakan Visual Studio Code

Buka Project Dengan Visual Studio Code
Sekarang kita akan membuat tampilan pada Fitur Suara DesaKu, langsung saja ikuti langkah - langkah berikut ini.
- Buka file
Suara_DesaKu.jsyang berada di dalam foldersrc/screen, berikut tampilan code nya.

Suara DesaKu
Baiklah sekarang lakukan perubahan code pada code import component dari react-native
- Awal code seperti ini
import {
View,
Text
} from 'react-native'Awal code
- Perubahan Code seperti ini
import {
View,
Text,
FlatList,
ActivityIndicator,
RefreshControl,
TouchableOpacity,
Image,
StatusBar,
StyleSheet,
Linking
} from 'react-native'Perubahan Code

Perubahan Code
Setelah itu lakukan perubahan code pada code constructor seperti berikut
- Awal code seperti ini
constructor(props) {
super(props);
this.state = { }
}Awal code
- Perubahan Code seperti ini
constructor(props) {
super(props);
this.state = {
data:[],
isLoding: true,
refreshing: false
}
}Perubahan Code

Perubahan Code
Kemudian kita akan membuat sebuah function, function adalah digunakan untuk membungkus program menjadi bagian-bagian kecil. Buat dan letakan function setelah code constructor.
List_Suara_DesaKu = () =>{
return fetch('https://sisteminformasidesaku.000webhostapp.com/api/Suara_DesaKu/list_suara_desaku.php')
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson)
this.setState({
isLoding:false,
data: responseJson
})
})
}Membuat Function

Membuat Function
Kemudian tambahkan code componentDidMount agar function nya dijalan otomatis ketika aplikasi dijalankan pada saat awal buka aplikasinya dan letakan code ini setelah code Function.
componentDidMount(){
this.List_Suara_DesaKu()
}componentDidMount

componentDidMount
Setelah membuat sebuah fucntion componentDidMount seperti berikut codenya
FlatListItemSeparator = () => {
return (
<View
style={{
height: .5,
width: "100%",
backgroundColor: "#000",
}}
/>
);
}FlatListItemSeparator

FlatListItemSeparator
Setelah membuat sebuah fucntion _onRefresh seperti berikut codenya.
_onRefresh(){
this.setState({refreshing: true}) ;
this.List_Daftar_DesaKu().then(() => {
this.setState({
refreshing: false
})
})
}Fuction _onRefresh

Fuction _onRefresh
Setelah membuat sebuah fucntion ListEmptyView seperti berikut codenya.
ListEmptyView = (isLoading = this.state.isLoading) => {
if (isLoading) {
return (
<View style={{flex: 1, paddingTop: 20}}>
<ActivityIndicator />
</View>
);
}else{
return (
<View>
<Text style={{textAlign: 'center'}}> Tidak Ada Data.</Text>
</View>
);
}
}Function ListEmptyView

Function ListEmptyView
Setelah membuat sebuah fucntion renderItems seperti berikut codenya.
renderItems = ({ item }) => {
const { id, kepada_siapa, dari_siapa, photo_suara_desaku, kritik_saran } = item
return (
<View style={styles.containerList}>
<View style={styles.conGambar}>
<Image source={{ uri: photo_suara_desaku }} style={styles.gmbr} />
</View>
<View style={styles.note}>
<Text style={styles.Kepada}>TO : {kepada_siapa}</Text>
<Text style={styles.Dari}>FROM : {dari_siapa}</Text>
<Text style={styles.KritikSaran}>Saran&Kritik </Text>
<Text style={styles.pesan}>{kritik_saran}</Text>
</View>
</View>
)
}Function renderItems

Function renderItems
Kemudian tambahkan code FlatList dan StatusBar pada retrun, berikut code nya.
<View style={styles.maincontainer}>
<StatusBar backgroundColor='#009688' />
<FlatList
data={this.state.data}
ItemSeparatorComponent={this.FlatListItemSeparator}
keyExtractor={item => item.toString()}
renderItem={this.renderItems}
ListEmptyComponent={this.ListEmptyView}
refreshControl={
<RefreshControl refreshing={this.state.refreshing}
onRefresh={this._onRefresh.bind(this)}
/>
}
/>
</View>Code Di retrun

Code Di retrun
Setelah itu tambahkan code styling berikut sebelum code export default
const styles = StyleSheet.create({
maincontainer:{
flex:1
},
containerList:{
margin:5,
backgroundColor:'#009688',
flexDirection:'row',
borderRadius: 15
},
gmbr:{
height: 100,
width: 100,
resizeMode:"center",
borderRadius: 20
},
conGambar:{
alignItems: 'center',
width: 120,
justifyContent:'center',
},
note:{
width: 220,
margin: 5,
},
Kepada:{
fontSize: 18,
fontWeight:'bold',
color:'#fff'
},
Dari:{
fontSize: 18,
color:'#fff'
},
KritikSaran:{
fontSize: 20,
color:'#fff'
},
pesan:{
fontSize: 14,
color:'#fff'
}
})Code Styling

Code Styling
Berikut ini Code Lengkapnya
import React, { Component } from 'react';
import {
View,
Text,
FlatList,
ActivityIndicator,
RefreshControl,
TouchableOpacity,
Image,
StatusBar,
StyleSheet,
Linking
} from 'react-native'
class Suara_DesaKu extends Component {
constructor(props) {
super(props);
this.state = {
data:[],
isLoding: true,
refreshing: false
}
}
List_Suara_DesaKu = () =>{
return fetch('https://sisteminformasidesaku.000webhostapp.com/api/Suara_DesaKu/list_suara_desaku.php')
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson)
this.setState({
isLoding:false,
data: responseJson
})
})
}
componentDidMount(){
this.List_Suara_DesaKu()
}
FlatListItemSeparator = () => {
return (
<View
style={{
height: .5,
width: "100%",
backgroundColor: "#000",
}}
/>
);
}
_onRefresh(){
this.setState({refreshing: true}) ;
this.List_Daftar_DesaKu().then(() => {
this.setState({
refreshing: false
})
})
}
ListEmptyView = (isLoading = this.state.isLoading) => {
if (isLoading) {
return (
<View style={{flex: 1, paddingTop: 20}}>
<ActivityIndicator />
</View>
);
}else{
return (
<View>
<Text style={{textAlign: 'center'}}> Tidak Ada Data.</Text>
</View>
);
}
}
renderItems = ({ item }) => {
const { id, kepada_siapa, dari_siapa, photo_suara_desaku, kritik_saran } = item
return (
<View style={styles.containerList}>
<View style={styles.conGambar}>
<Image source={{ uri: photo_suara_desaku }} style={styles.gmbr} />
</View>
<View style={styles.note}>
<Text style={styles.Kepada}>TO : {kepada_siapa}</Text>
<Text style={styles.Dari}>FROM : {dari_siapa}</Text>
<Text style={styles.KritikSaran}>Saran&Kritik </Text>
<Text style={styles.pesan}>{kritik_saran}</Text>
</View>
</View>
)
}
render() {
return (
<View style={styles.maincontainer}>
<StatusBar backgroundColor='#009688' />
<FlatList
data={this.state.data}
ItemSeparatorComponent={this.FlatListItemSeparator}
keyExtractor={item => item.toString()}
renderItem={this.renderItems}
ListEmptyComponent={this.ListEmptyView}
refreshControl={
<RefreshControl refreshing={this.state.refreshing}
onRefresh={this._onRefresh.bind(this)}
/>
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
maincontainer:{
flex:1
},
containerList:{
margin:5,
backgroundColor:'#009688',
flexDirection:'row',
borderRadius: 15
},
gmbr:{
height: 100,
width: 100,
resizeMode:"center",
borderRadius: 20
},
conGambar:{
alignItems: 'center',
width: 120,
justifyContent:'center',
},
note:{
width: 220,
margin: 5,
},
Kepada:{
fontSize: 18,
fontWeight:'bold',
color:'#fff'
},
Dari:{
fontSize: 18,
color:'#fff'
},
KritikSaran:{
fontSize: 20,
color:'#fff'
},
pesan:{
fontSize: 14,
color:'#fff'
}
})
export default Suara_DesaKu;Code Lengkap
Perubahan code untuk fitur Daftar DesaKu sudah selesai, berikut tampilan pada HP androidnya

Tampilan Di Aplikasi Android
Demikian untuk Tutorial Part 14 ini akan kita lanjutkan pada Tutorial Part 15
Catatan: tulisan ini dipindahkan dari cloudborneo.com, terbit pertama 16 Desember 2019.