/// Address Entity /// /// Represents a delivery/billing address for the user. /// Corresponds to Frappe ERPNext Address doctype. library; import 'package:equatable/equatable.dart'; /// Address Entity /// /// Domain entity representing a user's delivery or billing address. class Address extends Equatable { final String name; final String addressTitle; final String addressLine1; final String phone; final String? email; final String? fax; final String? taxCode; final String cityCode; final String wardCode; final bool isDefault; final String? cityName; final String? wardName; final bool isAllowEdit; const Address({ required this.name, required this.addressTitle, required this.addressLine1, required this.phone, this.email, this.fax, this.taxCode, required this.cityCode, required this.wardCode, this.isDefault = false, this.cityName, this.wardName, this.isAllowEdit = true, }); @override List get props => [ name, addressTitle, addressLine1, phone, email, fax, taxCode, cityCode, wardCode, isDefault, cityName, wardName, isAllowEdit, ]; /// Get full address display string String get fullAddress { final parts = []; parts.add(addressLine1); if (wardName != null && wardName!.isNotEmpty) { parts.add(wardName!); } if (cityName != null && cityName!.isNotEmpty) { parts.add(cityName!); } return parts.join(', '); } /// Create a copy with modified fields Address copyWith({ String? name, String? addressTitle, String? addressLine1, String? phone, String? email, String? fax, String? taxCode, String? cityCode, String? wardCode, bool? isDefault, String? cityName, String? wardName, bool? isAllowEdit, }) { return Address( name: name ?? this.name, addressTitle: addressTitle ?? this.addressTitle, addressLine1: addressLine1 ?? this.addressLine1, phone: phone ?? this.phone, email: email ?? this.email, fax: fax ?? this.fax, taxCode: taxCode ?? this.taxCode, cityCode: cityCode ?? this.cityCode, wardCode: wardCode ?? this.wardCode, isDefault: isDefault ?? this.isDefault, cityName: cityName ?? this.cityName, wardName: wardName ?? this.wardName, isAllowEdit: isAllowEdit ?? this.isAllowEdit, ); } @override String toString() { return 'Address(name: $name, addressTitle: $addressTitle, addressLine1: $addressLine1, phone: $phone, isDefault: $isDefault, isAllowEdit: $isAllowEdit)'; } }