dataclass_beta 0.4.0 dataclass_beta: ^0.4.0 copied to clipboard
DataClass annotation for dataclass_generator. Used for generating base class with equals, hashCode, toString, copyWith methods.
dataclass #
@DataClass
annotation used for dataclass_generator
The DataClass generator generates base class for your data class with methods:
- equals (operator ==)
- hashCode
- toString
- copyWith
Getting Started #
0. Add dependencies to pubspec.yaml #
dependencies:
dataclass: latest_version
dev_dependencies:
dataclass_generator: latest_version
1. Annotate your class with @dataClass #
The class should:
- has only final fields
- unnamed constructor with named parameters for all fields
@dataClass
class Car {
final String name;
final String manufacturer;
final double price;
Car({this.name, this.manufacturer, this.price});
}
2. Generate dataclass base class #
Run pub run build_runner build
Generated file
abstract class _$Car {
const _$Car();
String get name;
String get manufacturer;
double get price;
bool operator ==(other) {
if (identical(this, other)) return true;
if (other is! Car) return false;
return true &&
this.name == other.name &&
this.manufacturer == other.manufacturer &&
this.price == other.price;
}
int get hashCode {
return mapPropsToHashCode([name, manufacturer, price]);
}
String toString() {
return 'Car <\'name\': ${this.name},\'manufacturer\': ${this.manufacturer},\'price\': ${this.price},>';
}
Car copyWith({String name, String manufacturer, double price}) {
return Car(
name: name ?? this.name,
manufacturer: manufacturer ?? this.manufacturer,
price: price ?? this.price,
);
}
}
3. Extend class with generated base class #
@dataClass
class Car extends _$Car {
final String name;
final String manufacturer;
final double price;
Car({this.name, this.manufacturer, this.price});
}
Collection equality
@dataClass
class Car extends _$Car {
@Collection(deepEquality: true) // Short-hand: @Collection()
final List<String> parts;
const Car({this.parts});
}
FAQ #
- Why you didn't use extension methods?
As the docs says that:
It is a compile-time error if an extension:
- Declares a member with the same basename as a member declared by Object (==, hashCode, toString, noSuchMethod, runtimeType). This applies to both static and instance member declarations.
- May I use generics?
Yes.