====social_login.dart====
abstract class SocialLogin{
Future<bool> login();
Future<bool> logout();
}
====kakao_login.dart====
import 'package:flutter_study/social_login.dart';
import 'package:kakao_flutter_sdk_user/kakao_flutter_sdk_user.dart';
class KakaoLogin implements SocialLogin{
@override
Future<bool> login() async{
try{
bool isInstalled = await isKakaoTalkInstalled();
if(isInstalled){
try{
await UserApi.instance.loginWithKakaoTalk();
return true;
}catch(error){
return false;
}
}
else{
try{
await UserApi.instance.loginWithKakaoAccount();
return true;
}catch(error){
return false;
}
}
}catch(error){
return false;
}
}
@override
Future<bool> logout() async{
try{
await UserApi.instance.unlink();
return true;
}catch(error){
return false;
}
}
}
====main_view_model.dart====
import 'package:flutter_study/social_login.dart';
import 'package:kakao_flutter_sdk_user/kakao_flutter_sdk_user.dart';
class MainViewModel{
final SocialLogin _socialLogin;
bool isLogined = false;
User? user;
MainViewModel(this._socialLogin);
Future login() async {
isLogined = await _socialLogin.login();
if (isLogined) {
user = await UserApi.instance.me();
}
}
Future logout() async {
await _socialLogin.logout();
isLogined = false;
user = null;
}
}
보시다시피 추상클래스인 SocialLogin을 KakaoLogin에서 구현했는데요. 근데 MainModelView에서는 왜 KakaoLogin을 안쓰고 SocialLogin으로 login logout을 구현하는거죠?.. KakaoLogin의 login logout 메소드를 호출하면 되는거 아닌가요?
카카오로그인 api 갖다쓴거 같은데 다른 로그인 확장할려면 sociallogin이 맞지 - dc App
근데 또 생각이 드는게 그러면 sociallogin을 상속받지 않고 왜 변수에 담아두죠?
import 하잖아 - dc App
import 'package:kakao_flutter_sdk_user/kakao_flutter_sdk_user.dart'; 를 import하는데요?
import랑 무슨 연관인가요?
import 'package:flutter_study/social_login.dart'; 이거두 있자노 - dc App
헐못봤넹 ㅋㅋㅋ 그럼 import안하면 상속으로 하면되나요? 두개 차이가있나요?
상속은 카카오로긴에서 구현한게 상속이고 import는 그냥 가져다 쓴거고 - dc App