add dart client to packages

This commit is contained in:
Neevash Ramdial
2021-01-07 12:09:26 -04:00
parent e7eb0a27f6
commit f28cc91301
160 changed files with 26368 additions and 0 deletions
@@ -0,0 +1,64 @@
import 'dart:io';
import 'dart:isolate';
import 'package:flutter/material.dart';
import 'package:moor/ffi.dart';
import 'package:moor/isolate.dart';
import 'package:moor/moor.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:stream_chat/src/db/offline_storage.dart';
class SharedDB {
static constructDatabase(dbName) async {
final dir = await getApplicationDocumentsDirectory();
final path = join(dir.path, dbName);
final file = File(path);
return VmDatabase(file);
}
static Future<MoorIsolate> createMoorIsolate(String userId) async {
WidgetsFlutterBinding.ensureInitialized();
final dir = await getApplicationDocumentsDirectory();
final path = join(dir.path, 'db_$userId.sqlite');
final receivePort = ReceivePort();
await Isolate.spawn(
startBackground,
_IsolateStartRequest(receivePort.sendPort, path),
);
return (await receivePort.first as MoorIsolate);
}
static void startBackground(_IsolateStartRequest request) {
final executor = LazyDatabase(() async {
return VmDatabase(File(request.targetPath));
});
final moorIsolate = MoorIsolate.inCurrent(
() => DatabaseConnection.fromExecutor(executor),
);
request.sendMoorIsolate.send(moorIsolate);
}
static Future<OfflineStorage> constructOfflineStorage({
userId,
logger,
}) async {
logger.info('Connecting on background isolate');
final isolate = await createMoorIsolate(userId);
final connection = await isolate.connect();
return OfflineStorage.connect(
connection,
userId,
isolate,
logger,
);
}
}
class _IsolateStartRequest {
final SendPort sendMoorIsolate;
final String targetPath;
_IsolateStartRequest(this.sendMoorIsolate, this.targetPath);
}