Then, create a service that returns a new user. Here, I'll use abstraction to obey Open/Close Principle.
abstract class IUserService{
UserModel getNewUser();
}
class UserServiceImpl extends IUserService {
final faker = Faker();
@override
UserModel getNewUser() {
String city = faker.address.city();
String name = faker.person.name();
DateTime birthDate =
faker.date.dateTimeBetween(DateTime(1940), DateTime.now());
int age = DateTime.now().year - birthDate.year;
String job = faker.job.title();
return UserModel(
name: name,
age: age.toString(),
job: job,
city: city,
);
}
}
class UserServiceImpl extends IUserService {
final faker = Faker();
@override
UserModel getNewUser() {
String city = faker.address.city();
String name = faker.person.name();
DateTime birthDate =
faker.date.dateTimeBetween(DateTime(1940), DateTime.now());
int age = DateTime.now().year - birthDate.year;
String job = faker.job.title();
return UserModel(
name: name,
age: age.toString(),
job: job,
city: city,
);
}
}
After that, you are ready to create a ViewModel which extends Pulse's PulseListViewModel. We'll pass IUserService in constructor to do dependency inversion.
class UsersViewModel extends PulseListViewModel<UserModel> { // specify your data type so that you won't get confused with type conversion
final IUserService service;
UsersViewModel({
required this.service,
});
void addUser() {
UserModel user = service.getNewUser();
addValue(user); // when you want to add something, use `addValue(T)` method from Pulse
// it'll automatically add your data to list
}
}
Lastly, we'll have to create a view that shows a list of users.