MitraIde

News

Cari Di Situs Ini

Jumat, 02 Februari 2024

Flutter API Get

 Kali ini kita akan membuat Flutter untuk mengkonsumsi API method GET, 

Sebelumnya kita sudah memiliki API method GET dengan Format seperti berikut :



isi dari file get1Data.php adalah seperti berikut :

<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

include 'conn.php';
$queryResult=$connect->query("SELECT * FROM tb_item limit 1");
$result=array();
while($fetchData=$queryResult->fetch_assoc()){
$result[]=$fetchData;
}

echo json_encode($result);

?>



Code di flutter :



sebelumnya kita sudah menambahkan dependeci http ,

http: ^1.2.0

Lalu kita membutuhkan 3 file seperti berikut :


api_service.dart :

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'item_model.dart';

class ApiService {
static Future<List<ItemModel>> fetchData() async {
final response = await http.get(Uri.parse('http://localhost/PHP-REST-API/get1Data.php'));

if (response.statusCode == 200) {
List<dynamic> data = json.decode(response.body);
List<ItemModel> itemList = List<ItemModel>.from(
data.map((item) => ItemModel.fromJson(item)),
);
return itemList;
} else {
throw Exception('Failed to load data');
}
}
}

item_model.dart

class ItemModel {
final String id;
final String itemCode;
final String itemName;
final String price;
final String stock;

ItemModel({
required this.id,
required this.itemCode,
required this.itemName,
required this.price,
required this.stock,
});

factory ItemModel.fromJson(Map<String, dynamic> json) {
return ItemModel(
id: json['id'],
itemCode: json['item_code'],
itemName: json['item_name'],
price: json['price'],
stock: json['stock'],
);
}
}

main.dart

import 'package:flutter/material.dart';
import 'api_service.dart';
import 'item_model.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
List<ItemModel> itemList = [];

@override
void initState() {
super.initState();
fetchData();
}

Future<void> fetchData() async {
try {
List<ItemModel> data = await ApiService.fetchData();
setState(() {
itemList = data;
});
} catch (e) {
print('Error: $e');
}
}

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Data API'),
),
body: itemList.isEmpty
? Center(
child: CircularProgressIndicator(),
)
: ListView.builder(
itemCount: itemList.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('ID: ${itemList[index].id}'),
subtitle: Text('Name: ${itemList[index].itemName}'),
);
},
),
),
);
}
}


Setelah itu coba jalankan flutter, 


Bisa tampak bahwa data sudah berhasil ditampilkan dengan method GET,



catatan, sebenarnya kode flutter di atas bisa saja dibuat menjadi 1 file di main.dart, namun agar lebih mudah maka kita mengelompokkan menjadi beberapa file, 
contoh berikut bila kita menggunakan 1 file saja.

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<Map<String, dynamic>> itemList = [];
@override
void initState() {
super.initState();
fetchData();
}
Future<void> fetchData() async {
final response = await http.get(Uri.parse('http://localhost/PHP-REST-API/get1Data.php'));
if (response.statusCode == 200) {
List<dynamic> data = json.decode(response.body);
setState(() {
itemList = List<Map<String, dynamic>>.from(data);
});
} else {
throw Exception('Failed to load data');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Data API'),
),
body: itemList.isEmpty
? Center(
child: CircularProgressIndicator(),
)
: ListView.builder(
itemCount: itemList.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('ID: ${itemList[index]['id']}'),
subtitle: Text('Name: ${itemList[index]['item_name']}'),
);
},
),
),
);
}
}