commit fd128ba04d8e5391587ee2e0e8ef53ff757b9496 Author: 4831c0 <4831c0@proton.me> Date: Wed Mar 19 19:42:07 2025 +0100 3.1.0+1 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1634a08 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +See [Isar Changelog](https://pub.dev/packages/isar/changelog) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab70e97 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +### Flutter binaries for the [Isar Database](https://github.com/isar/isar) please go there for documentation. \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..64fa15b --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,34 @@ +group 'dev.isar.isar_flutter_libs' +version '1.0' + +buildscript { + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.1' + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 30 + + defaultConfig { + minSdkVersion 16 + } +} + +dependencies { + implementation "androidx.startup:startup-runtime:1.1.1" +} \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0a42638 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Nov 12 16:30:49 CET 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..6942e52 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'isar_flutter_libs' diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4805420 --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/android/src/main/java/dev/isar/isar_flutter_libs/IsarFlutterLibsPlugin.java b/android/src/main/java/dev/isar/isar_flutter_libs/IsarFlutterLibsPlugin.java new file mode 100644 index 0000000..c28ffa3 --- /dev/null +++ b/android/src/main/java/dev/isar/isar_flutter_libs/IsarFlutterLibsPlugin.java @@ -0,0 +1,13 @@ +package dev.isar.isar_flutter_libs; + +import androidx.annotation.NonNull; + +import io.flutter.embedding.engine.plugins.FlutterPlugin; + +public class IsarFlutterLibsPlugin implements FlutterPlugin { + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { } +} diff --git a/android/src/main/jniLibs/arm64-v8a/libisar.so b/android/src/main/jniLibs/arm64-v8a/libisar.so new file mode 100644 index 0000000..cb4e6db Binary files /dev/null and b/android/src/main/jniLibs/arm64-v8a/libisar.so differ diff --git a/android/src/main/jniLibs/armeabi-v7a/libisar.so b/android/src/main/jniLibs/armeabi-v7a/libisar.so new file mode 100644 index 0000000..28e3574 Binary files /dev/null and b/android/src/main/jniLibs/armeabi-v7a/libisar.so differ diff --git a/android/src/main/jniLibs/x86/libisar.so b/android/src/main/jniLibs/x86/libisar.so new file mode 100644 index 0000000..9e304d3 Binary files /dev/null and b/android/src/main/jniLibs/x86/libisar.so differ diff --git a/android/src/main/jniLibs/x86_64/libisar.so b/android/src/main/jniLibs/x86_64/libisar.so new file mode 100644 index 0000000..51790c2 Binary files /dev/null and b/android/src/main/jniLibs/x86_64/libisar.so differ diff --git a/ios/Classes/IsarFlutterLibsPlugin.h b/ios/Classes/IsarFlutterLibsPlugin.h new file mode 100644 index 0000000..f2a658f --- /dev/null +++ b/ios/Classes/IsarFlutterLibsPlugin.h @@ -0,0 +1,4 @@ +#import + +@interface IsarFlutterLibsPlugin : NSObject +@end diff --git a/ios/Classes/IsarFlutterLibsPlugin.m b/ios/Classes/IsarFlutterLibsPlugin.m new file mode 100644 index 0000000..b005a2b --- /dev/null +++ b/ios/Classes/IsarFlutterLibsPlugin.m @@ -0,0 +1,15 @@ +#import "IsarFlutterLibsPlugin.h" +#if __has_include() +#import +#else +// Support project import fallback if the generated compatibility header +// is not copied when this plugin is created as a library. +// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 +#import "isar_flutter_libs-Swift.h" +#endif + +@implementation IsarFlutterLibsPlugin ++ (void)registerWithRegistrar:(NSObject*)registrar { + [SwiftIsarFlutterLibsPlugin registerWithRegistrar:registrar]; +} +@end diff --git a/ios/Classes/SwiftIsarFlutterLibsPlugin.swift b/ios/Classes/SwiftIsarFlutterLibsPlugin.swift new file mode 100644 index 0000000..b4cc232 --- /dev/null +++ b/ios/Classes/SwiftIsarFlutterLibsPlugin.swift @@ -0,0 +1,16 @@ +import Flutter +import UIKit + +public class SwiftIsarFlutterLibsPlugin: NSObject, FlutterPlugin { + public static func register(with registrar: FlutterPluginRegistrar) { + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + result(nil) + } + + public func dummyMethodToEnforceBundling() { + // dummy calls to prevent tree shaking + isar_get_error(0) + } +} diff --git a/ios/Classes/binding.h b/ios/Classes/binding.h new file mode 100644 index 0000000..d827bbe --- /dev/null +++ b/ios/Classes/binding.h @@ -0,0 +1,6 @@ +#include +#include +#include +#include + +char* isar_get_error(uint32_t err); \ No newline at end of file diff --git a/ios/isar.xcframework/Info.plist b/ios/isar.xcframework/Info.plist new file mode 100644 index 0000000..3bf5fa4 --- /dev/null +++ b/ios/isar.xcframework/Info.plist @@ -0,0 +1,40 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64 + LibraryPath + libisar.a + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + libisar.a + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/ios/isar.xcframework/ios-arm64/libisar.a b/ios/isar.xcframework/ios-arm64/libisar.a new file mode 100644 index 0000000..7c92b69 Binary files /dev/null and b/ios/isar.xcframework/ios-arm64/libisar.a differ diff --git a/ios/isar.xcframework/ios-arm64_x86_64-simulator/libisar.a b/ios/isar.xcframework/ios-arm64_x86_64-simulator/libisar.a new file mode 100644 index 0000000..3bf663b Binary files /dev/null and b/ios/isar.xcframework/ios-arm64_x86_64-simulator/libisar.a differ diff --git a/ios/isar_flutter_libs.podspec b/ios/isar_flutter_libs.podspec new file mode 100644 index 0000000..8312e53 --- /dev/null +++ b/ios/isar_flutter_libs.podspec @@ -0,0 +1,17 @@ +Pod::Spec.new do |s| + s.name = 'isar_flutter_libs' + s.version = '1.0.0' + s.summary = 'Flutter binaries for the Isar Database. Needs to be included for Flutter apps.' + s.homepage = 'https://isar.dev' + s.license = { :file => '../LICENSE' } + s.author = { 'Isar' => 'hello@isar.dev' } + + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.public_header_files = 'Classes/**/*.h' + + s.dependency 'Flutter' + s.platform = :ios, '11.0' + s.swift_version = '5.3' + s.vendored_frameworks = 'isar.xcframework' +end diff --git a/lib/isar_flutter_libs.dart b/lib/isar_flutter_libs.dart new file mode 100644 index 0000000..a7bac50 --- /dev/null +++ b/lib/isar_flutter_libs.dart @@ -0,0 +1 @@ +library isar_flutter_libs; diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..4f22a32 --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.10) +set(PROJECT_NAME "isar_flutter_libs") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "isar_flutter_libs_plugin") + +add_library(${PLUGIN_NAME} SHARED + "isar_flutter_libs_plugin.cc" +) +apply_standard_settings(${PLUGIN_NAME}) +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PRIVATE flutter) +target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK) + +# List of absolute paths to libraries that should be bundled with the plugin +set(isar_flutter_libs_bundled_libraries + "${CMAKE_CURRENT_SOURCE_DIR}/libisar.so" + PARENT_SCOPE +) diff --git a/linux/include/isar_flutter_libs/isar_flutter_libs_plugin.h b/linux/include/isar_flutter_libs/isar_flutter_libs_plugin.h new file mode 100644 index 0000000..499bfc8 --- /dev/null +++ b/linux/include/isar_flutter_libs/isar_flutter_libs_plugin.h @@ -0,0 +1,26 @@ +#ifndef FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ +#define FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ + +#include + +G_BEGIN_DECLS + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default"))) +#else +#define FLUTTER_PLUGIN_EXPORT +#endif + +typedef struct _IsarFlutterLibsPlugin IsarFlutterLibsPlugin; +typedef struct { + GObjectClass parent_class; +} IsarFlutterLibsPluginClass; + +FLUTTER_PLUGIN_EXPORT GType isar_flutter_libs_plugin_get_type(); + +FLUTTER_PLUGIN_EXPORT void isar_flutter_libs_plugin_register_with_registrar( + FlPluginRegistrar* registrar); + +G_END_DECLS + +#endif // FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ diff --git a/linux/isar_flutter_libs_plugin.cc b/linux/isar_flutter_libs_plugin.cc new file mode 100644 index 0000000..50cd846 --- /dev/null +++ b/linux/isar_flutter_libs_plugin.cc @@ -0,0 +1,70 @@ +#include "include/isar_flutter_libs/isar_flutter_libs_plugin.h" + +#include +#include +#include + +#include + +#define ISAR_FLUTTER_LIBS_PLUGIN(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), isar_flutter_libs_plugin_get_type(), \ + IsarFlutterLibsPlugin)) + +struct _IsarFlutterLibsPlugin { + GObject parent_instance; +}; + +G_DEFINE_TYPE(IsarFlutterLibsPlugin, isar_flutter_libs_plugin, g_object_get_type()) + +// Called when a method call is received from Flutter. +static void isar_flutter_libs_plugin_handle_method_call( + IsarFlutterLibsPlugin* self, + FlMethodCall* method_call) { + g_autoptr(FlMethodResponse) response = nullptr; + + const gchar* method = fl_method_call_get_name(method_call); + + if (strcmp(method, "getPlatformVersion") == 0) { + struct utsname uname_data = {}; + uname(&uname_data); + g_autofree gchar *version = g_strdup_printf("Linux %s", uname_data.version); + g_autoptr(FlValue) result = fl_value_new_string(version); + response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); + } else { + response = FL_METHOD_RESPONSE(fl_method_not_implemented_response_new()); + } + + fl_method_call_respond(method_call, response, nullptr); +} + +static void isar_flutter_libs_plugin_dispose(GObject* object) { + G_OBJECT_CLASS(isar_flutter_libs_plugin_parent_class)->dispose(object); +} + +static void isar_flutter_libs_plugin_class_init(IsarFlutterLibsPluginClass* klass) { + G_OBJECT_CLASS(klass)->dispose = isar_flutter_libs_plugin_dispose; +} + +static void isar_flutter_libs_plugin_init(IsarFlutterLibsPlugin* self) {} + +static void method_call_cb(FlMethodChannel* channel, FlMethodCall* method_call, + gpointer user_data) { + IsarFlutterLibsPlugin* plugin = ISAR_FLUTTER_LIBS_PLUGIN(user_data); + isar_flutter_libs_plugin_handle_method_call(plugin, method_call); +} + +void isar_flutter_libs_plugin_register_with_registrar(FlPluginRegistrar* registrar) { + IsarFlutterLibsPlugin* plugin = ISAR_FLUTTER_LIBS_PLUGIN( + g_object_new(isar_flutter_libs_plugin_get_type(), nullptr)); + + g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new(); + g_autoptr(FlMethodChannel) channel = + fl_method_channel_new(fl_plugin_registrar_get_messenger(registrar), + "isar_flutter_libs", + FL_METHOD_CODEC(codec)); + fl_method_channel_set_method_call_handler(channel, method_call_cb, + g_object_ref(plugin), + g_object_unref); + + g_object_unref(plugin); +} diff --git a/linux/libisar.so b/linux/libisar.so new file mode 100644 index 0000000..f68a03f Binary files /dev/null and b/linux/libisar.so differ diff --git a/macos/Classes/IsarFlutterLibsPlugin.swift b/macos/Classes/IsarFlutterLibsPlugin.swift new file mode 100644 index 0000000..5493fbb --- /dev/null +++ b/macos/Classes/IsarFlutterLibsPlugin.swift @@ -0,0 +1,19 @@ +import Cocoa +import FlutterMacOS + +public class IsarFlutterLibsPlugin: NSObject, FlutterPlugin { + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel(name: "isar_flutter_libs", binaryMessenger: registrar.messenger) + let instance = IsarFlutterLibsPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "getPlatformVersion": + result("macOS " + ProcessInfo.processInfo.operatingSystemVersionString) + default: + result(FlutterMethodNotImplemented) + } + } +} diff --git a/macos/isar_flutter_libs.podspec b/macos/isar_flutter_libs.podspec new file mode 100644 index 0000000..0824415 --- /dev/null +++ b/macos/isar_flutter_libs.podspec @@ -0,0 +1,17 @@ +Pod::Spec.new do |s| + s.name = 'isar_flutter_libs' + s.version = '1.0.0' + s.summary = 'Flutter binaries for the Isar Database. Needs to be included for Flutter apps.' + s.homepage = 'https://isar.dev' + s.license = { :file => '../LICENSE' } + s.author = { 'Isar' => 'hello@isar.dev' } + + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.public_header_files = 'Classes/**/*.h' + + s.dependency 'FlutterMacOS' + s.platform = :osx, '10.11' + s.swift_version = '5.3' + s.vendored_libraries = 'libisar.dylib' +end \ No newline at end of file diff --git a/macos/libisar.dylib b/macos/libisar.dylib new file mode 100644 index 0000000..fbb16f0 Binary files /dev/null and b/macos/libisar.dylib differ diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..0a7a275 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,30 @@ +name: isar_flutter_libs +description: Isar Core binaries for the Isar Database. Needs to be included for Flutter apps. +version: 3.1.0+1 +repository: https://github.com/isar/isar +homepage: https://isar.dev + +environment: + sdk: ">=2.17.0 <3.0.0" + flutter: ">=3.0.0" + +dependencies: + flutter: + sdk: flutter + isar: + path: ../isar + +flutter: + plugin: + platforms: + android: + package: dev.isar.isar_flutter_libs + pluginClass: IsarFlutterLibsPlugin + ios: + pluginClass: IsarFlutterLibsPlugin + macos: + pluginClass: IsarFlutterLibsPlugin + linux: + pluginClass: IsarFlutterLibsPlugin + windows: + pluginClass: IsarFlutterLibsPlugin diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..5520652 --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.14) +set(PROJECT_NAME "isar_flutter_libs") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "isar_flutter_libs_plugin") + +add_library(${PLUGIN_NAME} SHARED + "isar_flutter_libs_plugin.cpp" +) +apply_standard_settings(${PLUGIN_NAME}) +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL) +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin) + +# List of absolute paths to libraries that should be bundled with the plugin +set(isar_flutter_libs_bundled_libraries + "${CMAKE_CURRENT_SOURCE_DIR}/isar.dll" + PARENT_SCOPE +) diff --git a/windows/include/isar_flutter_libs/isar_flutter_libs_plugin.h b/windows/include/isar_flutter_libs/isar_flutter_libs_plugin.h new file mode 100644 index 0000000..d0c066d --- /dev/null +++ b/windows/include/isar_flutter_libs/isar_flutter_libs_plugin.h @@ -0,0 +1,23 @@ +#ifndef FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ +#define FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void IsarFlutterLibsPluginRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_ISAR_FLUTTER_LIBS_PLUGIN_H_ diff --git a/windows/isar.dll b/windows/isar.dll new file mode 100644 index 0000000..a0c15f4 Binary files /dev/null and b/windows/isar.dll differ diff --git a/windows/isar_flutter_libs_plugin.cpp b/windows/isar_flutter_libs_plugin.cpp new file mode 100644 index 0000000..707b924 --- /dev/null +++ b/windows/isar_flutter_libs_plugin.cpp @@ -0,0 +1,82 @@ +#include "include/isar_flutter_libs/isar_flutter_libs_plugin.h" + +// This must be included before many other Windows headers. +#include + +// For getPlatformVersion; remove unless needed for your plugin implementation. +#include + +#include +#include +#include + +#include +#include +#include + +namespace { + +class IsarFlutterLibsPlugin : public flutter::Plugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar); + + IsarFlutterLibsPlugin(); + + virtual ~IsarFlutterLibsPlugin(); + + private: + // Called when a method is called on this plugin's channel from Dart. + void HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result); +}; + +// static +void IsarFlutterLibsPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarWindows *registrar) { + auto channel = + std::make_unique>( + registrar->messenger(), "isar_flutter_libs", + &flutter::StandardMethodCodec::GetInstance()); + + auto plugin = std::make_unique(); + + channel->SetMethodCallHandler( + [plugin_pointer = plugin.get()](const auto &call, auto result) { + plugin_pointer->HandleMethodCall(call, std::move(result)); + }); + + registrar->AddPlugin(std::move(plugin)); +} + +IsarFlutterLibsPlugin::IsarFlutterLibsPlugin() {} + +IsarFlutterLibsPlugin::~IsarFlutterLibsPlugin() {} + +void IsarFlutterLibsPlugin::HandleMethodCall( + const flutter::MethodCall &method_call, + std::unique_ptr> result) { + if (method_call.method_name().compare("getPlatformVersion") == 0) { + std::ostringstream version_stream; + version_stream << "Windows "; + if (IsWindows10OrGreater()) { + version_stream << "10+"; + } else if (IsWindows8OrGreater()) { + version_stream << "8"; + } else if (IsWindows7OrGreater()) { + version_stream << "7"; + } + result->Success(flutter::EncodableValue(version_stream.str())); + } else { + result->NotImplemented(); + } +} + +} // namespace + +void IsarFlutterLibsPluginRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + IsarFlutterLibsPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +}