====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를 했죠?