프로젝트 진행하면서 삽질내용에 대해 적어놓으려고 한다..
우선 카카오로그인 기능 구현중에 로그인 성공시, 서버에서 response로 유저 정보들을 넘겨주는 구조인데,, response.bodybytes를 jsonDecode를 한후에 생성한 모델에 담아주면 될거라고 생각했었다. (아래 코드처럼)
http.Response response = await http.get(Uri.parse(boardUrl));
List<dynamic> body = jsonDecode(utf8.decode(response.bodyBytes));
var boardModel =
body.map((dynamic item) => BoardModel.fromJson(item)).toList();
그런데 왠지 유저정보쪽은 위와 같은 방법으로 했는데 자꾸 타입에러가 나서 자세히 살펴보니 ,,, response안의 user정보가 map형태로 들어있는 구조였다. (위에서는 response가 map형태라면 내가 원하는 정보는 map 안의 map 형태)
따라서 response["users"]를 변수로 생성하고 이 변수를 생성한 유저모델에 담는 형식으로 만들었더니... 성공...
final response = await repository.kakaoLogin(accessToken);
var user_response = response["user"];
_userModel.value = UserModel.fromJson(user_response);
userModel을 다른 화면에서 써야하니까 이 변수를 get 을 써서 클래스 아래에 선언해 주었다.
var _userModel = UserModel().obs;
UserModel get userModel => _userModel.value;
위의 데이터를 사용하기위해서는 저 변수가 존재하는 getxController를 호출해주기만 하면 된다.
var userModel = Get.find<LoginController>().userModel;
호출한 후, 사용하고 싶은곳에 userModel.유저모델에 선언한 변수 ex) userModel.profile
그리고 이변수가 바뀔때 자동으로 화면에서도 변경되게 하고 싶으면 Obx로 감싸주면 된다. 이방법은 다음 삽질때 올려보도록 하겠음...