1. 思路
- 监听SharedPreferences数据变化:使用
SharedPreferences
提供的监听机制,当特定数据项发生变化时触发同步操作。
- 读取变化的数据:从
SharedPreferences
中读取发生变化的数据。
- 更新SQLite数据库:将读取到的数据更新到SQLite数据库中,确保数据一致性。
2. 关键代码步骤
初始化SharedPreferences和SQLite
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
late SharedPreferences prefs;
late Database database;
Future<void> init() async {
prefs = await SharedPreferences.getInstance();
final databasesPath = await getDatabasesPath();
final path = join(databasesPath, 'example.db');
database = await openDatabase(
path,
version: 1,
onCreate: (Database db, int version) async {
await db.execute('''
CREATE TABLE settings (
id INTEGER PRIMARY KEY,
key TEXT UNIQUE,
value TEXT
)
''');
},
);
}
监听SharedPreferences变化
void listenToSharedPreferences() {
prefs.addListener(() {
// 假设设置项的key为'setting_key'
if (prefs.containsKey('setting_key')) {
String? value = prefs.getString('setting_key');
updateSQLite('setting_key', value);
}
});
}
更新SQLite数据库
Future<void> updateSQLite(String key, String? value) async {
await database.transaction((txn) async {
int count = await txn.rawInsert(
'INSERT OR REPLACE INTO settings (key, value) VALUES (?,?)',
[key, value],
);
print('Number of records inserted or replaced: $count');
});
}
调用初始化和监听方法
void main() async {
await init();
listenToSharedPreferences();
// 应用其他初始化代码
}