목록분류 전체보기 (214)
파파비의 블로그
아주 흔히 있을 법한 Animation을 위해, 플러터는 준비했다. 보편적인 위젯을. AnimatedContainer는 controller와 animation이 따로 필요없다. 그냥 값의 변화를 알아서 감지해서, 알아서 animation 효과를 준다. 어떻게 이루어지는지 잘 살펴보자 controller를 따로 만들어서 붙일 필요없이, duration과, curve만 넣으면 된다 (mixin을 만들고 vsync도 따로 만들필요도 없고, 재생을 언제 이루어지도록 어딘가에 따로 설정할 필요도 없음) 또 Animation 객체도 필요없고, 여기를 보면 height가 경우에 따라 바뀌는데 이렇게 바뀔 때, 알아서 인지해서 animated된 형태로 바뀌게 된다. 최적화가 되는지는 모르겠는데, 기본적으로 설정을 해두..
이전글에서 소개한 manually 애니메이션을 일일히 설정할 때는 단점이 있다. 바로 Listener을 설정해서 Setstate을 계속 돌리는 것이었다. 굉장히 비효율적이고, 우리는 원하는 위젯만 rebuild하고 싶다. 그렇게 해주는 것이 AnimatedBuilder 위젯이다! 설정하는 방법은 전혀 어렵지 않다. Animation이 적용되는 위젯, 즉 원래 같으면 animation레퍼런스를 넣어서 값을 조작해주는 부분의 위젯을 AnimatedBuilder로 감싸면 된다. 몇가지 짚고 넘어가야할 부분들이 있다. 1. Animatedbuilder 속성에서 animation은 그냥 animation 레퍼런스를 넣으면 된다 2. builder에는 context랑 child 객체가 들어간다. 3. child는 ..
윗 사진에서 아랫 사진으로, 또 그 반대로 박스 컨테이너가 크고, 작아질 때 애니메이션을 넣고 싶다고해보자. 근본적으로 어떻게 진행되는지 살펴보고자 한다. 우리가 필요한 것이 2가지이다. 1.컨트롤러 - 시작 방향, 등 애니메이션 자체를 컨트롤함 2.애니메이션 - 어떻게 값을 animate할지 미리 정해진 것. 이것들을 먼저 객체화하자 1. 우리가 하려는 방식의 애니메이션은 Stateful위젯에서 만들어야한다. (다른 방법도 당연히 있다!, 더 쉬운... 하지만 이해를 위해 근본적인 방식에 대해 알아야 한다) 2. AnimationController와 Animation 레퍼런스를 미리 만들어두고, initState에서 객체화한다. - Animation에서 우리는 사이즈를 변경시킬 것이기 때문에 Size라..
1) https://pub.dev/packages/shared_preferences#-installing-tab- shared_preferences | Flutter Package Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android. pub.dev 를 import한다. 얘네는, 유니티에서 playerpref와 같은 역할을 한다. 그러나 사용법이 약간 다른데, 2) 얘네는 객체가 존재하며, futuer메소드라서, async/await을 통해 가져와야 한다. 참고로 map같은 것들은 json으로 인코딩하면 (시리얼라이즈) string값이 되..
자동 로그 아웃 구현은 어렵지 않다. 이미 로그아웃 메소드를 구현해놓은 상태에서, Timer라는 객체를 이용하면 된다. Timer라는 객체는 얼마 시간 후 자동으로 callback이 실행되게 할 수 있다. 만료 시간은 이미 response로 받은 데이터를 활용해서 diferrence를 이용하면 구할 수 있다. 위 코드를 읽어보면 쉽게 이해가 될 것이다. 참고로 알아두어야 할 것은 한번 설정되면 꼭 실행되므로, 그 중간에 로그아웃을 하거나, 하는 이벤트가 생기면 꼭 cancle를 해주어야한다. 그래서 자동로그아웃이 실행되거나 로그아웃을 실행할 때 보면 한번 체크하고, cancle을 외쳐주는 것을 볼 수 있을 것이다.
우리는 product에 그 data를 저장한 userID를 첨부해두었다. 그래서 해당 유저 id를 가진 사람이 data를 요청할 때, 본인의 id가 입력된 product를 받고 싶을 때 활용할 수 있다. 이때 모든 데이터를 받아서 client쪽에서 분류하는 것보다 서버에서 애초에 정리해서 보내주는게 훨씬 좋다. 그렇게 하는 방법은 역시나 서버마다 다르겠지만 firebase의 경우, 위 경우처럼 orderby와 equalTo를 활용하면 된다 해당 기능을 사용하기 위해선 database에 규칙을 이런식으로 넣어놔야하는데, 자세한 내용은 정확히 잘은 모르겠다 ㅠㅠㅠㅠ
여기 데이터베이스 규칙을 보면, 읽고 쓰기 모두 auth가 필요하게끔 설정해두었다. 그래서 이전 글처럼 단순히 로그인만해서는 DB에서 데이터를 가져올 수 없다. 이런 식으로, 발행받은 토큰을 url에 넣어주어야 한다. auth가 null이 되지 않게끔 말이다. 참고로 이런 api는 전부 '서버'별로 다르다는 것을 다시 한번 인식하고 가자! 저렇게 곧장 화면이 켜질 때, 인증받은 토큰이 필요한데, data를 가져올 수 있을까? 일단 이렇게 생성자에 넣었다. 그런데 이들은 앱 어디 부분에서 생성되는가? 바로 맨처음 provider로 생성이된다. Auth와 Provider 모두다 말이다. 우리는 Auth가 먼저 실행된 후 Provider가 Auth에서 데이터를 가져와서 build가 이루어져야 한다. 이렇게 종..
Cascade operator : ".." The ".." syntax invokes a method (or setter or getter) but discards the result, and returns the original receiver instead. 이 코드를 보면 .. 이라는 키워드가 있다. 만약 점이 한게라면, translate 메소드의 return값 최종적으로 도출된다. 하지만 우리는 Matrix4.rotationZ의 return값을 주길 원하고, translate을 통해 내부적인 값만 변경하길 원한다. 이럴때 ..을 쓴다. ..을 쓰면 그 메소드는 실행된 후 return값은 무시된다. 그래서 앞의 메소드의 return 값이 도출된다. 위 코드는 여기 주석하고 같은 의미를 갖는다. 이렇..