목록개발 (194)
파파비의 블로그
try-catch는 생략했다. 여기서 body 부분에 자꾸 json.encode 를 빼먹고 고생을 했다. 절대 까먹지 말자.
데이터를 지우는 것은 직관적이고 쉽다. 해당 url를 제공하고, 여기 지워줘! 하면 끝이다. 물론 try-catch나 error 처리를 해주면서 말이다. Optimistic Updating 하지만, 그것보다 더 발전된 형태가 있는데, Optimistic Updating이란 방법이다. 데이터를 지울 때는 보통 기기 메모리 내부적으로도 지우고, db상에서도 지운다 메모리 내부 data를 지우고나서, 그리고 db상 지우는게 실패할 경우 띠용?하는 상황이 생긴다. 그래서 지웠던 data를 다시 살릴 수 있도록 장치를 해두는 것이 "Optimistic Updating"이다. 여기 코드를 보자. 1. 먼저 url은 정확한 타겟을 가르킨다. id를 동적으로 제공하면서 말이다. 2. 그 다음 덩어리는, 지우려는 아이템..
1. url이 동적으로 바뀌면서 final로 표시를 바꾸었다. 2. patch는 data를 보내는 것이기에 보낼 data를 지정하는 body 부분을 채워넣어야 한다. - 이 때 역시, Map을 encode해서 보내면 된다. 3. patch는 업데이트 형식이라서, 새로운 data는 추가되고, 있던 data는 덮어쓰기가 된다. - 따라서 저기서 key값을 잘못입력해서 기존 key와 다르다면 data는 새로 추가되며, - isFavorite에 관한 데이터는 추가하지 않는데, 그래서 그냥 db상에 그대로 존재하게 된다. (보낸 부분들만 업데이트 되거나 덮어써지거나 한다. 안건드린 것들은 그대로 남아있는다) 4. asyn, await을 절대 잊지 말며 그에 따른 try-catch 역시 잊지 말라 (여기선 생략함)
RefreshIndicator 라는 위젯을 사용하면 된다. 이렇게 될 경우 아래로 내리면 자동으로 스피너가 등장하고, 계속 돌아간다. OnRefresh를 꼭 등록해주어야 하는데, 결과는 Future값을 내야한다. Future의 값이 추후에 나올 때 까지 스피너는 계속 돌아가기 때문이다. 끝.
이것이 fetched된 data를 print한 것이다. 사실 구조는 Map이고, Map안에 Map이 또 들어가 있는 구조이다. 복잡해보이지만 몇가지 팁만 알면 가져오는 것은 식은 죽 먹기. 1. decode할 때, as 으로 해주어야 한다. 우리는 dynamic이 아니라 map인 것을 알지만, Dart는 구조상 그렇지 못하다고 한다. 그래서 실제로 dynamic대신 map으로 했더니 에러가 생겼다. 2. map은 foreach를 돌릴 수 있다. 각 entitiy에 대해 돌리니까, key랑 value를 다 체크할 수 있어서 매우 좋다. - 여기를 통해 원하는 작업을 할 수 있을 것이다. 3. notifyListeners를 절대 잊지 말자.
1. Fetching Data 데이터를 어딘가에서 가져오는 것, 그것은 데이터를 올리는 것 보다 쉽다. 왜냐면 데이터를 첨부할 필요가 없기 때문이다. 여기를 살펴보면, 주의해야할 점은 2가지로 압축된다. 1. async, await을 잘 쓰자. 그리고 얘네들은 try-catch로 무조건 에러 처리를 습관화하자. 2. get은 url만 넣으면 된다. 2. Init & of(context) 위에 저 메소드는 시작할 때 data를 끌고와서 화면을 구성하게 된다. 그럼 언제 실행하는게 좋을까? 당연히 init이 그 역할에 부응한다고 보이지 않는가? 그런데 Provider를 통해 활용하다보니, 우리는 of(context)를 init에 사용하게 된다. 그런데, init이 실행될 때는 context가 완전히 형성된 ..
1) 로딩중인지 아닌지 확인하는 bool 변수를 만든다. 2) future가 시작되면, bool의 값을 바꾸고, setstate을 실현 시킨다. saveform() 함수를 보면 실행 즉시 _isloading 변수가 true로 바뀌고 setstate을 통해 위젯을 다시 빌드한다. (로딩창이 띄워질 것이다) 그다음 then 이후에 완료가 되면 false로 설정하여 그때 이후에 화면이 pop되도록해두었다(잘려서 안보임) 3) 위젯은 bool값에 의해 로딩중일 땐 로딩위젯이 뜨고 그렇지 않을 땐 그냥 위젯들이 나오게 설계를 해둔다. scaffold의 body 속성에 isLoading이라는 변수에 의해 로딩창을 띄울지 본래 위젯들을 띄울지 설정해둔 모습이다.
어떤 메소드를 실행했을 때, 그것의 값이 딜레이가 생긴다면, 어떨까? 예를 들어 네트워크 요청을 했는데, 인터넷이 너무 느려서 응답속도가 느린 것 같은 것을 말한다. 기존 프로그래밍 방식대로라면 그 요청을 받기 위해 기다려야 한다. 반응이 올때까지 말이다. 반응이 매우 늦게 오게 된다면 프로그램은 일정수준동안 멈춰있게 되는데, 그것은 바람직하지 않다. 그래서 우리는 Future라는 개념이 있다. Future는 일단 실행해놓고, 결과는 나중에 다 되면 확인할게! 라고 생각하며 다음 줄의 코드들이 실행된다. 실행해야할 코드들이 다 실행된 뒤, 결과값을 확인한다. 만약 완료가 되었으면 실행되고, 그렇지 않으면 대기하다가 완료가 되면 알아서 실행하게 된다. '알아서 실행된다'는데 무엇이 실행되는것인가? then..