플러터 구조 분해 할당

김인범's avatar
Jan 13, 2025
플러터 구조 분해 할당
// 1번 방법 (String, int) hello(){ return ("ssar", 1234); } void main() { var (username, password) = hello(); print(username); print(password); } // 2번 방법 ({String username, int password}) hello(){ return (username:"ssar", password:1234); } void main() { var n = hello(); print(n.username); print(n.password); }
두 개를 리턴 할 수 있다.
 

적용 ⇒ 로그인 할 때

response도 넘겨야 하고, 헤더에 토큰도 넘겨야 한다.

예시 로그인 코드들

Future<void> login(String username, String password) async { // 파싱 final body = { "username": username, "password": password, }; // 통신 final (responseBody, accessToken) = await userRepo.findByUsernameAndPassword(body); if (!responseBody["success"]) { ScaffoldMessenger.of(mContext!).showSnackBar( SnackBar(content: Text("로그인 실패 : ${responseBody["errorMessage"]}")), ); return; } // 1. 토큰을 Storage 저장 await secureStorage.write( key: "accessToken", value: accessToken); // I/O << 비동기가 디폴트라서 동기로 묶어줘야 한다. // 2. SessionUser 갱신 Map<String, dynamic> data = responseBody["response"]; state = SessionUser( id: data["id"], username: data["username"], accessToken: accessToken, isLogin: true); // 3. Dio 토큰 세팅 , Dio << 메모리에 저장 dio.options.headers = {"Authorization": accessToken}; //Logger().d(dio.options.headers); Navigator.popAndPushNamed(mContext, "/post/list"); }

repo

//async* >> stream 데이터 받을 때, 계속 받아준다. || 받을 때는 >> yield; Future<(Map<String, dynamic>, String)> findByUsernameAndPassword( Map<String, String> data) async { Response response = await dio.post("/login", data: data); Map<String, dynamic> body = response.data; //Logger().d(body); // test 코드 작성 - 직접해보기 // 토큰꺼내기 String accessToken = ""; try { accessToken = response.headers["Authorization"]![0] ?? ""; //Logger().d(accessToken); } catch (e) {} return (body, accessToken); }
return 에서 body와 accessToken 두개를 돌려주는 것을 알 수 있다.
Share article

taker