라벨이 update인 게시물 표시

Flutter 에서 Parent Widget 강제로 Update 하는 방법

Flutter 에서 이런 경우가 종종 있다. 홈 화면에서 버튼을 터치하면 기능화면으로 이동한다. 홈화면과 기능화면에 각각 포인트의 상황을 나타내는 텍스트가 있다. 기능 화면에서 포인트를 하나 감소 시킨다. 기능 화면 상단의 돌아가기 버튼을 터치하면 홈화면의 포인트로 감소된 상태로 보여야 한다. 하지만 홈 화면의 포인트는 감소 전의 상태로 보인다. parent widget update 로 검색해도 뻘소리만 나온다. 나의 해결 방안은 이렇다. 기능화면에서 버튼 터치를 홈 화면으로 전달한다. 홈 화면에서 전달된 버튼 이벤트의 로직에 포인트 감소를 처리한다. 기능화면 소스는 이렇다 class DangYoungPage extends StatefulWidget { const DangYoungPage ({ super . key , required this .onClosed}); final Function ( bool ) onClosed; @override State < DangYoungPage > createState () => _DangYoungPageState (); } 선언은 이렇게 해야 부모 위젯에 이벤트를 전달할 수 있다. AppBar ( title : Text ( 'dangYoung' . tr ()), backgroundColor : Theme . of ( context ).colorScheme.inversePrimary, centerTitle : true , automaticallyImplyLeading : true , leading : IconButton ( onPressed : () { widget.onClosed( true ); Navigator . pop ( context ); }, icon : const Icon ( Icons .arrow_back), ), ), Scaffold 앱 바의 내용을 변경하고 여기 이벤트를

Flutter 에서 Preview Page 내용 Update 하는 방법

이미지
Flutter 에서 Preview Page 를 Update 해야 하는 경우가 종종 발생한다. 나는 이런 경우가 그렇다. A 는 리스트뷰로 각 아이템들의 내용을 보여준다. B 는 A 의 하단 추가 버튼을 클릭 했을 때 나오는 화면으로 각 아이템 추가한다. 여기서 문제가 발생한다. B 에서 아이템을 추가 한 후 창을 닫으면 A 화면으로 간다. 근데 방금 추가된 아이템이 리스트에 반영이 안되어 있다. Flutter 에서 각 화면 이동을 go_router 를 사용해서 전환하고 있다. 화면 전환간 데이터 전달은 extra 를 사용했다. 하지만 extra 는 한번만 사용 가능하다. 예를 들어 A -> B 로 extra 를 사용했다면 A -> C 에서는 사용할 수 없다. 다른 화면 간에도 데이터 전달을 하려면 params 를 사용해야 한다. 라우터를 생성할 때 이렇게 한다. 전달할 때 refresh 를 문자열로 했다. 전달한 refresh 를 받아줄 변수를 클래스에 추가한다. 이제 클래스 파일 빌드 부분에 다음을 추가해서 가져온 값에 의해 자료가 갱신되도록 추가하자. 화면이 그려질 때 refresh 값이 'true' 이면 이를 'false' 로 변경 한 다음 데이터베이스에서 아이템을 가져와서 리스트를 갱신한다. 여기서 'false' 로 변경하지 않으면 무한 반복 되므로 한번만 실행하도록 사용했습니다. 이제 하위창에서 어떻게 호출하여 갱신을 시키는지 확인해보겠습니다. 이런 방식으로 하면 여러 화면에 걸쳐 파라미터를 전달 할 수 있고 전달된 파라미터 값에 따라 코딩을 할 수 있다. 사용법이 익숙해지면 Flutter 꽤 괜찮은 개발언어가 될 수 있을꺼 같다.

MySQL Multiple rows 를 one query 구현하기

MySQL 에 자료를 갱신할 일이 생겼다. 갱신할 자료를 가져와 배열에 담았다. list = [adm, bay, car, del, ear] 이를 반복하면서 Update 를 했더니 오래 걸린다. 자료가 약 300 ~ 400 개인데 3~4초가 나온다. 검색을 해보니 INSERT INTO tb_temp (a, b, c) VALUES(1, 2, 3) ON DUPLICATE KEY UPDATE c = c + 1 이걸 이용하면 된다고 한다. 뭐 반복문 돌면서 sql 하나의 문자열로 만들었다. 디비 결과는 중복 입력이었다. 다시 검색을 해보니 비교로 사용하는 첫번째 항목은 무조건 Primary 이어야 한다고 한다. 디비의 구조를 변경하였다. 다시 실행해보니 중복 없이 잘 갱신된다. 실행속도도 400개 정도가 1초 이내로 나온다.