목록전체 글 (41)
자라나라

1. build.gradle 수정 App 수준의 build.gradle 파일 속 android{} 안에 아래의 구성을 추가해준다. 데이터바인딩 이용 시 필수! buildFeatures { dataBinding true } 2. RecyclerView 만들기 activity_main.xml에 RecyclerView를 만들어준 후 rv_profile 이라는 id를 줬다. 3. 아이템 클래스 만들기 프로필 리스트를 만들 것이기 때문에 Profiles 라는 이름의 kotlin class 파일 만들어 준다. class Profiles(val photo: Int, val name: String, val age: Int, val job: String) 간단히 프로필사진, 이름, 나이, 직업을 받겠다. photo는 g..

data class dㅎta class는 데이터 보관 목적으로 만든 클래스이다. 데이터 클래스는 프로퍼티에 대한 toString(), hashCode(), equals(), copy(), componentN() 메소드를 자동으로 만들어 준다. 바로 예시를 통해 일반 클래스와 비교해 보자 타입만 다르고 생성자는 같은 일반 클래스와 데이터클래스를 생성하였다. class General(val name: String, val id : Int) data class Data(val name: String, val id : Int) fun main() { val a = General("유리", 111) println(a == General("유리", 111)) println(a.hashCode()) println(a..
오늘은 파일을 이용해볼 것이다. 먼저 의존성에 path_provider 패키지를 추가해주자. 이 패키지는 앱이 설치되어 있는 경로와 임시 폴더의 경로를 찾아준다. main.dart 파일에서도 path_provider와 추가적으로 dart:io 라이브러리도 import 해준다. import 'package:flutter/material.dart'; import 'FileApp클래스가 작성된 다트파일'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Mater..
db를 이용하는 것을 제외하고, 적은양의 데이터를 앱의 데이터를 저장하는 방법은 크게 두 가지이다. 1. 공유 환경설정(shared-preferences) 2. 파일(path_provider) 오늘은 공유 환경설정을 통해 데이터를 저장하는 법을 살펴보겠다. 이 방법은 비교적 크기가 작은 데이터를 저장할 때 쓴다. 사용자가 앱테마를 다크모드로 설정했을 때, 이를 다음 실행 시에도 적용시키는 등의 간단한 환경설정에 주로 쓰인다. 플러터 프로젝트 실행시 기본으로 나타나는 데모앱에 +버튼을 눌러보자. 아무리 눌러도 앱을 종료하고 다시 키면 다시 초기화(0)가 되어있다. 이번엔 shared_preferences 클래스를 이용해, 앱을 다시 시작해도 _counter의 숫자가 저장되게 할 것이다. 우선 의존성에 sh..

kakao developers에서 제공하는 다음(Daum) 책검색 API를 이용하여 간단한 플러터 앱을 만들어 보았다. (DOIT 플러터앱 프로그래밍 책을 참고 하였다.) 우선 JSON 데이터가 어떻게 디코딩 되는지 간단히 알아보자. import 'dart:convert'; void main() { var jsonData = ''' [ {"userName" : "Ray"}, {"age" : 23} ] '''; var decodedList = json.decode(jsonData); print(decodedList is List); // true print(decodedList); // [{userName: Ray}, {age: 23}] var first = decodedList[0]; var second..

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 void main() { var myStream = Stream.fromIterable([1,2,3,4,5]); myStream.listen((x) => print('iterable : $x')); var myStream2 = Stream.periodic(Duration(seconds: 1), (x) => x).take(5); myStream2.listen((x) => print('periodic : $x')); var myStream3 = Stream.fromFuture(getData()); myStream3.listen((x) => print('fromFuture : $x')); } Future getData() async{ ..
저번 글에서 firebase 연동하고 dependencies에 cloud_firestore설치까지 마쳤었다. 하지만 파이어베이스로 어떤 작업을 하기 위해선 firebase_core 패키지도 설치해 주어야한다. 또, 유저등록, 로그인인증 기능 등을 위해 firebase_auth도 설치해주자. 세 가지 모두 설치 됐다면 이제 로그인 기능을 구현해보자! Firebase_core에는 Firebase.initializeApp()이라는 비동기 매서드가 있다 파이어베이스를 쓰려면 늘 이 메서드를 먼저 호출해주어야한다. 이 메서드를 쓰기 위한 준비도 필요하다. main.dart로 가서 'package:firebase_core/firebase_core.dart' 를 먼저 import 해준 뒤, 바로 아래의 void ma..

필요한 부분만 검색해서 쓰다보니 제대로 모르는 거 같아서 따로 정리하는 시간을 가져보겠다! 유튜브의 드림코딩님의 영상을 참고했다 테스트는 https://regexr.com/5mhou 이곳에서~ 그럼 시작 /gra?y/ a가 있거나 없거나 ex) gray gry ++ 웹주소 속 https:// 와 같이 있어도 없어도 되는 애들에 쓰면 좋겠다 /gra*y/ a가 있거나 없거나 많거나 ex) gray gry graay graaay /gra+y/ a가 하나 이상 ex) gray graay graaaaaaay /gra{2,10}y/ a가 2개 이상 10개 이하 /gra{2,}y/ a가 2개 이상 ------------------------------------------여기서 부터 양끝 //은 생략--------..
Form( child:Column( children: [ TextFormField 있는 거임 여러개의 TextFormField를 한 번에 관리하기 위해 Form으로 감싸준 것이다 TextFormField는 username, email , password로 3개이다. border이나 Icon, size 등 기본적인 틀은 다 만들어 놓은 것을 전제로 한다. (password는 obscureText = true로 설정해주는 센스~) 유효성 검사를 위해 TextFormField의 validator argument를 사용한다 예시를 들자면 username에는 validator : (value){ if(value.isEmpty || value.length
오랜만에 글을 쓰게 되었다 올해 2월 퇴사 후 시작한 프로그래밍 공부 요 며칠 이제 7개월이 다 되어가는데 한 게 아무것도 없는 거 같아 허탈한 느낌이 문득 들었다 그렇게 간만에 블로그에 들어와서 보니 나름 성실히 하긴 했네 ㅋㅋ 요즘 포스팅을 안 하긴 했지만 공부는 2~5월 보다 훨씬 열심히 하는 중이다. (사실 5월은 퇴사 후 제대로 놀아 본 적 없다는 핑계로 거의 한달 내내 놀기만 했다 ㅠ) 계속 웹/앱 갈피를 못 잡다가 6월에야 앱개발로 마음을 굳히고 시작한 플러터. 드디어 코딩에 제대로 발을 딛은 순간이다. 작은 기능 하나 구현하고 나니 하루가 지나는 일도 다반사고 에러 해결해보려고 별 짓 다 해보며 몇 시간을 끙끙 앓았는데 결국 그 원인이 아주 사소한 실수일 경우도 종종 있다. 답답하고 자괴감..