[flutter] 플러터(Flutter)에서 사용되는 로컬 데이터 저장 방법은?

플러터는 다양한 방법으로 로컬 데이터를 저장할 수 있습니다. 주요한 방법으로는 다음과 같습니다:

  1. Shared Preferences: Shared Preferences는 가볍고 간단한 키-값 형태로 데이터를 로컬에 저장하기 위한 방법입니다. 이 방법은 앱의 설정 정보나 사용자의 기본 설정과 같은 작은 데이터를 저장하는 데 유용합니다. 예를 들어, 로그인 정보나 테마 설정 등을 저장할 수 있습니다. SharedPreferences 패키지를 사용하여 이 기능을 구현할 수 있습니다.
import 'package:shared_preferences/shared_preferences.dart';

void saveUserLoggedInStatus(bool isLoggedIn) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setBool('isLoggedIn', isLoggedIn);
}

void getUserLoggedInStatus() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
  return isLoggedIn;
}
  1. SQLite 데이터베이스: SQLite는 관계형 데이터베이스로, 플러터 앱에서 데이터를 영구적으로 저장하기 위해 사용할 수 있습니다. 이 방법은 복잡한 데이터 구조를 저장하고 쿼리하는 데 유용합니다. sqflite 패키지를 사용하여 SQLite 데이터베이스를 생성하고 관리할 수 있습니다.
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

void createDatabase() async {
  var databasesPath = await getDatabasesPath();
  String path = join(databasesPath, 'my_database.db');

  Database database = await openDatabase(path, version: 1,
      onCreate: (Database db, int version) async {
    await db.execute('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)');
  });

  return database;
}

void insertUser(String name) async {
  Database database = await createDatabase();
  await database.transaction((txn) async {
    await txn.rawInsert('INSERT INTO users (name) VALUES (?)', [name]);
  });

  database.close();
}

void getUsers() async {
  Database database = await createDatabase();
  List<Map> users = await database.rawQuery('SELECT * FROM users');

  for (var user in users) {
    print('ID: ${user['id']}, Name: ${user['name']}');
  }

  database.close();
}
  1. 파일 시스템: 플러터는 파일 시스템에 데이터를 저장하고 읽어오기 위한 기능을 제공합니다. 이 방법은 대용량의 데이터를 저장하거나 외부 파일과의 상호작용이 필요한 경우에 유용합니다. path_provider 패키지를 사용하여 파일 시스템에 액세스할 수 있습니다.
import 'package:path_provider/path_provider.dart';
import 'dart:io';

void saveDataToFile(String data) async {
  final directory = await getApplicationDocumentsDirectory();
  final file = File('${directory.path}/data.txt');
  await file.writeAsString(data);
}

void readDataFromFile() async {
  final directory = await getApplicationDocumentsDirectory();
  final file = File('${directory.path}/data.txt');
  String data = await file.readAsString();

  print('Data: $data');
}

이러한 방법들 중에서 프로젝트의 요구사항에 맞는 방식을 선택하여 플러터 앱에서 로컬 데이터를 효과적으로 관리할 수 있습니다.