thumnail

Menggunakan HTTP Package untuk Fetch Data dari API di Flutter

Thu, April 2025 22:18:46

Flutter menyediakan paket http untuk mengambil data dari API. Berikut langkah-langkahnya:

1. Instalasi Paket HTTP

Tambahkan dependensi http pada pubspec.yaml:

dependencies:
  http: ^0.13.6

Lalu jalankan flutter pub get untuk menginstal paketnya.

2. Membuat Model Data

Misalnya, kita ingin mengambil daftar pengguna dari API JSONPlaceholder:

class User {
  final int id;
  final String name;
  final String email;

  User({required this.id, required this.name, required this.email});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      email: json['email'],
    );
  }
}

3. Fetch Data dari API

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

Future<List<User>> fetchUsers() async {
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/users'));

  if (response.statusCode == 200) {
    List<dynamic> data = jsonDecode(response.body);
    return data.map((json) => User.fromJson(json)).toList();
  } else {
    throw Exception('Failed to load users');
  }
}

4. Menampilkan Data dalam UI

import 'package:flutter/material.dart';

class UserScreen extends StatefulWidget {
  @override
  _UserScreenState createState() => _UserScreenState();
}

class _UserScreenState extends State<UserScreen> {
  late Future<List<User>> futureUsers;

  @override
  void initState() {
    super.initState();
    futureUsers = fetchUsers();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Users')),
      body: FutureBuilder<List<User>>(
        future: futureUsers,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('Error: ${snapshot.error}'));
          } else if (snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data!.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(snapshot.data![index].name),
                  subtitle: Text(snapshot.data![index].email),
                );
              },
            );
          } else {
            return Center(child: Text('No data available'));
          }
        },
      ),
    );
  }
}

CRUD Firebase Firestore di Flutter

Firestore adalah database NoSQL dari Firebase yang sering digunakan dalam aplikasi Flutter.

1. Instalasi Firebase

Tambahkan dependensi berikut ke pubspec.yaml:

dependencies:
  firebase_core: latest_version
  cloud_firestore: latest_version

Konfigurasi Firebase menggunakan FlutterFire CLI.

2. Konfigurasi Firebase

Tambahkan kode berikut di main.dart:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

3. Operasi CRUD dengan Firestore

Menambahkan Data

import 'package:cloud_firestore/cloud_firestore.dart';

void addUser(String name, String email) {
  FirebaseFirestore.instance.collection('users').add({
    'name': name,
    'email': email,
  });
}

Mengambil Data

Stream<List<Map<String, dynamic>>> getUsers() {
  return FirebaseFirestore.instance.collection('users').snapshots().map(
      (snapshot) =>
          snapshot.docs.map((doc) => doc.data()).toList());
}

Mengupdate Data

void updateUser(String userId, String newName) {
  FirebaseFirestore.instance
      .collection('users')
      .doc(userId)
      .update({'name': newName});
}

Menghapus Data

void deleteUser(String userId) {
  FirebaseFirestore.instance.collection('users').doc(userId).delete();
}

Menyimpan Data Lokal di Flutter dengan SharedPreferences dan Hive

SharedPreferences (Penyimpanan Key-Value Sederhana)

Instalasi Tambahkan di pubspec.yaml:

dependencies:
  shared_preferences: latest_version

Simpan dan Ambil Data

import 'package:shared_preferences/shared_preferences.dart';

Future<void> saveData(String key, String value) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setString(key, value);
}

Future<String?> getData(String key) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.getString(key);
}

Hive (Database Lokal NoSQL, Lebih Cepat dari SharedPreferences)

Instalasi Tambahkan di pubspec.yaml:

dependencies:
  hive: latest_version
  hive_flutter: latest_version

dev_dependencies:
  hive_generator: latest_version
  build_runner: latest_version

Konfigurasi Hive

import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  await Hive.initFlutter();
  await Hive.openBox('myBox');
  runApp(MyApp());
}

Menyimpan dan Mengambil Data

var box = Hive.box('myBox');

// Simpan data
box.put('username', 'JohnDoe');

// Ambil data
String username = box.get('username', defaultValue: 'Guest');
print(username);

Kesimpulan

Mana yang ingin Anda bahas lebih dalam? 😊