Сохранение локального хранилища во Flutter: простые методы сохранения данных

При создании мобильных приложений с помощью Flutter крайне важно обеспечить сохранение данных, чтобы обеспечить удобство работы с пользователем. Локальное хранилище позволяет хранить данные на устройстве пользователя, делая их доступными даже при закрытии или перезапуске приложения. В этом сообщении блога мы рассмотрим несколько методов сохранения локального хранилища во Flutter, попутно предоставляя примеры кода и разговорные объяснения.

Метод 1: общие настройки
Общие настройки — это простое хранилище пар “ключ-значение”, позволяющее сохранять примитивные типы данных, такие как строки, логические значения, целые числа и числа с плавающей запятой.

Сначала добавьте пакетshared_preferences в файл pubspec.yaml:

dependencies:
  shared_preferences: ^2.0.0

Затем импортируйте пакет в файл Dart:

import 'package:shared_preferences/shared_preferences.dart';

Чтобы сохранить данные в локальном хранилище:

void saveData(String key, dynamic value) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  if (value is String) {
    prefs.setString(key, value);
  } else if (value is bool) {
    prefs.setBool(key, value);
  } else if (value is int) {
    prefs.setInt(key, value);
  } else if (value is double) {
    prefs.setDouble(key, value);
  }
}

Чтобы получить данные из локального хранилища:

dynamic retrieveData(String key) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.get(key);
}

Метод 2: Hive
Hive — это легкая база данных «ключ-значение», которая предлагает быстрое и эффективное локальное хранилище во Flutter. Он поддерживает пользовательские объекты и обеспечивает более высокую производительность, чем общие настройки, для больших наборов данных.

Чтобы использовать Hive, добавьте пакеты hive и hive_flutter в файл pubspec.yaml:

dependencies:
  hive: ^2.0.0
  hive_flutter: ^1.1.0

Инициализируйте Hive в файле main.dart:

void main() async {
  await Hive.initFlutter();
  // Additional initialization code
  runApp(MyApp());
}

Чтобы сохранить данные в локальном хранилище:

void saveData(String boxName, String key, dynamic value) async {
  var box = await Hive.openBox(boxName);
  box.put(key, value);
}

Чтобы получить данные из локального хранилища:

dynamic retrieveData(String boxName, String key) async {
  var box = await Hive.openBox(boxName);
  return box.get(key);
}

Метод 3: SQLite
Если вашему приложению требуется более сложная структура базы данных, SQLite — надежный вариант. Он предоставляет полнофункциональный механизм базы данных, который позволяет эффективно запрашивать данные.

Чтобы использовать SQLite, добавьте пакет sqflite в файл pubspec.yaml:

dependencies:
  sqflite: ^2.0.0
  path: ^2.0.0

Сначала создайте вспомогательный класс базы данных для обработки операций с базой данных:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
  static Future<Database> database() async {
    final dbPath = await getDatabasesPath();
    final path = join(dbPath, 'my_database.db');
    return openDatabase(
      path,
      version: 1,
      onCreate: (db, version) {
        return db.execute(
          'CREATE TABLE my_table (id INTEGER PRIMARY KEY, name TEXT)',
        );
      },
    );
  }
  static Future<void> saveData(String name) async {
    final db = await database();
    await db.insert(
      'my_table',
      {'name': name},
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
  }
  static Future<List<String>> retrieveData() async {
    final db = await database();
    final List<Map<String, dynamic>> maps = await db.query('my_table');
    return List.generate(maps.length, (i) {
      return maps[i]['name'];
    });
  }
}

Чтобы сохранить данные в локальном хранилище:

await DatabaseHelper.saveData('John');

Чтобы получить данные из локального хранилища:

List<String> names = await DatabaseHelper.retrieveData();

В этом сообщении блога мы рассмотрели три метода сохранения локального хранилища во Flutter: общие настройки, Hive и SQLite. Каждый метод имеет свои преимущества в зависимости от сложности ваших данных и требований к производительности. Включив эти методы в свои приложения Flutter, вы сможете обеспечить удобство и персонализацию взаимодействия с пользователем.

Не забудьте выбрать наиболее подходящий метод с учетом конкретных потребностей вашего приложения. Приятного кодирования!