Sobatcoding.com - Tutorial membuat Dropdown menggunakan data source API
Pada artikel sebelumnya kita telah belajar cara menampilkan listview dengan API JSON android dengan bahasa flutter, kali ini kita akan mencoba menampilkan data dari API berupa format JSON dan menampilkannya pada widget Dropdown. Bagaimana caranya? Ikuti langkah berikut.
Pada artikel kali ini kita akan mencoba membuat tutorial menampilkan data static dan dinamis menggunakan datasource API.
Kita buat terlebih dahulu halaman view
import 'dart:convert';
import 'package:androidflutter/models/cities.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class DropdownPage extends StatefulWidget {
const DropdownPage({Key? key}) : super(key: key);
@override
_DropdownPageState createState() => _DropdownPageState();
}
class _DropdownPageState extends State<DropdownPage> {
@override
void initState() {
super.initState();
}
@override
dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Demo Dropdwon"),
),
body: Center(
child: ListView(children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: Text("List Kota Static"),
),
const Padding(
padding: EdgeInsets.all(8.0),
child: Text("List Kota dengan API"),
),
],),
));
}
}
Tambahkan beberapa variable berikut.
String? txtCity, txtCityStatic;
//variabel untuk menyimpan data API
List<Cities> listCities = [];
//set data kota secara manual
List<Cities> listCitiesStatic = [
Cities(id: 1, name: "Jakarta"),
Cities(id: 2, name: "Bandung"),
Cities(id: 3, name: "Semarang"),
Cities(id: 4, name: "Surabaya"),
Cities(id: 5, name: "Yogyakarta"),
];
Membuat function untuk mengambil data dari API
getAPICities() async {
try {
final response = await http.get(
Uri.parse("https://api.sobatcoding.com/testing/cities"),
headers: {
'Content-Type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
final dataDecode = jsonDecode(response.body);
setState(() {
for (var i = 0; i < dataDecode.length; i++) {
listCities.add(Cities.fromJson(dataDecode[i]));
}
});
}
} catch (e) {
debugPrint('$e');
}
}
Kemudian tambahkan ke dalam initState.
@override
void initState() {
getAPICities();
super.initState();
}
Buatlah sebuah widget untuk menampilkan data static ke dropdown dengan kode berikut.
Widget dropdownStatic() {
return Padding(
padding: const EdgeInsets.all(8.0),
child: DropdownButtonFormField<String>(
isExpanded: true,
hint: const Text("Pilih Kota Yang Dituju"),
value: txtCityStatic,
items: listCitiesStatic
.map((data) => DropdownMenuItem<String>(
child: Text(data.name.toString()),
value: data.id.toString(),
))
.toList(),
onChanged: (value) {
//
},
validator: (value) => value == null ? 'Pilih kota yang dituju' : null,
),
);
}
Buatlah sebuah widget untuk menampilkan data API ke dropdown dengan kode berikut.
Widget dropdownAPI() {
return Padding(
padding: const EdgeInsets.all(8.0),
child: DropdownButtonFormField<String>(
isExpanded: true,
hint: const Text("Pilih Kota Yang Dituju"),
value: txtCity,
items: listCities
.map((data) => DropdownMenuItem<String>(
child: Text(data.name.toString()),
value: data.id.toString(),
))
.toList(),
onChanged: (value) {
//
},
validator: (value) => value == null ? 'Pilih kota yang dituju' : null,
),
);
}
Kita tambahkan kedua widget tersebut ke dalam body sehingga kode menjadi seperti berikut.
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Demo Dropdwon"),
),
body: Center(
child: ListView(children: [
const Padding(
padding: EdgeInsets.all(8.0),
child: Text("List Kota Static"),
),
dropdownStatic(),
const Padding(
padding: EdgeInsets.all(8.0),
child: Text("List Kota dengan API"),
),
dropdownAPI(),
],),
));
}
Sekian tutorial kali ini. Jika teman-teman memiliki pertanyaan atau saran mengenai artikel ini, jangan ragu untuk meninggalkan komentar pada form di bawah ini.
Semoga bermanfaat.
Komentar 5