[flutter] 플러터(sqflite)를 활용한 간단한 To-Do 앱 만들기

목차

  1. 개요
  2. 설정
  3. 모델 생성
  4. 데이터베이스 헬퍼 클래스 생성
  5. UI 작성
  6. 결론

개요

플러터(Flutter)는 구글에서 개발한 크로스플랫폼 모바일 앱 개발 프레임워크로, sqflite 라이브러리를 사용하여 내장 데이터베이스를 활용할 수 있습니다. 이번 블로그에서는 플러터와 sqflite를 사용하여 간단한 To-Do 앱을 만들어보겠습니다.

설정

먼저, pubspec.yaml 파일에 다음과 같이 sqflite 라이브러리를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.0.0+3

그 후에, flutter pub get 명령어를 실행하여 라이브러리를 다운로드 받습니다.

모델 생성

To-Do 앱에서 사용할 데이터 모델을 생성합니다. 예를 들어, Todo 클래스를 생성하고 필요한 속성(제목, 완료 여부 등)을 정의합니다.

class Todo {
  final int id;
  final String title;
  final bool isCompleted;

  Todo({required this.id, required this.title, required this.isCompleted});

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

  static Todo fromMap(Map<String, dynamic> map) {
    return Todo(
      id: map['id'],
      title: map['title'],
      isCompleted: map['isCompleted'] == 1,
    );
  }
}

데이터베이스 헬퍼 클래스 생성

다음으로, sqflite를 사용하여 데이터베이스와 상호작용하는 헬퍼 클래스를 생성합니다. 이 클래스는 데이터베이스를 열고 닫는 메서드뿐만 아니라, To-Do 항목을 추가, 수정, 삭제하는 기능을 제공합니다.

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'todo.dart';

class DatabaseHelper {
  static Database? _database;

  Future<Database> get database async {
    if (_database != null) {
      return _database!;
    }

    _database = await _initDatabase();
    return _database!;
  }

  Future<Database> _initDatabase() async {
    String path = join(await getDatabasesPath(), 'todo_database.db');
    return openDatabase(
      path,
      version: 1,
      onCreate: (Database db, int version) async {
        await db.execute(
          'CREATE TABLE todos(id INTEGER PRIMARY KEY, title TEXT, isCompleted INTEGER)',
        );
      },
    );
  }

  Future<void> insertTodo(Todo todo) async {
    final db = await database;
    await db.insert('todos', todo.toMap(), conflictAlgorithm: ConflictAlgorithm.replace);
  }

  // 다른 데이터베이스 메서드들 추가...
}

UI 작성

마지막으로, 플러터를 사용하여 To-Do 앱의 사용자 인터페이스를 작성합니다. 이 때, DatabaseHelper 클래스를 사용하여 데이터를 읽거나 쓸 수 있습니다.

import 'package:flutter/material.dart';
import 'todo.dart';
import 'database_helper.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // 앱 빌드
}

결론

위 방법을 통해, 플러터와 sqflite를 사용하여 간단한 To-Do 앱을 만들어보았습니다. 이를 확장하여 더 다양하고 복잡한 기능을 추가할 수 있으며, 내장 데이터베이스를 활용함으로써 오프라인 환경에서도 앱이 데이터를 처리할 수 있습니다.


참고 자료