인프런 커뮤니티 질문&답변

chorokdosi님의 프로필 이미지
chorokdosi

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

플러터 DB(mysql) 값 가져오기

작성

·

1K

0

플러터와 <php,DB(mysql)>을 사용하여 로그인&회원가입을 구현했습니다. 

로그인을 하면 닉네임을 표시하고 싶은데 DB에서 ID에 해당하는 닉네임 값을 어떻게 가져와야할지 모르겠습니다. 

로그인하면 로그인유지는 shared_preferences 사용하여 (id,pw)를 저장했습니다.

 

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요.

해당부분은 mysql과 php단에서 해결하셔야할 문제로 보입니다. 데이터베이스가 백엔드에 존재하는순간 사실상 프론트엔드는 요청을 넣고 결과를 디스플레이하는 역할만 합니다. 서버에 로직이 짜여있다면 api 요청만 하시면 됩니다.

chorokdosi님의 프로필 이미지
chorokdosi
질문자

답변 감사합니다. 

맞게 구현한건지는 모르겠지만 가져오게는 했습니다.  그런데 문제가 수동으로 새로고침?해줘야 닉네임값이 변하던데 자동으로 새로고침은 어떻게 해야할까요?...

 

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요. 프로그래밍에 "자동"이라는 개념은 존재하지 않습니다. 무언가는 트리거를 해줘야합니다.

서버로 요청을 보내기전에 서버에서 먼저 푸쉬가 되도록 하고싶으신거면 Web Socket 쪽을 알아보시면 됩니다.

chorokdosi님의 프로필 이미지
chorokdosi
질문자

아하 그렇군요

저는 로그인하면 바로 닉네임이 보여야하는데 바로 나오지 않고 로그인 후 나오는 화면을 2번~3번 다시 들어간 후에 표시되길래 자동으로 처리되게 코드를 적어야하는줄 알았습니다.  값을 약간 늦게 가져오는거 같은데 어떻게 처리해야할까요 웹 소켓쪽인건가요?

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

그건 웹소켓과 관련이 없을것같고 말씀주신 내용으로만 파악해봤을땐 build를 실행하시는 타이밍의 문제일 것 같습니다. 데이터를 가져온 다음에 build를 실행하도록 코드를 짜야하는데 데이터를 가져온 후 새로 build를 안하거나 미리 build를 하는 경우가 초보분들이 많이 실수하는 부분입니다.

chorokdosi님의 프로필 이미지
chorokdosi
질문자

아하 그런거군요 오늘9시에 확인하고 아직까지도 해결을 못했습니다. 

setState 쓰면 바뀌는줄 알았는데  override해서 setState 안에 넣으니 화면 변화가 없어서 RefreshIndicator 안에 setState불러서 넣고 하니 화면을 밑으로 스크롤하니 값이 변하기는 합니다 하지만 이게 로그인페이지에서 로그인버튼 누르고 이동된페이지에서 바로 로그인된 상태가 안되고 화면을 밑으로 1번 내려야 로그인상태가되는데 닉네임은 가져오지 못합니다 그래서 2번더 화면을 밑으로 당기면 가져오더라고요 어떻게 처리해야할지 잘모르게씁니다. 

RefreshIndicator(

            onRefresh: () async {

              await Future.delayed(Duration(seconds: 3));

              setState(() {

                _load();

                getNamed();

              });

            },

로그인 상태일때 위젯과 로그아웃을떄 위젯은 if문 써서 다르게 보이게 했습니다.

if(loginCheked == 'F')...[

if(loginCheked == 'T')...[

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요. 현재 코드로는 파악이 불가능하나 getNamed나 _load 함수가 비동기가 아닐까하는 생각이 드네요. 한번 확인해보시길 바랍니다.

chorokdosi님의 프로필 이미지
chorokdosi
질문자

네 async가 있습니다. 비동기를 없애야 하는 건가요? 

  _load() async {

Future getNamed() async {

 

SharedPreferences _prefs = await SharedPreferences.getInstance();

SharedPreferences 사용한다고 적어둔거 같습니다.

 

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

미리 답변드린 내용과 같은 이야기인데 비동기가 끝나기전에 build가 실행돼서 그렇습니다~

chorokdosi님의 프로필 이미지
chorokdosi
질문자

감사합니다. 해결했습니다.  비동기 함수에서 변해야할 변수들을 setState를 감싸버리니 해결됬습니다!

두 분 덕분에 저의 고민도 해결되었습니다 저 또한 마찬가지의 실수를 했네요 ㅜㅜ 감사합니다

chorokdosi님의 프로필 이미지
chorokdosi

작성한 질문수

질문하기