Files
CityCards_Customer_Flutter/lib/localPreference/local_database.dart
2026-02-13 15:27:14 +05:30

98 lines
2.3 KiB
Dart

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class LocalDatabase {
static final LocalDatabase _instance = LocalDatabase._internal();
factory LocalDatabase() => _instance;
LocalDatabase._internal();
static Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDB();
return _database!;
}
Future<Database> _initDB() async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'app_database.db');
return await openDatabase(
path,
version: 1,
onCreate: (db, version) async {
/// ONBOARDING TABLE
await db.execute('''
CREATE TABLE onboarding_state (
id INTEGER PRIMARY KEY,
is_first_time INTEGER NOT NULL,
page INTEGER NOT NULL
)
''');
/// LOGIN TABLE
await db.execute('''
CREATE TABLE login_state (
id INTEGER PRIMARY KEY,
is_logged_in INTEGER NOT NULL
)
''');
/// USER TOKENS TABLE
await db.execute('''
CREATE TABLE user_tokens (
id INTEGER PRIMARY KEY,
access_token TEXT NOT NULL,
refresh_token TEXT NOT NULL,
refresh_token_max_age INTEGER NOT NULL
)
''');
/// USER DETAILS TABLE
await db.execute('''
CREATE TABLE user_details (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
full_name TEXT NOT NULL,
email_address TEXT NOT NULL,
role TEXT NOT NULL,
role_id INTEGER NOT NULL,
profile_image TEXT
)
''');
/// PASS CART TABLE
await db.execute('''
CREATE TABLE pass_cart (
id INTEGER PRIMARY KEY,
city_name TEXT NOT NULL,
hero_image TEXT NOT NULL,
card_type_name TEXT NOT NULL,
card_display_name TEXT NOT NULL,
theme_color INTEGER NOT NULL,
adult_count INTEGER NOT NULL,
child_count INTEGER NOT NULL,
adult_price REAL NOT NULL,
child_price REAL NOT NULL,
validity_duration INTEGER NOT NULL,
total_price REAL NOT NULL,
description TEXT
)
''');
/// CITY TABLE (with city_logo field)
await db.execute('''
CREATE TABLE selected_city (
id INTEGER PRIMARY KEY,
city_id INTEGER,
city_logo TEXT
)
''');
},
);
}
}