메모 고정 핀 기능 — 자주 쓰는 메모는 상단 고정

2025. 5. 28. 16:06·Flutter/Flutter 메모 앱 만들기
728x90
반응형

메모가 많아질수록 중요한 메모가 아래로 밀려나는 문제가 생긴다.
이를 해결하는 가장 간단하고 효과적인 방법은 바로 “핀 고정 기능”이다.

이번 글에서는 Flutter로 메모를 상단에 고정시키는 ‘핀’ 기능을 구현하고,
고정된 메모는 위에, 일반 메모는 아래로 정렬해서 보여주는 구조를 만들자.


📌 메모 모델에 isPinned 필드 추가

class Memo {
  final int? id;
  final String content;
  final bool isPinned;

  Memo({this.id, required this.content, this.isPinned = false});

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'content': content,
      'isPinned': isPinned ? 1 : 0,
    };
  }

  factory Memo.fromMap(Map<String, dynamic> map) {
    return Memo(
      id: map['id'],
      content: map['content'],
      isPinned: map['isPinned'] == 1,
    );
  }
}

핀 상태는 DB에 저장할 수 있도록 int 형태로 변환해준다 (0/1).


🗃️ DB 구조 변경

기존 테이블 생성 코드를 수정하여 isPinned 필드를 추가한다.

// 테이블 생성 코드
CREATE TABLE memos (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  content TEXT,
  isPinned INTEGER
)

이미 앱에 DB가 생성된 경우 migration이 필요하거나 앱을 재설치해 테스트 가능.


📍 핀 기능 토글 버튼 만들기

IconButton(
  icon: Icon(
    memo.isPinned ? Icons.push_pin : Icons.push_pin_outlined,
    color: memo.isPinned ? Colors.orange : Colors.grey,
  ),
  onPressed: () async {
    final updated = Memo(
      id: memo.id,
      content: memo.content,
      isPinned: !memo.isPinned,
    );
    await MemoDatabase.updateMemo(updated);
    _loadMemos(); // 새로고침
  },
)

단순히 isPinned 상태를 토글하고 DB에 반영한 뒤 다시 리스트를 불러온다.


🔼 고정 메모 상단 정렬

Future<List<Memo>> fetchMemos() async {
  final db = await database;
  final result = await db.query(
    'memos',
    orderBy: 'isPinned DESC, id DESC', // 고정된 메모 먼저
  );
  return result.map((e) => Memo.fromMap(e)).toList();
}

SQL의 ORDER BY를 이용해 고정된 메모를 먼저 보여주도록 정렬한다.


📱 전체 UI 흐름 요약

  • 메모 모델에 isPinned 추가
  • UI에 핀 아이콘 버튼 배치
  • 토글 → update → setState()
  • DB에서 ORDER BY isPinned로 정렬

🧘 마무리하며

작은 기능이지만, 메모 앱의 사용성을 크게 바꾸는 요소가 바로 이 핀 기능이다.
중

728x90
반응형

'Flutter > Flutter 메모 앱 만들기' 카테고리의 다른 글

다크 모드와 배경 커스터마이징 — 메모에 감성 더하기  (0) 2025.05.28
메모 태그 분류 — 주제별로 필터링하는 법  (4) 2025.05.28
로컬 DB로 저장하기 — sqflite를 활용한 오프라인 저장소  (0) 2025.05.28
메모 CRUD 기능 구현 — 추가, 수정, 삭제 기본기 익히기  (0) 2025.05.28
심플한 메모 UI 구성 — 감성적인 디자인으로 시작하기  (0) 2025.05.28
'Flutter/Flutter 메모 앱 만들기' 카테고리의 다른 글
  • 다크 모드와 배경 커스터마이징 — 메모에 감성 더하기
  • 메모 태그 분류 — 주제별로 필터링하는 법
  • 로컬 DB로 저장하기 — sqflite를 활용한 오프라인 저장소
  • 메모 CRUD 기능 구현 — 추가, 수정, 삭제 기본기 익히기
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RubyOnRails
    flutter기초
    UIUX
    Nextjs
    개발블로그
    캘린더앱
    정적사이트
    감성앱
    코드를걷는사람
    flutter상태관리
    rails보안
    백엔드개발
    flutter게시판
    table_calendar
    Firebase
    flutter개발
    메모앱
    날씨앱
    모바일앱개발
    flutter디자인
    북마크기능
    fluttertips
    UI디자인
    flutter앱개발
    flutterui
    뉴스앱
    openweather
    다크모드
    Flutter
    ActiveRecord
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
메모 고정 핀 기능 — 자주 쓰는 메모는 상단 고정
상단으로

티스토리툴바