====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;
}
}
KakaoLogin은 SocialLogin을 상속했고, MainViewModel은 SocialLogin을 import해서 변수에 인스턴스를 담아뒀는데 MainViewModel에서는 왜 상속을 안하고 import를 했죠?
상속이랑 import가 애초에 다른데
import 는 해당 클래스에서 다른 클래스를 사용하겠다고 명시하는거고 implements(상속)은 특정 부모클래스를 사용하겠단거고
그건 아는데.. 그럼 저기서 sociallogin을 왜 import한거죠? sociallogin은 그냥 함수틀만 정의된 추상클래스인데..
다른데서 선언된거니깐(아예다른클래스파일이니깐) 명시해두는거임
import를 해줌으로써 컴파일러가 패키지 경로를 다 안써도 쓸 수 잇게 해주