Skip to content

Commit

Permalink
[sqflite_darwin] wip allow concurrent usage using existing plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
alextekartik committed Jan 27, 2024
1 parent 3b30ef9 commit 5be9fca
Show file tree
Hide file tree
Showing 12 changed files with 89 additions and 17 deletions.
11 changes: 4 additions & 7 deletions packages_flutter/sqflite_darwin/lib/sqflite_darwin.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
export 'src/sqflite_darwin_plugin.dart'
show initSqfliteDarwinPlugin, SqfliteDarwinPlugin;

import 'sqflite_darwin_platform_interface.dart';

class SqfliteDarwin {
Future<String?> getPlatformVersion() {
return SqfliteDarwinPlatform.instance.getPlatformVersion();
}
}
// Compat
export 'src/sqflite_darwin.dart' show SqfliteDarwin;
7 changes: 7 additions & 0 deletions packages_flutter/sqflite_darwin/lib/src/sqflite_darwin.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import 'sqflite_darwin_platform_interface.dart';

class SqfliteDarwin {
Future<String?> getPlatformVersion() {
return SqfliteDarwinPlatform.instance.getPlatformVersion();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:sqflite_common/sqlite_api.dart';

import 'sqflite_import.dart';

final DatabaseFactory databaseFactorySqfliteDarwinPlugin =
createDatabaseFactoryDarwinImpl();

/// Creates an FFI database factory
DatabaseFactory createDatabaseFactoryDarwinImpl({String? tag = 'darwin'}) {
return buildDatabaseFactory(
tag: tag,
invokeMethod: (String method, [Object? arguments]) {
throw UnimplementedError();
});
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

import 'sqflite_darwin_platform_interface.dart';

const sqfliteDarwinMethodChannel = MethodChannel('sqflite_darwin');

/// An implementation of [SqfliteDarwinPlatform] that uses method channels.
class MethodChannelSqfliteDarwin extends SqfliteDarwinPlatform {
/// The method channel used to interact with the native platform.
@visibleForTesting
final methodChannel = const MethodChannel('sqflite_darwin');
@override
Future<String?> getPlatformVersion() async {
final version = await methodChannel.invokeMethod<String>('getPlatformVersion');
final version = await sqfliteDarwinMethodChannel
.invokeMethod<String>('getPlatformVersion');
return version;
}
}
21 changes: 21 additions & 0 deletions packages_flutter/sqflite_darwin/lib/src/sqflite_darwin_plugin.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:sqflite_darwin/src/sqflite_darwin_factory.dart';

import 'sqflite_darwin_method_channel.dart';

import 'package:sqflite_common/sqflite.dart';

/// sqflite Plugin registration.
class SqfliteDarwinPlugin {
/// Registers this plugin as the default database factory (if not already set).
static void registerWith() {
databaseFactoryOrNull ??= databaseFactorySqfliteDarwinPlugin;
}
}

/// Invoke a native method
Future<T> invokeMethod<T>(String method, [Object? arguments]) async =>
await sqfliteDarwinMethodChannel.invokeMethod<T>(method, arguments) as T;

void initSqfliteDarwinPlugin() {
databaseFactoryOrNull = databaseFactorySqfliteDarwinPlugin;
}
12 changes: 12 additions & 0 deletions packages_flutter/sqflite_darwin/lib/src/sqflite_import.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// To be imported
// ignore_for_file: deprecated_member_use
export 'package:sqflite_common/src/arg_utils.dart' show argumentsToString;
export 'package:sqflite_common/src/compat.dart' show SqfliteOptions;
export 'package:sqflite_common/src/constant.dart'
show methodOpenDatabase, methodOptions, sqliteErrorCode;
export 'package:sqflite_common/src/dev_utils.dart' show devPrint, devWarning;
export 'package:sqflite_common/src/exception.dart'
show SqfliteDatabaseException;
export 'package:sqflite_common/src/mixin/constant.dart' show methodOpenDatabase;
export 'package:sqflite_common/src/mixin/factory.dart'
show buildDatabaseFactory, SqfliteInvokeHandler;
5 changes: 5 additions & 0 deletions packages_flutter/sqflite_darwin/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ dependencies:
flutter:
sdk: flutter
plugin_platform_interface: ^2.0.2
sqflite_common: '>=2.5.0-1 <4.0.0'

# tmp
dependency_overrides:
sqflite_common:
path: ../../sqflite_common
dev_dependencies:
flutter_test:
sdk: flutter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:sqflite_darwin/sqflite_darwin_method_channel.dart';
import 'package:sqflite_darwin/src/sqflite_darwin_method_channel.dart';

void main() {
TestWidgetsFlutterBinding.ensureInitialized();
Expand All @@ -9,7 +9,8 @@ void main() {
const MethodChannel channel = MethodChannel('sqflite_darwin');

setUp(() {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(
channel,
(MethodCall methodCall) async {
return '42';
Expand All @@ -18,7 +19,8 @@ void main() {
});

tearDown(() {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(channel, null);
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(channel, null);
});

test('getPlatformVersion', () async {
Expand Down
6 changes: 3 additions & 3 deletions packages_flutter/sqflite_darwin/test/sqflite_darwin_test.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:sqflite_darwin/sqflite_darwin.dart';
import 'package:sqflite_darwin/sqflite_darwin_platform_interface.dart';
import 'package:sqflite_darwin/sqflite_darwin_method_channel.dart';
import 'package:sqflite_darwin/src/sqflite_darwin.dart';
import 'package:sqflite_darwin/src/sqflite_darwin_platform_interface.dart';
import 'package:sqflite_darwin/src/sqflite_darwin_method_channel.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';

class MockSqfliteDarwinPlatform
with MockPlatformInterfaceMixin
implements SqfliteDarwinPlatform {

@override
Future<String?> getPlatformVersion() => Future.value('42');
}
Expand Down
10 changes: 10 additions & 0 deletions sqflite_test_app/lib/main_sqflite_darwin.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:flutter/cupertino.dart';
import 'package:sqflite_darwin/sqflite_darwin.dart';
import 'package:sqflite_example/main.dart';

/// Use regular sqflite, overridng to use Darwin iOS and MacOS
void main() {
WidgetsFlutterBinding.ensureInitialized();
initSqfliteDarwinPlugin();
mainExampleApp();
}
3 changes: 3 additions & 0 deletions sqflite_test_app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies:
sqflite: '>=2.0.0-nullsafety.2'
sqflite_common_ffi:
sqflite_common_ffi_async:
sqflite_darwin:
sqflite_example:
path: ../sqflite/example
flutter_web_plugins:
Expand Down Expand Up @@ -64,6 +65,8 @@ dependency_overrides:
path: ../packages_web/sqflite_common_ffi_web
sqflite_common_ffi_async:
path: ../packages/sqflite_common_ffi_async
sqflite_darwin:
path: ../packages_flutter/sqflite_darwin
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec

Expand Down

0 comments on commit 5be9fca

Please sign in to comment.