Closed abigotado closed 9 months ago
Is package maintained?
Haven't seen this in a while. Is this fixed now?
@krille-chan Hi! Thanks for your answer! No, unfortunately it is still not fixed. And it occurs only on the web
Can you test again with MatrixSdkDatabase?
@krille-chan Sorry for long answering. I've tried to use MatrixSdkDatabase
, but I need some help with setting it up, I can't make it work. So I think, I'm doing something wrong. Could you help me please?
I'm always getting this error:
[Matrix] Initialize client SquadderChat
!!!CRITICAL!!! [Matrix] Client initialization failed - LateInitializationError: Field '_clientBox' has not been initialized.
../dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 294:3 throw_
../packages/matrix/src/database/matrix_sdk_database.dart 43:20 get [_clientBox]
../packages/matrix/src/database/matrix_sdk_database.dart 374:39 <fn>
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5 _async
../packages/matrix/src/database/matrix_sdk_database.dart 372:47 <fn>
../packages/matrix/src/utils/run_benchmarked.dart 33:28 runBenchmarked
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5 _async
../packages/matrix/src/utils/run_benchmarked.dart 24:28 runBenchmarked
../packages/matrix/src/database/matrix_sdk_database.dart 372:7 getClient
../packages/matrix/src/client.dart 1501:44 init
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
../dart-sdk/lib/async/zone.dart 1661:54 runUnary
../dart-sdk/lib/async/future_impl.dart 162:18 handleValue
../dart-sdk/lib/async/future_impl.dart 846:44 handleValueCallback
../dart-sdk/lib/async/future_impl.dart 875:13 _propagateToListeners
../dart-sdk/lib/async/future_impl.dart 647:5 [_completeWithValue]
../dart-sdk/lib/async/future_impl.dart 721:7 <fn>
../dart-sdk/lib/async/zone.dart 1399:13 _rootRun
../dart-sdk/lib/async/zone.dart 1301:19 run
../dart-sdk/lib/async/zone.dart 1233:23 callback
../dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
../dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 181:7 <fn>
[Matrix] Unable to clear database - LateInitializationError: Field '_collection' has not been initialized.
../dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 294:3 throw_
../packages/matrix/src/database/matrix_sdk_database.dart 42:22 get [_collection]
../packages/matrix/src/database/matrix_sdk_database.dart 269:39 clear
../packages/matrix/src/client.dart 1642:23 clear
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
../dart-sdk/lib/async/zone.dart 1661:54 runUnary
../dart-sdk/lib/async/future_impl.dart 162:18 handleValue
../dart-sdk/lib/async/future_impl.dart 846:44 handleValueCallback
../dart-sdk/lib/async/future_impl.dart 875:13 _propagateToListeners
../dart-sdk/lib/async/future_impl.dart 464:9 callback
../dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
../dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
../dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 181:7 <fn>
Here is my my matrix client and db:
@module
abstract class ApiModule {
@preResolve
Future<Database> createDatabase() async {
final DatabaseFactory factory = databaseFactoryFfiWeb;
final Database db = await factory.openDatabase('matrix_db.db');
return db;
}
@preResolve
Future<Client> createMatrixClient(final Database database) async {
final Client client = Client(
'SquadderChat',
// ignore: prefer_final_parameters
databaseBuilder: kIsWeb
? (final Client client) async => MatrixSdkDatabase(
'Matrix Database',
database: database,
)
: FlutterHiveCollectionsDatabase.databaseBuilder,
logLevel: kDebugMode ? Level.verbose : Level.error,
nativeImplementations: kIsWeb
? NativeImplementationsWebWorker(Uri.parse('/'))
: NativeImplementationsIsolate(compute),
);
return client;
}
}
Ah, maybe that's a missunderstanding. Matrix SDK Database uses indexeddb on web and sqflite on io at the moment. I think I found, what is missing. You need to call database.open()
inside your databaseBuilder. A minimal working example for web would be:
Future<DatabaseApi> webDatabaseBuilder(Client client) async {
final database = MatrixSdkDatabase(client.clientName);
await database.open();
return database;
}
@krille-chan Thank you very much! It works now!
I got this error when I was trying to release a version of Fluffychat into my server, If i log out from my current account and log in with another account then I see the previous rooms of my past account, This is my solution, add these lines of source code before logout function:
void deleteDatabase(String dbName) {
html.window.indexedDB!.deleteDatabase(dbName);
}
-----------------------------------------------------
try {
matrix.client.database!.close();
matrix.client.database!.delete();
} catch (e) {
print(e);
}
deleteDatabase(matrix.client.clientName);
When performing
client.logout()
, I always get a database error:Client:
https://github.com/isar/hive/issues/850