CodeBlanks Logo Icon CodeBlanks

TypeAdapter

TypeAdapter ile özel sınıfı Hive'a kaydetmeyi öğrenirsin.

TypeAdapter nedir?

TypeAdapter, Hive'ın özel sınıfları nasıl kaydedip okuyacağını öğreten bir çeviricidir. Her adapter'ın benzersiz bir typeId'si olur ve Hive.registerAdapter ile kaydedilir. Adapter kayıtlı olmadan özel tip bir box'a koyamazsın.

class UserAdapter extends TypeAdapter<User> {
  @override
  final int typeId = 0;
  // read ve write metodları
}

@HiveType ve @HiveField

Model sınıflarını @HiveType(typeId: 0) ile işaretler, her alanı @HiveField(0), @HiveField(1) şeklinde sıralarsın. Bu ek açıklamalar kod üretimi ile adapter oluşturur. Elle adapter yazmak da mümkündür ama bu ek açıklamalar daha pratiktir.

@HiveType(typeId: 0)
class User extends HiveObject {
  @HiveField(0)
  final String name;
  User(this.name);
}

Uygulama UserAdapter yaz ve kullan

User sınıfı tanımla (final String name). UserAdapter yaz: typeId 0, read ve write metodları olsun. Adapter'ı kaydet, Hive'ı başlat, 'users' box'ını aç, 'u1' anahtarına User('Ayşe') koy, değeri al ve ismini yazdır.

Başlangıç kodu

main.dart
import 'package:hive/hive.dart';

// User sınıfını tanımla
// final String name alanı olsun

// UserAdapter sınıfını yaz
// typeId = 0
// read ve write metodları

void main() async {
  // adapter kaydet
  // Hive'ı başlat
  // 'users' box'ını aç
  // 'u1' anahtarına User('Ayşe') koy
  // değeri al ve ismini yazdır
}

Örnek çözüm

main.dart
import 'package:hive/hive.dart';

class User {
  final String name;
  User(this.name);
}

class UserAdapter extends TypeAdapter<User> {
  @override
  final int typeId = 0;

  @override
  User read(BinaryReader reader) {
    return User(reader.readString());
  }

  @override
  void write(BinaryWriter writer, User obj) {
    writer.writeString(obj.name);
  }
}

void main() async {
  Hive.registerAdapter(UserAdapter());
  Hive.init('hive_data');
  final box = await Hive.openBox('users');
  await box.put('u1', User('Ayşe'));
  final user = box.get('u1') as User;
  print(user.name);
  await box.close();
}

Beklenen çıktı

Ayşe

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Özel bir sınıfı Hive'a kaydetmek için ne kullanılır?

  • JsonAdapter
  • SqfliteAdapter
  • TypeAdapter Doğru cevap
  • StreamAdapter

Açıklama: TypeAdapter, Hive'ın özel sınıfları nasıl saklayacağını öğrenmesini sağlar; registerAdapter ile kaydedilir.

2 Adapter kaydet

Soru
Hive.____(UserAdapter());
Cevap
Hive.registerAdapter(UserAdapter());

Açıklama: Adapter'ı Hive'a tanıtmak için registerAdapter çağrılır; adapter örneği parametre olarak verilir.

3 TypeAdapter parçaları

Kavram Anlamı
TypeAdapter Özel sınıfı Hive'a tanıtır
typeId Benzersiz kimlik
@HiveType Sınıf işaretler
registerAdapter Adapter kaydeder

İleri seviye bölümündeki tüm dersler