dartobjectutils 0.1.1 copy "dartobjectutils: ^0.1.1" to clipboard
dartobjectutils: ^0.1.1 copied to clipboard

A Dart library designed to help safely extract values from untyped objects.

example/dartobjectutils_example.dart

import 'package:dartobjectutils/dartobjectutils.dart';

// 1. Define your data models
class Address {
  final String street;
  final String city;
  final String zip;

  Address(Map<String, dynamic> json)
      : street = getStringPropOrThrow(json, 'street'),
        city = getStringPropOrThrow(json, 'city'),
        // Use default value for optional fields
        zip = getStringPropOrDefault(json, 'zip', '00000');

  @override
  String toString() => '$street, $city $zip';
}

class User {
  final String name;
  final int age;
  final bool isActive;
  final Address address;
  final List<String> tags;
  final List<Address> prevAddresses;

  User(Map<String, dynamic> json)
      : name = getStringPropOrThrow(json, 'name'),
        // Automatically converts compatible types (e.g. String "30" -> int 30)
        age = getNumberPropOrDefault(json, 'age', 0).toInt(),
        isActive = getBooleanPropOrDefault(json, 'isActive', false),
        // Parse nested object
        address = getObjectFunctionPropOrThrow(
          json,
          'address',
          (j) => Address(j),
        ),
        // Parse array of primitives
        tags = getStringArrayPropOrDefault(json, 'tags', <String>[]),
        // Parse array of objects
        prevAddresses = getObjectArrayFunctionPropOrDefault(
          json,
          'prevAddresses',
          (j) => Address(j),
          <Address>[],
        )!; // ! is safe because we provide a non-null default value

  @override
  String toString() {
    return 'User(name: $name, age: $age, isActive: $isActive, '
        'address: [$address], tags: $tags, '
        'prevAddresses: $prevAddresses)';
  }
}

void main() {
  print('--- dartobjectutils Example ---');

  // Case 1: Valid full object
  final validJson = {
    'name': 'Alice',
    'age': 30,
    'isActive': true,
    'address': {
      'street': '123 Main St',
      'city': 'Wonderland',
      'zip': '12345',
    },
    'tags': ['admin', 'editor'],
    'prevAddresses': [
      {'street': '456 Old St', 'city': 'OldTown', 'zip': '67890'},
      {'street': '789 Unknown St', 'city': 'Nowhere'}
    ]
  };

  print('\n1. Parsing Valid User:');
  try {
    final user = User(validJson);
    print(user);
  } catch (e) {
    print('Error: $e');
  }

  // Case 2: Missing optional fields (using defaults)
  final minimalJson = {
    'name': 'Bob',
    'address': {
      'street': '1st Ave',
      'city': 'Metropolis',
    },
    // 'age' missing -> defaults to 0
    // 'isActive' missing -> defaults to false
    // 'tags' missing -> defaults to []
    // 'prevAddresses' missing -> defaults to []
  };

  print('\n2. Parsing Minimal User (defaults):');
  try {
    final user = User(minimalJson);
    print(user);
  } catch (e) {
    print('Error: $e');
  }

  // Case 3: Invalid data (throwing error)
  final invalidJson = {
    'name': 'Charlie',
    'age': 'not a number', // getNumberPropOrDefault handles conversion failure -> defaults to 0
    'address': 'Not a map', // getObjectFunctionPropOrThrow throws exception
  };

  print('\n3. Parsing Invalid User (expecting error):');
  try {
    final user = User(invalidJson);
    print(user);
  } catch (e) {
    print('Caught expected error: $e');
  }
}
1
likes
150
points
771
downloads

Publisher

unverified uploader

Weekly Downloads

A Dart library designed to help safely extract values from untyped objects.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

More

Packages that depend on dartobjectutils