在移动应用开发中,处理数据是一个非常重要的环节。Flutter 提供了多种方式来处理和存储本地数据,包括使用 SQLite 数据库、SharedPreferences、Hive 等。本章将详细介绍这些方法,并提供相应的示例代码。
SQLite 数据库
SQLite 是一种轻量级的关系型数据库,适合用于存储结构化的数据。在 Flutter 中,可以使用 sqflite 插件来操作 SQLite 数据库。
安装 sqflite 插件
首先,在 pubspec.yaml 文件中添加 sqflite 和 path_provider 插件:
dependencies:
flutter:
sdk: flutter
sqflite: ^2.0.0+3
path_provider: ^2.0.2然后运行 flutter pub get 来安装这些插件。
创建数据库和表
在 Flutter 应用中创建一个数据库和表,可以使用以下步骤:
- 初始化数据库路径。
- 打开或创建数据库。
- 创建表。
// www.javascriptcn.com code example
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
DatabaseHelper._internal();
static Database? _db;
Future<Database> get db async {
if (_db != null) return _db!;
_db = await initDb();
return _db!;
}
Future<Database> initDb() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "my_database.db");
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
return db;
}
void _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE my_table (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)
''');
}
}插入数据
在 Flutter 中插入数据到 SQLite 数据库可以通过以下方式实现:
Future<int> insertData(Map<String, dynamic> data) async {
final db = await DatabaseHelper().db;
return await db.insert("my_table", data);
}查询数据
查询数据可以通过以下方式实现:
Future<List<Map<String, dynamic>>> getAllData() async {
final db = await DatabaseHelper().db;
return await db.query("my_table");
}更新数据
更新数据可以通过以下方式实现:
Future<int> updateData(int id, Map<String, dynamic> data) async {
final db = await DatabaseHelper().db;
return await db.update("my_table", data, where: "id = ?", whereArgs: [id]);
}删除数据
删除数据可以通过以下方式实现:
Future<int> deleteData(int id) async {
final db = await DatabaseHelper().db;
return await db.delete("my_table", where: "id = ?", whereArgs: [id]);
}SharedPreferences
SharedPreferences 是一种轻量级的键值对存储方式,适用于存储简单的配置信息或者少量的数据。
安装 shared_preferences 插件
在 pubspec.yaml 文件中添加 shared_preferences 插件:
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.0.6然后运行 flutter pub get 来安装该插件。
存储数据
使用 SharedPreferences 存储数据可以通过以下方式实现:
// www.javascriptcn.com code example
import 'package:shared_preferences/shared_preferences.dart';
Future<void> saveData(String key, String value) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(key, value);
}
Future<void> saveIntData(String key, int value) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt(key, value);
}
Future<void> saveBoolData(String key, bool value) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool(key, value);
}获取数据
从 SharedPreferences 获取数据可以通过以下方式实现:
// www.javascriptcn.com code example
Future<String?> getData(String key) async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(key);
}
Future<int?> getIntData(String key) async {
final prefs = await SharedPreferences.getInstance();
return prefs.getInt(key);
}
Future<bool?> getBoolData(String key) async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool(key);
}删除数据
删除 SharedPreferences 中的数据可以通过以下方式实现:
Future<void> removeData(String key) async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove(key);
}Hive
Hive 是一种快速、轻量级的 NoSQL 数据库,适合用于存储复杂的数据结构。
安装 hive 插件
在 pubspec.yaml 文件中添加 hive 和 hive_flutter 插件:
dependencies:
flutter:
sdk: flutter
hive: ^2.0.4
hive_flutter: ^1.1.0然后运行 flutter pub get 来安装这些插件。
初始化 Hive
在应用启动时初始化 Hive:
// www.javascriptcn.com code example
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}定义数据模型
定义一个数据模型类,并使用 @HiveType 注解:
// www.javascriptcn.com code example
import 'package:hive/hive.dart';
part 'person.g.dart';
@HiveType(typeId: 0)
class Person extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
int age;
Person(this.name, this.age);
}插入数据
插入数据可以通过以下方式实现:
Future<void> insertPerson(Person person) async {
final box = await Hive.openBox<Person>('persons');
await box.add(person);
}查询数据
查询数据可以通过以下方式实现:
Future<List<Person>> getAllPersons() async {
final box = await Hive.openBox<Person>('persons');
return box.values.toList();
}更新数据
更新数据可以通过以下方式实现:
Future<void> updatePerson(Person person) async {
final box = await Hive.openBox<Person>('persons');
await box.putAt(box.indexOf(person), person);
}删除数据
删除数据可以通过以下方式实现:
Future<void> deletePerson(Person person) async {
final box = await Hive.openBox<Person>('persons');
await box.deleteAt(box.indexOf(person));
}以上就是 Flutter 中本地数据与缓存的相关内容。通过 SQLite、SharedPreferences 和 Hive,我们可以灵活地处理和存储不同类型的本地数据。希望这些示例能够帮助你在实际项目中更好地管理数据。