我正在开发一款Flutter应用程序。 我正在使用Sqflite插件来将数据保留在设备上。
一切运行良好。我能够保留数据并阅读以显示在列表中。
但是当我关闭App时,数据库丢失了,我不得不再次保留所有数据。
数据库文件是否有可能保存在临时文件夹中,因此在关闭应用程序时将其删除?
请,有人可以帮助我了解我可能会缺少的东西吗?
添加一些代码:
这是我获得数据库的地方
Future<Database> _database;
Future<Database> getDatabase() {
_database ??= _initDatabase();
return _database;
}
Future<Database> _initDatabase() async {
var databasesPath = await getDatabasesPath();
print('databasesPath: $databasesPath');
var dbpath = join(databasesPath, 'paperless.db');
print('dbpath: $dbpath');
// Make sure the directory exists
try {
await Directory(databasesPath).create(recursive: true);
} catch (_) {}
return await openDatabase(
dbpath,
version: 1,
onCreate: (Database db, int version) async {
await db.execute(
'CREATE TABLE $TABLE_ACCOUNTS ($COLUMN_AUTO_ID INTEGER PRIMARY KEY, '
'$COLUMN_ACCOUNT_ID TEXT, '
'$COLUMN_CUSTOMER_PICTURE TEXT, $COLUMN_DOC_FRONT TEXT, '
'$COLUMN_DOC_BACK TEXT, $COLUMN_SIGNATURE TEXT, '
'$COLUMN_GENDER INTEGER, $COLUMN_FIRST_NAME TEXT, '
'$COLUMN_LAST_NAME TEXT, $COLUMN_DOC_TYPE TEXT, '
'$COLUMN_BIRTHDAY TEXT, $COLUMN_DOC_NUMBER TEXT, '
'$COLUMN_DOC_EXPIRATION_DATE TEXT, $COLUMN_ADDRESS TEXT, '
'$COLUMN_ADDRESS2 TEXT, $COLUMN_COUNTRY TEXT, '
'$COLUMN_PROVINCE TEXT, $COLUMN_CITY TEXT, '
'$COLUMN_HAS_JOB TEXT, $COLUMN_SALARY_RANGE TEXT, '
'$COLUMN_JOB_DESIGNATION TEXT, $COLUMN_COMPANY_NAME TEXT, '
'$COLUMN_JOB_TYPE TEXT, $COLUMN_COMPANY_TELEPHONE TEXT, '
'$COLUMN_COMPANY_MONTHLY_INCOME_RANGE TEXT, $COLUMN_COMPANY_OWN_JOB TEXT, '
'$COLUMN_COMPANY_BUSINESS_TYPE TEXT)',
);
},
);
}
当我需要从数据库中获取帐户时,我会使用此方法
Future<List<LowKYCAccount>> getLocalLowKYCAccount() async {
final db = await getDatabase();
var accounts = await db.rawQuery('SELECT * FROM $TABLE_ACCOUNTS');
var accountsList = List<LowKYCAccount>();
accounts.forEach((account) {
LowKYCAccount kycAccount = LowKYCAccount.fromMap(account);
accountsList.add(kycAccount);
});
return accountsList;
}
这是我如何保存数据
Future<LowKYCAccount> saveAccountLocaly(LowKYCAccount account) async {
print('account: $account');
final db = await getDatabase();
await db.transaction((transaction) async {
account.autoId = await transaction.rawInsert(
'INSERT INTO $TABLE_ACCOUNTS($COLUMN_ACCOUNT_ID, $COLUMN_CUSTOMER_PICTURE, $COLUMN_DOC_FRONT, $COLUMN_DOC_BACK, $COLUMN_SIGNATURE, $COLUMN_GENDER, $COLUMN_FIRST_NAME, $COLUMN_LAST_NAME, $COLUMN_DOC_TYPE, $COLUMN_BIRTHDAY, $COLUMN_DOC_NUMBER, $COLUMN_DOC_EXPIRATION_DATE, $COLUMN_ADDRESS, $COLUMN_ADDRESS2, $COLUMN_COUNTRY, $COLUMN_PROVINCE, $COLUMN_CITY, $COLUMN_HAS_JOB, $COLUMN_SALARY_RANGE, $COLUMN_JOB_DESIGNATION, $COLUMN_COMPANY_NAME, $COLUMN_JOB_TYPE, $COLUMN_COMPANY_TELEPHONE, $COLUMN_COMPANY_MONTHLY_INCOME_RANGE, $COLUMN_COMPANY_OWN_JOB, $COLUMN_COMPANY_BUSINESS_TYPE) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
account.toList());
});
//account.autoId = await db.insert(TABLE_ACCOUNTS, account.toMap());
return account;
}
我使用提供程序从UI调用该方法:
Future<void> saveAccountLocaly(LowKYCAccount account) async {
await DBProvider.db
.saveAccountLocaly(account)
.then((account) => _localLowKycAccounts.add(account));
notifyListeners();
}
我正在使用提供程序通过以下方法从用户界面中获取数据:
Future<void> fetchLocalLowKycAccounts() async {
_localLowKycAccounts = await DBProvider.db.getLocalLowKYCAccount();
notifyListeners();
}
第一次选择该应用程序时,我叫从didChangeDependencies()获取数据
由于没有数据,因此我会显示一条消息,通知用户没有数据。
当用户保存一些数据时,将重建UI,显示固定的数据。 但是,关闭应用程序后,这些数据将丢失,就像用户从未插入任何数据一样。