Field Types Reference
Reference for field types supported by Zorphy entity generation in v3.
Basic Types
String
zfa entity create -n User \
--field name:String \
--field email:String \
--field bio:String?
Usage:
final user = User(name: 'John', email: '[email protected]');
Integer
zfa entity create -n Counter \
--field count:int \
--field max:int?
Usage:
final counter = Counter(count: 42);
Double
zfa entity create -n Price \
--field amount:double \
--field taxRate:double?
Usage:
final price = Price(amount: 99.99, taxRate: 0.08);
Boolean
zfa entity create -n Settings \
--field isActive:bool \
--field notificationsEnabled:bool?
Usage:
final settings = Settings(isActive: true, notificationsEnabled: false);
DateTime
zfa entity create -n Event \
--field startDate:DateTime \
--field endDate:DateTime? \
--field createdAt:DateTime
Usage:
final event = Event(
startDate: DateTime.now(),
endDate: DateTime.now().add(Duration(hours: 2)),
createdAt: DateTime.now(),
);
Nullable Types
Add ? to make any field nullable:
zfa entity create -n Profile \
--field nickname:String \
--field bio:String? \
--field website:String? \
--field age:int?
Usage:
final profile = Profile(
nickname: 'John',
bio: null, // Optional
website: null, // Optional
age: null, // Optional
);
Collection Types
List
# List of primitives
zfa entity create -n Article \
--field title:String \
--field tags:List<String>
# List of entities
zfa entity create -n Category \
--field name:String \
--field products:List<$Product>
# List of enums
zfa entity create -n Task \
--field title:String \
--field labels:List<TaskLabel>
Usage:
final article = Article(
title: 'My Article',
tags: ['dart', 'flutter', 'clean-architecture'],
);
Set
zfa entity create -n PermissionGroup \
--field name:String \
--field permissions:Set<String>
Usage:
final group = PermissionGroup(
name: 'Admin',
permissions: {'read', 'write', 'delete'},
);
Map
# Map with dynamic values
zfa entity create -n Metadata \
--field data:Map<String,dynamic>
# Map with typed values
zfa entity create -n Config \
--field settings:Map<String,bool> \
--field limits:Map<String,int>
Usage:
final metadata = Metadata(
data: {
'version': '1.0.0',
'count': 42,
'active': true,
},
);
Nested Entities
Single Nested Entity
# First create the nested entity
zfa entity create -n Address \
--field street:String \
--field city:String \
--field country:String
# Then use it
zfa entity create -n User \
--field name:String \
--field address:$Address
Generated:
(generateJson: true)
abstract class $User {
String get name;
$Address get address; // Nested entity
}
Usage:
final user = User(
name: 'John',
address: Address(
street: '123 Main St',
city: 'New York',
country: 'USA',
),
);
List of Nested Entities
zfa entity create -n Order \
--field id:String \
--field items:List<$OrderItem>
Usage:
final order = Order(
id: '123',
items: [
OrderItem(product: 'Widget', quantity: 2),
OrderItem(product: 'Gadget', quantity: 1),
],
);
Enums
Create Enum
zfa entity enum -n Status --value active,inactive,pending
Use Enum in Entity
zfa entity create -n Account \
--field username:String \
--field status:Status
Usage:
final account = Account(
username: 'john_doe',
status: Status.active,
);
Multiple Enum Fields
zfa entity enum -n Priority --value low,medium,high,critical
zfa entity enum -N TaskStatus --value todo,in_progress,done
zfa entity create -n Task \
--field title:String \
--field priority:Priority \
--field status:TaskStatus
Generic Types
Single Generic
zfa entity create -n ApiResponse \
--field success:bool \
--field data:T? \
--field errorMessage:String?
Usage:
final response = ApiResponse<String>(
success: true,
data: 'Hello',
);
final userResponse = ApiResponse<User>(
success: true,
data: User(name: 'John'),
);
Multiple Generics
zfa entity create -n KeyValuePair \
--field key:K \
--field value:V
Usage:
final pair = KeyValuePair<String, int>(
key: 'count',
value: 42,
);
Self-Referencing Types
Tree Structure
zfa entity create -n CategoryNode \
--field id:String \
--field name:String \
--field children:List<$CategoryNode>? \
--field parent:$CategoryNode?
Usage:
final root = CategoryNode(
id: '1',
name: 'Electronics',
children: [
CategoryNode(
id: '2',
name: 'Phones',
parent: root,
),
],
parent: null,
);
Graph Structure
zfa entity create -n Node \
--field id:String \
--field label:String \
--field connections:List<$Node>
Complex Types
Mixed Nested Collections
zfa entity create -n Survey \
--field title:String \
--field questions:List<$Question> \
--field responses:Map<String, List<$Response>>
Deep Nesting
zfa entity create -n Company \
--field name:String \
--field address:$Address \
--field departments:List<$Department>
# where Department has List<Employee> and Employee has Address
JSON Serialization
All types automatically support JSON serialization when --json=true (default):
zfa entity create -n User \
--field name:String \
--field email:String? \
--field tags:List<String> \
--field address:$Address
# JSON is enabled by default
final user = User(name: 'John', email: '[email protected]');
// To JSON
final json = user.toJson();
// {"name":"John","email":"[email protected]","tags":[],"address":{...}}
// From JSON
final restored = User.fromJson(json);
Type Conversions
DateTime to/from JSON
DateTime fields are automatically serialized as ISO 8601 strings:
final event = Event(
startDate: DateTime(2026, 2, 4, 14, 30),
);
final json = event.toJson();
// {"startDate":"2026-02-04T14:30:00.000Z"}
final restored = Event.fromJson(json);
print(restored.startDate); // DateTime(2026, 2, 4, 14, 30)
Nested Entities to/from JSON
Nested entities are recursively serialized:
final user = User(
name: 'John',
address: Address(street: '123 Main', city: 'NYC'),
);
final json = user.toJson();
// {"name":"John","address":{"street":"123 Main","city":"NYC"}}
Best Practices
1. Use Appropriate Types
# ✅ Good - Type-safe
zfa entity create -n Price --field amount:double
# ❌ Avoid - Lose type safety
zfa entity create -n Price --field amount:String
2. Make Fields Nullable When Appropriate
# ✅ Good - Optional data
zfa entity create -n User \
--field name:String \
--field nickname:String? \
--field bio:String?
# ❌ Avoid - Everything required
zfa entity create -n User \
--field name:String \
--field nickname:String \
--field bio:String
3. Use Enums for Fixed Values
# ✅ Good - Compile-time safety
zfa entity enum -n Status --value active,inactive
zfa entity create -n Account --field status:Status
# ❌ Avoid - Runtime errors
zfa entity create -n Account --field status:String
4. Prefer Lists Over Sets for JSON
# ✅ Good - Better JSON support
zfa entity create -n Group --field members:List<String>
# ⚠️ Sets serialize to Lists in JSON anyway
zfa entity create -n Group --field members:Set<String>
Querying, Filtering, Sorting
Zuraffa includes QueryParams and ListQueryParams to keep querying type-safe.
Future<List<Product>> getList(ListQueryParams<Product> params) async {
return _box.values.filter(params.filter).orderBy(params.sort);
}
final params = ListQueryParams<Product>(
filter: And([
Eq(ProductFields.status, ProductStatus.available),
Gt(ProductFields.price, 10),
]),
sort: Sort(ProductFields.price, descending: true),
limit: 20,
);
What's Next?
- Advanced Patterns - Polymorphism, inheritance, generics
- Real-World Examples - Complete entity structures
- CLI Commands - Complete CLI reference