Skip to content

Instantly share code, notes, and snippets.

@taghassan54
Last active October 26, 2023 04:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taghassan54/fa84f486ce4b8d54970fbe11efa0a696 to your computer and use it in GitHub Desktop.
Save taghassan54/fa84f486ce4b8d54970fbe11efa0a696 to your computer and use it in GitHub Desktop.
clean architecture
void main() async {
Login auth = Login(new AuthRepoImpl());
User? loginResult =
await auth.call(LoginModel(userName: "taghassan54", userPass: "123456"));
print(loginResult?.id);
print(loginResult?.user);
}
//abstract USECASE
abstract class UseCase<Type, Param> {
Future<Type> call(Param params);
}
class NoParams {}
//LOGIN USERCASE
class Login implements UseCase<User?, LoginModel> {
final AuthRepo loginRepository;
Login(this.loginRepository);
@override
Future<User?> call(LoginModel params) async {
return await loginRepository.login(
params.userName, params.userPass);
}
}
//LOGIN PARAM MODEL
class LoginModel {
final String userName;
final String userPass;
LoginModel({required this.userName, required this.userPass});
}
//user reponse model
class User {
final int id;
final String user;
User({
required this.id,
required this.user,
});
}
// DataSource
class LoginUserDataSource {
Future<User?> login(userName, userPass) async {
if (userName == "taghassan54" && userPass == "123456") {
return User(id: 1, user: "admin");
} else {
return null;
}
}
}
// abstract Repo
abstract class AuthRepo {
Future<User?> login(userName, userPass);
}
//Auth Repo
class AuthRepoImpl extends AuthRepo {
LoginUserDataSource datasource = new LoginUserDataSource();
Future<User?> login(userName, userPass) async {
return await datasource.login(userName, userPass);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment