Skip to content

Instantly share code, notes, and snippets.

@rubgithub
Last active May 27, 2020 20:22
Show Gist options
  • Save rubgithub/b6b70842d3a1292c6024df456b1aebbb to your computer and use it in GitHub Desktop.
Save rubgithub/b6b70842d3a1292c6024df456b1aebbb to your computer and use it in GitHub Desktop.
Dart Generic Workaround
class FirestoreServiceMock {}
abstract class IModel {
String _uid;
Map<String, dynamic> toJson();
fromJson(Map<String, dynamic> json);
String get uid => _uid;
set uid(String value) {
_uid = value;
}
}
class UserModel implements IModel {
@override
String uid;
String _name;
String _email;
@override
Map<String, dynamic> toJson() => {"name": _name, "email": _email};
@override
fromJson(Map<String, dynamic> json) {
uid = json["uid"];
_name = json["name"];
_email = json["email"];
}
String get email => _email;
set email(String value) {
_email = value;
}
String get name => _name;
set name(String value) {
_name = value;
}
@override
String _uid;
}
typedef S ObjectCreator<S>();
class BaseService<T extends IModel> {
BaseService(this.creator);
final ObjectCreator<T> creator;
T getById(String id) {
final t = creator();
final fakeData = {
'uid': '5',
'name': 'Maria',
'email': 'maria@maria.com',
};
t.fromJson(fakeData);
return t;
}
}
void main() {
var b = BaseService<UserModel>(() => UserModel());
var user = b.getById('1');
print('Id: ${user.uid} Usuario: ${user.name} Email: ${user.email}');
//
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment