728x90

분류 전체보기 72

[Node] firebase 연동해서 fcm 사용하기

fcm 을 처음에는 코프링으로 구현하다가, App Check 가 스프링에서는 구현이 안된다는 이슈로 node 로 다시 구현하기 시작했다. 내가 구현한 기능은 조금 많고 복잡하다. 내가 실력이 부족한건지, 아님 공통으로 줄일 수 있는데, 내가 못줄인것인지,, 이렇게 작성해놓으면 , 미래의 내가 보고 깨달음을 주겠지! 참고로 이게시글에는 백엔드 관련해서만 작성하겠다! 왜냐, node 를 하면서 오랜만에 백엔드 비즈니스 로직을 작성을 했고, 그 흐름을 잊어버리지 않기 위함이다. 1. 데이터베이스는 fcm 예약 DB, fcm 히스토리 DB 2개 존재한다. 토큰, 주제 의 전송방식으로 즉시 전송과 예약 전송 두가지 메소드가 존재한다. 즉시전송! 즉시전송은 바로 fcm 이 전송되기때문에, 전송 성공시 히스토리 DB..

⭐️ 개발/Node 2023.09.12

[Flutter - study] 애니메이션 공부

애니메이션을 사용하는 이유 모바일에서 애니메이션을 추가하는 이유 깔끔 멋진 인터페이스는 더이상 사용자의 관심을 이끌지 못한다. 이에 대한 솔루션이다. 사용자가 통제감을 느끼는지 확인해야한다. 그들의 행동이 영향을 끼친다는 것을 알려줘야하고, 앱은 항상 사용자의 행동에 따른 피드백을 바로 보내줘야한다. 이런 방식으로 사용자가 당신의 앱 사용법을 빠르게 배우고, 앞으로 방문할 횟수가 높아질 것이다. Flutter 에서의 Animation 은 매력이 있다. Flutter 는 시각적으로 효율적인 애니메이션을 만드는 완벽한 프레임워크이다. 유일한 한계는 나의 상상력 정도랄까..?? Flutter 의 Animation 종류 💡 Flutter 의 Animation 에는 두가지 종류가 있다. 정의와 차이점 알아보자! ..

같은 포트가 실행중일 때, 포트 죽이기

스프링 프로젝트를 실행하는데 두개의 프로젝트를 동시에 실행하거나, 하나의 프로젝트를 종료했음에도 Port 번호가 이미 사용되어있다고 한다면, 그냥 터미널에서 해당 포트 번호를 종료시켜주면 된다. 에러 Web server failed to start. Port 8080 was already in use. 1. 해당 포트 실행 목록 확인하기! lsof -i tcp:8080 이렇게 하면 8080 은 물론이고 다른 포트번호로 실행되어있는 서버 목록도 리스트로 쫙 출력된다. 2. 해당 포트 죽이기 종료하고 싶은 포트의 PID 를 기억하고 넣어주면 된다. sudo kill -포트번호 PID // sudo kill -1234 PID 3. 완료 Mac 유저라면 비밀번호를 입력하라는 라인이 출력되고 해당 맥북의 비밀 번..

카테고리 없음 2023.09.01

LongPressed, onPressed 버튼 영역 클릭효과 없애기

개발을 진행하다보면, Button() 위젯, Inkwell() 위젯을 사용하는데, 버튼의 영역을 없애고 싶을떄가 있다. 그럴떄 사용하는 방법! 부분적으로 위젯의 테마를 수정하고 싶을때, 해당하는 자식 위젯에 적용해주면 된다. Theme( data: ThemeData( splashColor: Colors.transparent, highlightColor: Colors.transparent, ), child: Button( onPressed: () {}, child: Container(), ), ); 전체 위젯의 테마를 수정하고 싶을때, 최상단인 스크린 위젯이나, main.dart 에 위젯을 적용준다. // main.dart MaterialApp( theme: ThemeData( spalshColor: Co..

FirestoreQueryBuilder 사용하기

참조 FirestoreQueryBuilder class - firestore library - Dart API FirestoreQueryBuilder class Listens to a query and paginates the result in a way that is compatible with infinite scroll views, such as ListView or GridView. FirestoreQueryBuilder will subscribe to the query and obtain the first pageSize items (10 by defau pub.dev FirestoreQueryBuilder 는 개고생을 하고 얼마전에 발견했다. 파이어스토어의 데이터를 futureBuilder 로..

Flutter가 대세다!! 중고나라에서도 플러터 사용한다!!

미디엄 블로그를 즐겨보는데, 중고나라에서도 22년 8월 29일 플러터 프로젝트로 출시완료했다는 글을 읽었다. 대부분의 기업들이 앱을 출시할때, 안드로이드와 IOS 를 둘다 개발해서 출시를 하고, 각각의 개발자들을 두고 있는 것을 알고 있다. 나 역시도 전 회사에서 IOS 개발자와 Android 개발자 한명씩 있었다. 하지만 이제는 트렌드에 따라 하나의 소스로 여러개의 플랫폼을 돌아가게끔 하는 dart 언어의 기반인 Flutter 를 선택한다. 중고나라도 이 점에 매우 매력적으로 느껴서 개발을 진행한 것으로 보인다. 확실히 매력적이다. "One-source UI software Devkit" 이다. 하나의 소스로 여러 플랫폼의 UI 를 그리는 것 만큼, 여러 플랫폼을 신경쓰지 않고, 하나에만 집중이 가능하..

⭐️ 개발 2023.08.08

flutter 라이트, 다크모드 만들기

프로젝트에 추가용으로 간단하게 다크모드 예제를 만들어보겠습니다. import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); static final ValueNotifier themeNotifier = ValueNotifier(ThemeMode.light); @override Widget build(BuildContext context) { return ValueListenableBuilder( valueListenable: themeNotifier, builder: (_, ThemeMode currentMode..

⭐️ 개발 2023.08.08

가로모드 세로모드에 맞게 위젯 설정하기

가로모드와 세로모드에 맞게 위젯을 설정하는 방법을 적어보겠다. Scaffold( body: SizedBox( height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, child: OrientationBuilder( builder: (context, layout) { if (layout == Orientation.landscape) { return const Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text('H'), Text('M'), Text('S'), ]..

⭐️ 개발 2023.08.01

[Error] Execution failed for task ':app:checkDebugDuplicateClasses'.

플러터를 업그레이드 하면서 안드로이드 시뮬레이터를 실행하려는데, 갑자기 처음 보는 에러가 발생했다... 아직은 해결 못하는 점... 에러가 2가지 인데, 클래스가 중복되는 이슈와 gradle 버전이 프로젝트와 맞지 않다는 이슈이다. 해결을 하고 해결방법을 작성해보도록 하겠다. FAILURE: Build completed with 2 failures. 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task ':app:checkDebugDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.task..

Widget Build 후 콜백 함수!!

위젯이 빌드되고 난 후 콜백함수를 받고 싶을 떄가 있다. 나는 위젯이 빌드되고 나서 로그인 여부를 판별해 페이지 이동 시켜주는 코드를 본 적이 있다. 다른 방법으로 사용되는 부분이 있을지 한번 생각해보고 찾아보겠다. WidgetsBinding.instance.addPostFrameCallback((timeStamp) { afterBuild(timeStamp, context); }); void afterBuild(Duration timeStamp, BuildContext context) { }

728x90