Skip to content

Commit bea62ad

Browse files
committed
Ensure offline support works in linux
1 parent 6a3e452 commit bea62ad

File tree

6 files changed

+54
-10
lines changed

6 files changed

+54
-10
lines changed

src/SDK/Language/Flutter.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,18 @@ public function getFiles(): array
207207
],
208208
[
209209
'scope' => 'default',
210-
'destination' => '/lib/src/offline_db.dart',
211-
'template' => 'flutter/lib/src/offline_db.dart.twig',
210+
'destination' => '/lib/src/offline_db_io.dart',
211+
'template' => 'flutter/lib/src/offline_db_io.dart.twig',
212+
],
213+
[
214+
'scope' => 'default',
215+
'destination' => '/lib/src/offline_db_stub.dart',
216+
'template' => 'flutter/lib/src/offline_db_stub.dart.twig',
217+
],
218+
[
219+
'scope' => 'default',
220+
'destination' => '/lib/src/offline_db_web.dart',
221+
'template' => 'flutter/lib/src/offline_db_web.dart.twig',
212222
],
213223
[
214224
'scope' => 'default',

templates/flutter/lib/src/client_offline_mixin.dart.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import 'package:sembast/utils/value_utils.dart';
1010

1111
import 'enums.dart';
1212
import 'exception.dart';
13-
import 'offline_db.dart';
13+
import 'offline_db_stub.dart'
14+
if (dart.library.html) 'offline_db_web.dart'
15+
if (dart.library.io) 'offline_db_io.dart';
1416
import 'response.dart';
1517

1618
class AccessTimestamp {
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import 'package:flutter/foundation.dart';
1+
import 'dart:io';
2+
23
import 'package:sembast/sembast.dart';
34
import 'package:sembast_sqflite/sembast_sqflite.dart';
4-
import 'package:sembast_web/sembast_web.dart';
55
import 'package:sqflite/sqflite.dart' as sqflite;
6+
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
67

78
class OfflineDatabase {
89
static final OfflineDatabase instance = OfflineDatabase._internal();
@@ -12,11 +13,13 @@ class OfflineDatabase {
1213

1314
Future<Database> db() async {
1415
if (_db == null) {
15-
final factory = kIsWeb
16-
? databaseFactoryWeb
17-
: getDatabaseFactorySqflite(sqflite.databaseFactory);
18-
_db = await factory.openDatabase('{{spec.title | caseLower}}.db');
16+
final factory = getDatabaseFactorySqflite(
17+
Platform.isLinux || Platform.isWindows
18+
? databaseFactoryFfi
19+
: sqflite.databaseFactory,
20+
);
21+
_db = await factory.openDatabase('{{ spec.title | caseLower }}.db');
1922
}
2023
return _db!;
2124
}
22-
}
25+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:sembast/sembast.dart';
2+
3+
class OfflineDatabase {
4+
static final OfflineDatabase instance = OfflineDatabase._internal();
5+
6+
OfflineDatabase._internal();
7+
8+
Future<Database> db() async {
9+
throw UnimplementedError();
10+
}
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:sembast/sembast.dart';
2+
import 'package:sembast_web/sembast_web.dart';
3+
4+
class OfflineDatabase {
5+
static final OfflineDatabase instance = OfflineDatabase._internal();
6+
Database? _db;
7+
8+
OfflineDatabase._internal();
9+
10+
Future<Database> db() async {
11+
if (_db == null) {
12+
final factory = databaseFactoryWeb;
13+
_db = await factory.openDatabase('{{ spec.title | caseLower }}.db');
14+
}
15+
return _db!;
16+
}
17+
}

templates/flutter/pubspec.yaml.twig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies:
2323
path: ^1.8.2
2424
sembast: ^3.4.0+6
2525
sembast_sqflite: ^2.1.0+1
26+
sqflite_common_ffi: ^2.2.2
2627
sembast_web: ^2.1.0+4
2728
sqflite: ^2.2.2
2829

0 commit comments

Comments
 (0)