Mengambil data dari internet diperlukan untuk sebagian besar aplikasi. Untungnya, Dart dan Flutter menyediakan alat, seperti paket http, untuk jenis pekerjaan ini.
Langkah-langkahnya sebagai berikut :
1. Tambahkan http
paket
The http
paket menyediakan cara paling sederhana untuk mengambil data dari internet.
Untuk menginstal http
paket, tambahkan ke bagian dependensi pubspec.yaml
file. Anda dapat menemukan versi terbaru dari http
paket pub.dev.
dependencies:
http: <latest_version>
Impor paket http.
import 'package:http/http.dart' as http;
Selain itu, di file AndroidManifest.xml Anda, tambahkan izin Internet.
<!-- Required to fetch data from the internet. -->
<uses-permission android:name="android.permission.INTERNET" />
2. Buat permintaan jaringan
Resep ini membahas cara mengambil album sampel dari JSONPlaceholder menggunakan http.get()
metode tersebut.
Future<http.Response> fetchAlbum() {
return http.get(Uri.https('jsonplaceholder.typicode.com', 'albums/1'));
}
The http.get()
Metode mengembalikan Future
yang berisi Response
.
Future
adalah kelas Dart inti untuk bekerja dengan operasi asinkron. Objek Future mewakili nilai potensial atau kesalahan yang akan tersedia di masa mendatang.- The
http.Response
kelas berisi data yang diterima dari panggilan http sukses.
3. Ubah respons menjadi objek Dart kustom
Meskipun mudah untuk membuat permintaan jaringan, bekerja dengan raw Future<http.Response>
sangatlah tidak nyaman. Untuk membuat hidup Anda lebih mudah, ubah http.Response
menjadi objek Dart.
Buat Album
kelas
Pertama, buat Album
kelas yang berisi data dari permintaan jaringan. Ini termasuk konstruktor pabrik yang membuat Album
dari JSON.
Mengonversi JSON dengan tangan hanyalah salah satu opsi. Untuk informasi lebih lanjut, lihat artikel lengkap tentang JSON dan serialisasi .
class Album {
final int userId;
final int id;
final String title;
Album({@required this.userId, @required this.id, @required this.title});
factory Album.fromJson(Map<String, dynamic> json) {
return Album(
userId: json['userId'],
id: json['id'],
title: json['title'],
);
}
}
Ubah http.Response
menjadiAlbum
Sekarang, gunakan langkah-langkah berikut untuk memperbarui fetchAlbum()
fungsi untuk mengembalikan Future<Album>
:
- Ubah isi respons menjadi JSON
Map
dengandart:convert
paket. - Jika server mengembalikan respons OK dengan kode status 200, maka ubah JSON
Map
menjadiAlbum
menggunakanfromJson()
metode pabrik. - Jika server tidak mengembalikan respons OK dengan kode status 200, lemparkan pengecualian. (Bahkan dalam kasus respons server "404 Not Found", berikan pengecualian. Jangan kembali
null
. Ini penting saat memeriksa data disnapshot
, seperti yang ditunjukkan di bawah ini.)
import 'dart:convert';
Future<Album> fetchAlbum() async {
final response = await http.get(Uri.https('jsonplaceholder.typicode.com', 'albums/1'));
if (response.statusCode == 200) {
// If the server did return a 200 OK response,
// then parse the JSON.
return Album.fromJson(jsonDecode(response.body));
} else {
// If the server did not return a 200 OK response,
// then throw an exception.
throw Exception('Failed to load album');
}
}
Hore! Sekarang Anda memiliki fungsi yang mengambil album dari internet.
4. Ambil data
Panggil fetchAlbum()
metode di salah satu metode initState()
atau didChangeDependencies()
.
The initState()
metode ini disebut persis sekali dan kemudian tidak pernah lagi. Jika Anda ingin memiliki opsi untuk memuat ulang API sebagai respons terhadap InheritedWidget
perubahan, masukkan panggilan ke dalam didChangeDependencies()
metode. Lihat State
untuk lebih jelasnya.
class _MyAppState extends State<MyApp> {
late Future<Album> futureAlbum;
@override
void initState() {
super.initState();
futureAlbum = fetchAlbum();
}
Masa Depan ini digunakan di langkah berikutnya.
5. Menampilkan data
Untuk menampilkan data di layar, gunakan FutureBuilder
widget. The FutureBuilder
widget dilengkapi dengan Flutter dan membuatnya mudah untuk bekerja dengan sumber data asynchronous.
Anda harus memberikan dua parameter:
- Yang
Future
ingin Anda ajak kerja sama. Dalam hal ini, masa depan kembali darifetchAlbum()
fungsi tersebut. - Sebuah
builder
fungsi yang memberitahu Flutter apa untuk membuat, tergantung pada keadaanFuture
: pemuatan, sukses, atau kesalahan.
Perhatikan bahwa snapshot.hasData
hanya ditampilkan true
jika snapshot berisi nilai data bukan null.
Karena fetchAlbum
hanya dapat mengembalikan nilai bukan null, fungsi tersebut harus mengeluarkan pengecualian bahkan dalam kasus respons server "404 Not Found". Melemparkan pengecualian set yang snapshot.hasError
untuk true
yang dapat digunakan untuk menampilkan pesan kesalahan.
Jika tidak, spinner akan ditampilkan.
FutureBuilder<Album>(
future: futureAlbum,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!.title);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner.
return CircularProgressIndicator();
},
);
Mengapa fetchAlbum () dipanggil initState ()?
Meskipun nyaman, tidak disarankan untuk melakukan panggilan API dalam suatu build()
metode.
Flutter memanggil build()
metode setiap kali perlu mengubah apa pun dalam tampilan, dan ini sering terjadi secara mengejutkan. Meninggalkan fetch
panggilan dalam build()
metode Anda akan membanjiri API dengan panggilan yang tidak perlu dan memperlambat aplikasi Anda.
Menguji
Coding Lengkap
Hasil
"teknik informatika universitas bina darma palembang"