[flutter] 플러터(sqflite)에서의 데이터 모델링 방법
Flutter 애플리케이션에서 데이터 모델링은 애플리케이션의 상태를 효과적으로 관리하고 데이터베이스와 상호 작용하는 데 중요한 부분입니다. 이 게시물에서는 Flutter에서 데이터 모델을 어떻게 정의하고 SQFlite를 사용하여 데이터를 저장하고 검색하는지 살펴볼 것입니다.
데이터 모델 정의하기
데이터 모델은 일반적으로 Dart 클래스로 정의됩니다. 예를 들어, 간단한 할 일 목록을 저장하는 데이터 모델을 정의해 보겠습니다.
class Todo {
int id;
String title;
bool isCompleted;
Todo({this.id, this.title, this.isCompleted});
Map<String, dynamic> toMap() {
return {
'id': id,
'title': title,
'isCompleted': isCompleted ? 1 : 0,
};
}
Todo.fromMap(Map<String, dynamic> map) {
id = map['id'];
title = map['title'];
isCompleted = map['isCompleted'] == 1;
}
}
위의 코드에서 Todo
클래스는 할 일을 표현하는 모델을 정의하며, toMap()
및 fromMap()
메서드는 데이터베이스와 상호 작용할 때 사용됩니다.
SQFlite를 사용하여 데이터 저장 및 검색
SQFlite는 플러터에서 SQLite를 사용하기 위한 플러그인으로, 로컬 데이터베이스를 관리하는 데 사용됩니다. 데이터 모델을 사용하여 데이터베이스에 데이터를 저장하고 검색하는 방법은 다음과 같습니다.
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
Future<Database> openDatabase() async {
var documentsDirectory = await getApplicationDocumentsDirectory();
var path = join(documentsDirectory.path, "todo.db");
return openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
await db.execute("CREATE TABLE Todo ("
"id INTEGER PRIMARY KEY,"
"title TEXT,"
"isCompleted INTEGER"
")");
});
}
Future<void> saveTodo(Todo todo) async {
final Database db = await openDatabase();
await db.insert('Todo', todo.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
}
Future<List<Todo>> getTodos() async {
final Database db = await openDatabase();
final List<Map<String, dynamic>> maps = await db.query('Todo');
return List.generate(maps.length, (i) {
return Todo(
id: maps[i]['id'],
title: maps[i]['title'],
isCompleted: maps[i]['isCompleted'] == 1,
);
});
}
위의 코드에서는 openDatabase()
를 통해 데이터베이스를 열고, saveTodo()
를 통해 데이터를 저장하고, getTodos()
를 통해 데이터를 가져오는 방법을 보여줍니다.
이제 Flutter 애플리케이션에서 데이터 모델링 및 SQFlite를 사용하여 데이터를 저장하고 검색하는 방법을 이해했습니다. 데이터 모델링은 애플리케이션의 상태 및 데이터 관리에 있어 중요한 부분이므로, 데이터 모델과 데이터베이스와의 상호 작용을 잘 이해하는 것이 중요합니다.