| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 자바 출력 방식
- firebase
- scss
- println
- Clean Architecture
- LLM
- 엡
- abap
- Flutter
- java 콘솔 출력 차이
- nodejs
- 자바스크립트
- java
- ListView
- npm
- UI/UX
- JS
- JQ
- lifecycle
- 자바 포맷 출력
- develop
- riverpod
- DART
- java 출력
- unity
- 배포
- printf
- 단축키
- 앱심사
- react
- Today
- Total
목록2025/10 (32)
guricode
이전에 Data레이어(데이터소스,임플)를 만들었다 ai챗봇모델을 셋팅하고 외부 api를 연결했다. Domain 레이어에서는 비즈니스 규칙을 만들것이다. 첫번째로 대화섹션의 핵심 모델인 챗봇 Entity를 만든다.class ChatMessage { final String role; // 'user' 또는 'assistant' final String content; final DateTime timestamp; const ChatMessage({ required this.role, required this.content, required this.timestamp, }); //(Firebase 저장용) Map toJson() { return { 'role':..
toString()객체를 사람이 읽기 좋은 문자열로. 로그/디버깅에 유용.operator ==동등성 비교 오버라이드. 값 기준 비교가 필요할 때 정의.hashCode객체의 해시값. ==를 값 기준으로 바꾸면, 같은 값 → 같은 hashCode가 되게 오버라이드해야 함.runtimeType런타임 타입 정보. 예: obj.runtimeTypenoSuchMethod(Invocation)존재하지 않는 메서드가 호출됐을 때의 훅. 보통 프록시/동적 위임에 사용.identical(a, b) [최상위 함수]같은 인스턴스(메모리)인지 확인. 값이 같아도 다른 인스턴스면 false.Object.hash / Object.hashAll여러 필드로 안전하게 해시 생성. hashCode 구현에 권장.예: @override in..
자취에 대한 질의응답과 냉장고 레시피를 추천해주는 ai 챗봇을 만들려고한다ai 서비스는 여러가지가 있다open ai, 구글 재미나이, 클로드 등등만들려는 채팅 서비스의 복잡도를 생각해봤을때 그렇게 많은 요구가 필요하지 않다.기능의 범위는 자취팁, 레시피 추천 정도니까 간단하다고 생각한다.구글 재미나이에 무료 할당량이 많기 때문에 재미나이 api를 이용해서 ai채팅 서비스를 만들려고한다.대화 히스토리는 firebase에 저장된다. 일단 프로젝트에 적용하기 위해 의존성 추가를 한다. google_generative_ai: ^0.4.7 flutter pub get을 해준다 이제 재미나이 API 키를 발급받아야한다. Gemini API 키 발급 방법: Google AI Studio 접속: https://ai.g..
Flutter 앱의 커뮤니티 화면에 "전체" 카테고리 탭을 추가하는 과정을 Clean Architecture 패턴을 기반으로 구현해보겠습니다. 이 기능을 통해 사용자는 자신의 지역에 있는 모든 카테고리의 게시글을 한 번에 볼 수 있게 됩니다. 자취의 정석 커뮤니티는 탭이 2depth로 되어있다 메인 카테고리가 있고 서브카테고리가 있어서 이용자가 탭을 선택해서 볼수 있다그런데 디자이너에게 전체탭을 추가해 달라는 요청이 있었다. 그래서 로직을 몇가지 수정하고 전체탭을 추가해야했다.개선 클린 아키텍처 구조lib/├── domain/│ ├── entities/community.dart│ ├── repositories/community_repository.dart│ └── usecases/fetch_c..
커뮤니티 게시판 기능을 만들고 있었는데, 댓글 작성 후에 바로 리스트에 반영이 안되는 문제가 있었다.분명 댓글은 정상적으로 올라가는데, 새로고침을 하기 전까지는 리스트의 댓글 개수가 그대로였다.문제 상황리스트 화면에서 댓글 수를 이렇게 불러오고 있었다.final countFuture = _commentCountFutures.putIfAbsent( x.id, () => ref.read(getCommentCountProvider).call(x.id),);그리고 아래처럼 FutureBuilder로 감싸서 표시했다.FutureBuilder( future: countFuture, builder: (_, snap) { if (snap.connectionState == ConnectionState.wai..
이번에 커뮤니티 수정 삭제 기능을 만들면서 꽤 오래 붙잡고 있었던 문제가 있었다.기능 자체는 잘 작동했는데, 글 작성 후 뒤로 돌아가면 새로 쓴 글이 리스트에 안 보였다.화면은 그대로인데, Firestore에는 데이터가 들어가 있었다.즉, 데이터는 갱신됐지만 UI는 리빌드되지 않은 상태였다.수정 삭제 기능을 만들면서 수정 삭제는 context. pushReplacement를 사용해 게시글 리스트가 보이도록 대체했다. 처음엔 단순히 ref.listen을 사용해서 글이 추가되면 목록이 새로 고쳐지도록 만들었었다.하지만 ref.listen은 빌드 안에서만 사용할 수 있는 메서드다.initState나 dispose처럼 위젯 생명주기 단계에서 쓰면 Riverpod이 에러를 낸다.로그에도 이렇게 찍혔다.ref.li..
요즘 Flutter로 앱 개발하다 보면 Navigator 대신 GoRouter를 많이 쓴다.나도 처음엔 그냥 context.push만 쓰면 되는 줄 알았는데,막상 라우팅 구조가 커지니까 이게 왜 필요한지가 명확하게 느껴졌다.오늘은 이 GoRouter의 기본 원리랑,push, go, pushReplacement 이 세 가지 차이를 정리해봤다.1. 기본 Navigator는 이렇게 동작한다기존 Flutter 내비게이션은 아래 코드처럼 Navigator.push()로 새 화면을 열고Navigator.pop()으로 돌아가는 스택 구조Navigator.push( context, MaterialPageRoute(builder: (context) => DetailScreen()),);이 구조는 간단하지만, 화면이 ..
“글 상세 → 글 수정 → 수정한 글 상세” 이렇게 이동했는데,수정이 끝나고 상세 화면에서 뒤로가기를 누르면 수정 전 글이 보이는 현상.나도 처음엔 Firestore 업데이트가 늦게 반영된 건가 싶었는데,실제로는 데이터 문제가 아니라 라우팅 스택 구조 문제였다.GoRouter나 Navigator는 화면을 이동할 때 “스택” 구조로 쌓인다.즉, push로 이동하면 기존 화면 위에 새로운 화면이 쌓이고,pop을 누르면 그 위에 있는 화면만 제거된다.지금 구조를 보면 이렇다.글 상세글 수정수정한 글 상세 (push 또는 pushReplacement로 이동)이 상태에서 뒤로가기 하면 “글 수정 전 상세”가 그대로 밑에 있어서결국 예전 데이터를 다시 보게 되는 거다.이건 Firestore 캐시나 타이밍 문제가 아..
코드를 짜다 보니 ref.listen을 initState() 안에 넣어뒀는데, 이게 문제였다.ref.listen은 Riverpod이 위젯을 빌드하는 중에만 호출할 수 있는데,initState()는 위젯이 아직 빌드 트리에 올라가기 전이라 Provider랑 연결이 안 돼 있다.그래서 실행하자마자 아래 오류가 터졌다.ref.listen can only be used within the build method of a ConsumerWidgetFailed assertion: 'debugDoingBuild'결국 정리하자면“빌드 전에 ref.listen을 불러서 Riverpod이 감시 대상을 찾을 수 없었던 것”즉, 위젯이 완전히 만들어지기 전에 감시를 걸어서 생긴 구조적인 오류였다. 아래처럼 initState ..
이 글은 Flutter 앱 "자취의 정석"을 iOS와 Android에 배포하며 겪은 문제와 해결 과정을 정리한 것이다. 앱은 Firestore와 Riverpod을 기반으로 한 지역 커뮤니티 + 미션형 성장 시스템이다.1. 배포 전 필수 사이트플랫폼사이트용도iOSApp Store Connect앱 등록 및 심사 관리iOSApple Developer인증서, 키, 프로파일 관리iOSTestFlightiOS 앱 테스트 배포AndroidGoogle Play Console앱 등록, 테스트, 프로덕션 배포공통Firebase ConsoleFirestore, Auth, Analytics 설정공통Flutter 공식 문서빌드 및 배포 가이드2. iOS 배포 과정1단계. 빌드 준비flutter build ipa --releas..