목록개발 (194)
파파비의 블로그
앱에서 데이터를 저장하는 방법. 1) 변수를 통한 Memory 에 저장하기 > 끄면 바로 날라가 버림 2) 기기 자체에 저장하는 방법 3) 웹서버에 데이터를 저장하는 방법 그 중에서 3번째를 특히 자세히 보고자 한다. 온라인상으로 data를 저장하는 방식이고, 온라인 상의 database에 저장을 해야 한다. 그러나 database를 다루는 것은 웹서버이므로, 우리는 웹서버와 통신을 통해 database내부의 data들을 CRUD할 수 있다. 그중에서 가장 자주 쓰이는 방식은 HTTP방식을 활용한 REST 방식이다. firebase의 경우에는 웹서버+Database를 엮은 backend서비스인데, 실제로 다른 백엔드를 쓰거나 백엔드를 구축하려면, database를 구축하고, 그 database를 다루는 ..
타당성을 검사하는 방법은 언제하느냐에 따라 2가지로 나눌 수 있다. 1. 매번 어떤 입력이 form으로 들어올 때 마다 할 것이냐 / 2. 마지막에 어떤 버튼을 누르면 할 것이냐 1번을 실행하는 것은 쉽다. Form위젯에 autovalidate 속성을 true로 설정해두면 된다. 디폴트는 false이다. 그러면 어디든 값이 하나라도 들어오거나 없어지면, 즉, 변경이 생기면 모든 Text form field 위젯들의 validator가 작동된다. 2번을 실행하는 것도 쉽다. 일단 당연히 autovalidate은 false여야 하고, form에 연결된 globalkey 위젯 레퍼런스를 통해, .currentState.validate() 을 실행하면 된다. 그러면 모든 TextFormField위젯들의 vali..
Form에서 입력한 값들을 어떻게 가져올까? 가져오는 방법은 어렵지 않다. 1) Form의 Data는 key를 통해 접근한다. - 먼저 GlobalKey(); 를 레퍼런스와 함께 만든다. - 그 뒤에 그 레퍼런스를 Form의 key 속성에 부여한다. - 따로 함수를 만든 뒤, 그 함수에서 레퍼런스.currentstate.save(); 메소드를 실행하면, Form안에 있는 모든 TextFormField의 onSave 속성의 콜백메소드들이 실행된다. 위 메소드를 보면 currtenState.save를 호출한다. 이렇게 되면 각 textformfield에 있는 onsave 메소드들이 작동하게 된다. 2) TextFormField의 onSave속성으로 각 입력값에 접근할 수 있다. TextFormField의 o..
입력을 받는 방법이 여러가지가 있다만, TextField를 다룬 적이 있다. 이것은 controller도 직접 달아야하고, 또 값을 매번 변할 때마다 어딘가에 저장도 따로 해주어야 하며, 특히 input에서 유효한값인지 아닌지도 판별할 때 직접 코딩으로 처리했어야했다. 이런 불편한 작업들을 덜어주는게 있는데, 그래서 더 정교한(?) input 컨트롤을 가능하게 해주는 위젯이 있다. 바로 "Form" 위젯이다. Form위젯은 먼저 형태가 없다. 그냥 컨트롤을 도와주는 위젯이다. 따라서 자식으로 input 관련 위젯을 넣어야 한다. 아래 코드를 살펴보자 간단한 형태다. 여기서 TextFormField는 자동으로 Form위젯과 연결된다. 데코레이션에서 labelText의 역할은 Hint비스무리한 역할로, 입력..
Dismissible에서 스와이프하면 자동으로 사라진다. 그런데 만약 이때 확인/취소 절차를 만들고 싶다면? Dismissible에는 confirmDismiss라는 속성이 있다. 여기에는 메소드가 들어가는데, DismissDirection이 인자로 들어가고, return 값은 Future이다. 여기서 만약 Future 값이 true면 그대로 실행되고, false면 취소가 된다. 여기서는 confirmDismiss에 showDialog를 넣었다. point1) showDialog는 Future을 리턴할 '수' 있기 때문에 우리가 그렇게 되게 하였다. point2) showDialog는 snackbar처럼 Scaffold를 통해 생성하지 않는다. 화면에 기생하는 것은 아니기 때문이다. 그래도 showDial..
스넥바를 보여주는 방법은, 그 화면의 scaffold 에 접근해서 띄우게 하면 된다. Scaffold.of(context)를 하면 해당 위젯에서 제일 가까운 Scaffold로 연결된다. 즉, 자신이 존재하는 화면의 Scaffold에게 접근하는 것이다. Scaffold.of(context).showSnackBar를 실행하고 인수로는 SnackBar위젯을 넣는다. SnackBar위젯은 content인수를 필수로 가지며 Text위젯을 받는다. 장바구니 버튼을 누르면 이렇게 SnackBar가 뜨도록 해두었다. 하단에 잘 뜨는 것을 확인하였다. SnackBar에 duration 속성에 Duration위젯을 설정해두면 뜨는 시간을 조정할 수 있다. SnackBar에 action 속성에 SnackBarAction을 ..
이렇게 스와이프 기능을 넣을 수 있다. 저기서 손을 떼면 저 UI는 위로 올라가면서 사라진다. 기능을 넣는 방법은 매우 쉽다. 저 card 위젯 위로 Dismissiable 위젯을 넣는다. 추가적으로 Key를 꼭 넣어야하며, (valuekey로 하니까 에러 생겨서 위젯을 uniqueKey로 바꿈) 백그라운드로는 color가 아니라, Container를 넣었다는 것이 포인트이다. 컨테이너에 색 밖에 안넣었지만, 거기에 Icon을 넣거나 하면 더 엣지있는 스와이프를 만들 수 있다. 그리고 실제로 저것은 UI만 지워지는 것일뿐, data적으로는 어떠한 변화도 없다. 따라서 OnDismissed를 통해서 해결해주어야 한다. 여기를 보면 여러가지 기능들을 추가했다. Ondismiss로 해당 아이템을 지우도록 da..