datac_generator

Creator: coderz1093

Last updated:

0 purchases

datac_generator Image
datac_generator Images

Languages

Categories

Add to Cart

Description:

datac generator

A data class generator package used to generate all methods for your data class,
and save your time from writing boilerplate code for every class - although still you need to write a few code :)-.
Methods #

equals.
toString.
hashCode.
copyWith.
fromJson.
toJson.

Usage #
First, we need to do add datac_generator to the dependencies of the pubspec.yaml
dev_dependencies:
datac_generator: ^1.0.3
build_runner: '>=2.3.0 <4.0.0'

copied to clipboard
Next, we need to install it:
# Dart
pub get

# Flutter
flutter packages get
copied to clipboard
Import annotations package.
import 'package:datac_annotations/datac_annotations.dart';
copied to clipboard
Lastly, we need to mark class with @DataClass() annotation.
part 'person.g.dart';

@DataClass()
class Person {
final String name;
final int age;

Person(this.name, this.age);

}
copied to clipboard
then run build runner command
flutter pub run build_runner build --delete-conflicting-outputs
copied to clipboard
after that you can access method
@DataClass()
class Person {
final String name;
final int age;

Person(this.name, this.age);

@override
int get hashCode => PersonExtension.hashcode(this);

@override
bool operator ==(Object other) => PersonExtension.eq(this, other);

Map<String, dynamic> toJson() => PersonExtension.toJson(this);

factory Person.fromJson(Map<String, dynamic> json) => PersonExtension.fromJson(json);

@override
String toString() => PersonExtension.toStringValue(this);

}

/// test
void main(){

Person p1 = Person('name', 20);

print(p1);
print(p1.hashCode);
print(p1.copyWith(age: 30));
print(p1.toJson());

Person p2 = Person('name', 20);
print(p1 == p2);

}

/// output
///--------------
/// Person(name: name, age: 20)
/// 652408128
/// Person(name: name, age: 30)
/// {name: name, age: 20}
/// true
copied to clipboard
in case you don't need some of method to be generated you can use exclude params
in DataClass witch accept list of DataClassMethods enum.
for example
@DataClass(exclude: [DataClassMethods.tostring])
class Person {}
copied to clipboard
if class has more than one constructor you have to unique name using @Qualifier('constructorName') in order to use for copy with method
@DataClass()
class Person {
final String name;
final int age;

Person(this.name, this.age);

@Qualifier('name')
factory Person.name(String name) => Person(name, 0);
}

void main(){
Person p = Person('Name', 20);
p.copyWithName('another name');
}
copied to clipboard
if you don't need to create copy with method for specific constructor you
can use @Ignore() annotation.
@DataClass()
class Person {
final String name;
final int age;

Person(this.name, this.age);

@Ignore()
factory Person.name(String name) => Person(name, 0);
}
copied to clipboard
if you need to add custom equals operator to some fields you can use @Equals
annotation with accept type of EqualsEvaluator.
example
/// first implement EqualsEvaluator class
class DateTimeEvaluator extends EqualsEvaluator<DateTime>{
@override
bool evaluate(DateTime obj, Object other) {
if(other is! DateTime){
return false;
}

return obj.isAtSameMomentAs(other);
}

}

/// then add custom equals evaluator to field
@DataClass()
class Post{

final String body;
@Equals(evaluator: DateTimeEvaluator)
final DateTime timstamp;

Post(this.body, this.timstamp);

}

/// There is build in equals evaluator annotations:
/// 1- ListEquals.
/// 2- MapEquals.
/// 3- DateTimeEquals.
@DataClass()
class Post{

final String body;
@DateTimeEquals()
final DateTime timstamp;

Post(this.body, this.timstamp);

}

@DataClass()
class Country{

final String name;
@ListEquals()
final List<Location> cityLocations;

Country(this.name, this.cityLocations);

}

copied to clipboard

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.