在Flutter中,使用sqflite
库来操作SQLite数据库是一种常见的做法。为了在创建类时最好地实例化sqflite
db对象,可以采用单例模式来确保整个应用生命周期内只有一个数据库实例。以下是实现这一模式的步骤:
以下是一个简单的示例,展示如何使用单例模式来实例化sqflite
db对象:
import 'package:sqflite/sqflite.dart';
import 'dart:async';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
static Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDatabase();
return _database!;
}
DatabaseHelper._internal();
Future<Database> _initDatabase() async {
return openDatabase(
'my_database.db',
version: 1,
onCreate: _onCreate,
);
}
void _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
)
''');
}
}
在其他类中使用DatabaseHelper
:
class UserRepository {
final Database? _database;
UserRepository(this._database);
Future<void> addUser(String name) async {
final db = await _database!;
await db.insert(
'users',
{'name': name},
);
}
}
Future
和async
/await
来处理并发访问。通过这种方式,你可以确保在整个应用中使用同一个数据库实例,并且能够更好地管理资源和处理并发访问。
领取专属 10元无门槛券
手把手带您无忧上云