phive_barrel 0.5.0 copy "phive_barrel: ^0.5.0" to clipboard
phive_barrel: ^0.5.0 copied to clipboard

Ready-to-use PHive hooks including TTL and encryption helpers.

phive_barrel #

Ready-to-use PHive hooks package.

Use this package when you want common behaviors like TTL and encryption without writing your own hook classes.

Install #

dependencies:
  phive_barrel: ^0.0.1

If you are in this monorepo:

dependencies:
  phive_barrel:
    path: ../phive_barrel

Common Hooks #

  • TTL(seconds)
  • GCMEncrypted()
  • AESEncrypted()
  • UniversalEncrypted()

These hooks are designed to run inside generated PTypeAdapter<T> code produced by phive_generator.

Quick Start #

import 'package:phive/phive.dart';
import 'package:phive_barrel/phive_barrel.dart';

@PHiveType(1)
class Session {
  @PHiveField(0)
  final String id;

  @PHiveField(1, hooks: [GCMEncrypted(), TTL(10)])
  final String token;

  const Session({required this.id, required this.token});
}

Then regenerate adapters with build_runner.

Hook Model #

  • hooks run through PHiveCtx
  • model-level hooks declared on @PHiveType are merged with field-level hooks on @PHiveField
  • whole-object hooks can be declared with classHooks and run once around the full model value
  • classHooks persist shared metadata through a %PAR%...%PAR% class envelope before field payloads
  • shared class metadata is merged into each field context without overwriting field-specific metadata
  • encryption hooks may attach metadata such as nonces into the PHive payload envelope
  • hooks declare read-side cleanup through PHiveActionException and PHiveActionBehavior
  • routers remain responsible for applying storage side effects such as delete or clear

TTL Behavior #

The built-in TTL hook detects expiry on read and throws a behavior-driven exception that requests:

  • deleteEntry
  • returnNull

This keeps expiry detection inside the hook while leaving storage mutation inside the router.

Encryption Seed Setup #

Encryption hooks read their key material synchronously at hook runtime, so register and initialize the seed provider before encrypted reads or writes.

import 'package:phive_barrel/phive_barrel.dart';

Future<void> configurePhiveEncryption() async {
  PhiveMetaRegistry.registerSeedProvider(
    SecureStorageSeedProvider(
      seedIds: const ['session-token', 'profile-cache'],
    ),
  );
  await PhiveMetaRegistry.init();
}

Then point hooks at one of those preloaded seed ids:

@PHiveType(2)
class Session {
  @PHiveField(0)
  final String id;

  @PHiveField(1, hooks: [GCMEncrypted(seedId: 'session-token')])
  final String token;

  const Session({required this.id, required this.token});
}

If you use a custom seedId, include it in SecureStorageSeedProvider(seedIds: [...]) before calling PhiveMetaRegistry.init().

Nullable Fields #

All barrel hooks are null-safe. TTL skips writing metadata when the field value is null so nullable fields (int?, bool?, etc.) round-trip correctly without payload corruption. Encryption hooks (GCMEncrypted, AESEncrypted, UniversalEncrypted) already skipped non-string values. No special annotation is needed; nullability is handled automatically.

Notes #

  • Hooks are designed to work with PHive-generated adapters.
  • For a working dynamic-router and static-router example, see the monorepo example app.
0
likes
135
points
21
downloads

Documentation

API reference

Publisher

verified publisherpathverse.ca

Weekly Downloads

Ready-to-use PHive hooks including TTL and encryption helpers.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, flutter_secure_storage, phive, pointycastle

More

Packages that depend on phive_barrel