При создании мобильных приложений с помощью 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, вы сможете обеспечить удобство и персонализацию взаимодействия с пользователем.
Не забудьте выбрать наиболее подходящий метод с учетом конкретных потребностей вашего приложения. Приятного кодирования!