poly_registry 2.0.0 copy "poly_registry: ^2.0.0" to clipboard
poly_registry: ^2.0.0 copied to clipboard

Type-safe polymorphic registry and map converter for Dart. No code generation.

example/poly_registry_example.dart

// ignore_for_file: avoid_print
import 'package:poly_registry/poly_registry.dart';

// 1. Define your models
abstract class JobPayload {
  Map<String, dynamic> toMap();
}

const typeKey = 'type';

class VideoPayload extends JobPayload {
  VideoPayload({required this.filePath});

  factory VideoPayload.fromMap(Map<String, dynamic> from) => VideoPayload(filePath: from['filePath'] as String);

  final String filePath;

  static const type = 'video';

  @override
  Map<String, dynamic> toMap() => {typeKey: type, 'filePath': filePath};
}

class DataSyncPayload extends JobPayload {
  DataSyncPayload({required this.endpoint});

  factory DataSyncPayload.fromMap(Map<String, dynamic> from) => DataSyncPayload(endpoint: from['endpoint'] as String);

  final String endpoint;

  static const type = 'dataSync';

  @override
  Map<String, dynamic> toMap() => {typeKey: type, 'endpoint': endpoint};
}

void main() {
  // 2. Create the registry and convert
  final registry = MapConverterRegistry<JobPayload>.prepare(
    typeKey: typeKey,
    entries: [
      InlineMapConverter(VideoPayload.type, VideoPayload.fromMap),
      InlineMapConverter(DataSyncPayload.type, DataSyncPayload.fromMap),
    ],
  );

  // 3. Use it.
  final videoPayload = registry.convert({
    typeKey: 'video',
    'filePath': '/tmp/video.mp4',
  });

  print(videoPayload); // Instance of 'VideoPayload'

  final dataSyncPayload = registry.convert({
    typeKey: 'dataSync',
    'endpoint': '/sync',
  });

  print(dataSyncPayload); // Instance of 'DataSyncPayload'

  final List<JobPayload> payloadList = [
    VideoPayload(filePath: '/tmp/video.mp4'),
    DataSyncPayload(endpoint: '/sync'),
  ];
  final List<Map<String, dynamic>> mapList = payloadList.map((e) => e.toMap()).toList();

  final restoredList = registry.convertAll(mapList);
  print(restoredList.length); // 2
}
0
likes
160
points
184
downloads

Documentation

API reference

Publisher

verified publisherastonio.com

Weekly Downloads

Type-safe polymorphic registry and map converter for Dart. No code generation.

Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on poly_registry