Changes to 0.26.0 (#36)
* serious_python 0.8.4 * flet: 0.25.2 * file_picker: ^8.1.5 * file_picker: 8.1.4 * file_picker: 8.1.5 * file_picker: 8.1.4 * Remove file_picker override * serious_python 0.8.4 * initialize_ctypes and serious_python 0.8.7 (#34) * serious_python: 0.8.6 * Added initialize_ctypes override * serious_python: 0.8.7 * Use Flet package from Git/flutter-extensions * feodor/flutter-extensions * Remove NDK, update minSdkVersion * wakelock_plus: ^1.2.10 * Update gradle.properties * Changes to 0.26.0-dev (#35) * Added support for developer mode * Do not run runPythonApp() in developer mode * Import crtfifi in try..catch * Flet ref changed to `main`
This commit is contained in:
parent
d4bb8781d9
commit
a090ff82dc
|
|
@ -25,7 +25,6 @@ if (flutterVersionName == null) {
|
||||||
android {
|
android {
|
||||||
namespace "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
namespace "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
||||||
compileSdkVersion flutter.compileSdkVersion
|
compileSdkVersion flutter.compileSdkVersion
|
||||||
ndkVersion "25.1.8937393"
|
|
||||||
|
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
jniLibs {
|
jniLibs {
|
||||||
|
|
@ -52,7 +51,7 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
applicationId "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
||||||
minSdkVersion 23
|
minSdkVersion flutter.minSdkVersion
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
org.gradle.jvmargs=-Xmx1536M
|
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ import 'package:serious_python/serious_python.dart';
|
||||||
import 'package:url_strategy/url_strategy.dart';
|
import 'package:url_strategy/url_strategy.dart';
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
|
import "python.dart";
|
||||||
|
|
||||||
{% for dep in cookiecutter.flutter.dependencies %}
|
{% for dep in cookiecutter.flutter.dependencies %}
|
||||||
import 'package:{{ dep }}/{{ dep }}.dart' as {{ dep }};
|
import 'package:{{ dep }}/{{ dep }}.dart' as {{ dep }};
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
@ -23,7 +25,6 @@ const pythonModuleName = "{{ cookiecutter.python_module_name }}";
|
||||||
final hideLoadingPage =
|
final hideLoadingPage =
|
||||||
bool.tryParse("{{ cookiecutter.hide_loading_animation }}".toLowerCase()) ??
|
bool.tryParse("{{ cookiecutter.hide_loading_animation }}".toLowerCase()) ??
|
||||||
true;
|
true;
|
||||||
const errorExitCode = 100;
|
|
||||||
|
|
||||||
List<CreateControlFactory> createControlFactories = [
|
List<CreateControlFactory> createControlFactories = [
|
||||||
{% for dep in cookiecutter.flutter.dependencies %}
|
{% for dep in cookiecutter.flutter.dependencies %}
|
||||||
|
|
@ -31,87 +32,24 @@ List<CreateControlFactory> createControlFactories = [
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
];
|
];
|
||||||
|
|
||||||
const pythonScript = """
|
|
||||||
import certifi, os, runpy, socket, sys, traceback
|
|
||||||
|
|
||||||
os.environ["REQUESTS_CA_BUNDLE"] = certifi.where()
|
|
||||||
os.environ["SSL_CERT_FILE"] = certifi.where()
|
|
||||||
|
|
||||||
# fix for cryptography package
|
|
||||||
os.environ["CRYPTOGRAPHY_OPENSSL_NO_LEGACY"] = "1"
|
|
||||||
|
|
||||||
# fix for: https://github.com/flet-dev/serious-python/issues/85#issuecomment-2065000974
|
|
||||||
os.environ["OPENBLAS_NUM_THREADS"] = "1"
|
|
||||||
|
|
||||||
if os.getenv("FLET_PLATFORM") == "android":
|
|
||||||
import ssl
|
|
||||||
|
|
||||||
def create_default_context(
|
|
||||||
purpose=ssl.Purpose.SERVER_AUTH, *, cafile=None, capath=None, cadata=None
|
|
||||||
):
|
|
||||||
return ssl.create_default_context(
|
|
||||||
purpose=purpose, cafile=certifi.where(), capath=capath, cadata=cadata
|
|
||||||
)
|
|
||||||
|
|
||||||
ssl._create_default_https_context = create_default_context
|
|
||||||
|
|
||||||
out_file = open("{outLogFilename}", "w+", buffering=1)
|
|
||||||
|
|
||||||
callback_socket_addr = os.getenv("FLET_PYTHON_CALLBACK_SOCKET_ADDR")
|
|
||||||
if ":" in callback_socket_addr:
|
|
||||||
addr, port = callback_socket_addr.split(":")
|
|
||||||
callback_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
||||||
callback_socket.connect((addr, int(port)))
|
|
||||||
else:
|
|
||||||
callback_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
||||||
callback_socket.connect(callback_socket_addr)
|
|
||||||
|
|
||||||
sys.stdout = sys.stderr = out_file
|
|
||||||
|
|
||||||
def flet_exit(code=0):
|
|
||||||
callback_socket.sendall(str(code).encode())
|
|
||||||
out_file.close()
|
|
||||||
callback_socket.close()
|
|
||||||
|
|
||||||
sys.exit = flet_exit
|
|
||||||
|
|
||||||
ex = None
|
|
||||||
try:
|
|
||||||
sys.argv = {argv}
|
|
||||||
runpy.run_module("{module_name}", run_name="__main__")
|
|
||||||
except Exception as e:
|
|
||||||
ex = e
|
|
||||||
traceback.print_exception(e)
|
|
||||||
|
|
||||||
sys.exit(0 if ex is None else $errorExitCode)
|
|
||||||
""";
|
|
||||||
|
|
||||||
String outLogFilename = "";
|
String outLogFilename = "";
|
||||||
|
|
||||||
// global vars
|
// global vars
|
||||||
|
List<String> _args = [];
|
||||||
String pageUrl = "";
|
String pageUrl = "";
|
||||||
String assetsDir = "";
|
String assetsDir = "";
|
||||||
String appDir = "";
|
String appDir = "";
|
||||||
Map<String, String> environmentVariables = {};
|
Map<String, String> environmentVariables = {};
|
||||||
|
|
||||||
void main(List<String> args) async {
|
void main(List<String> args) async {
|
||||||
if (!args.contains("--debug")) {
|
_args = args;
|
||||||
// ignore: avoid_returning_null_for_void
|
|
||||||
debugPrint = (String? message, {int? wrapWidth}) => null;
|
|
||||||
}
|
|
||||||
|
|
||||||
await setupDesktop();
|
|
||||||
|
|
||||||
{% for dep in cookiecutter.flutter.dependencies %}
|
|
||||||
{{ dep }}.ensureInitialized();
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
runApp(FutureBuilder(
|
runApp(FutureBuilder(
|
||||||
future: prepareApp(),
|
future: prepareApp(),
|
||||||
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
// OK - start Python program
|
// OK - start Python program
|
||||||
return kIsWeb
|
return kIsWeb || (isDesktopPlatform() && _args.isNotEmpty)
|
||||||
? FletApp(
|
? FletApp(
|
||||||
pageUrl: pageUrl,
|
pageUrl: pageUrl,
|
||||||
assetsDir: assetsDir,
|
assetsDir: assetsDir,
|
||||||
|
|
@ -151,6 +89,19 @@ void main(List<String> args) async {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future prepareApp() async {
|
Future prepareApp() async {
|
||||||
|
if (!_args.contains("--debug")) {
|
||||||
|
// ignore: avoid_returning_null_for_void
|
||||||
|
debugPrint = (String? message, {int? wrapWidth}) => null;
|
||||||
|
} else {
|
||||||
|
_args.remove("--debug");
|
||||||
|
}
|
||||||
|
|
||||||
|
await setupDesktop();
|
||||||
|
|
||||||
|
{% for dep in cookiecutter.flutter.dependencies %}
|
||||||
|
{{ dep }}.ensureInitialized();
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
// web mode - connect via HTTP
|
// web mode - connect via HTTP
|
||||||
pageUrl = Uri.base.toString();
|
pageUrl = Uri.base.toString();
|
||||||
|
|
@ -158,7 +109,22 @@ Future prepareApp() async {
|
||||||
if (routeUrlStrategy == "path") {
|
if (routeUrlStrategy == "path") {
|
||||||
setPathUrlStrategy();
|
setPathUrlStrategy();
|
||||||
}
|
}
|
||||||
|
} else if (_args.isNotEmpty && isDesktopPlatform()) {
|
||||||
|
// developer mode
|
||||||
|
debugPrint("Flet app is running in Developer mode");
|
||||||
|
pageUrl = _args[0];
|
||||||
|
if (_args.length > 1) {
|
||||||
|
var pidFilePath = _args[1];
|
||||||
|
debugPrint("Args contain a path to PID file: $pidFilePath}");
|
||||||
|
var pidFile = await File(pidFilePath).create();
|
||||||
|
await pidFile.writeAsString("$pid");
|
||||||
|
}
|
||||||
|
if (_args.length > 2) {
|
||||||
|
assetsDir = _args[2];
|
||||||
|
debugPrint("Args contain a path assets directory: $assetsDir}");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// production mode
|
||||||
// extract app from asset
|
// extract app from asset
|
||||||
appDir = await extractAssetZip(assetPath, checkHash: true);
|
appDir = await extractAssetZip(assetPath, checkHash: true);
|
||||||
|
|
||||||
|
|
@ -349,15 +315,8 @@ Future<int> getUnusedPort() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isDesktop() {
|
|
||||||
return !kIsWeb &&
|
|
||||||
(defaultTargetPlatform == TargetPlatform.windows ||
|
|
||||||
defaultTargetPlatform == TargetPlatform.macOS ||
|
|
||||||
defaultTargetPlatform == TargetPlatform.linux);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future setupDesktop() async {
|
Future setupDesktop() async {
|
||||||
if (isDesktop()) {
|
if (isDesktopPlatform()) {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
await windowManager.ensureInitialized();
|
await windowManager.ensureInitialized();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
const errorExitCode = 100;
|
||||||
|
|
||||||
|
const pythonScript = """
|
||||||
|
import os, runpy, socket, sys, traceback
|
||||||
|
|
||||||
|
# fix for cryptography package
|
||||||
|
os.environ["CRYPTOGRAPHY_OPENSSL_NO_LEGACY"] = "1"
|
||||||
|
|
||||||
|
# fix for: https://github.com/flet-dev/serious-python/issues/85#issuecomment-2065000974
|
||||||
|
os.environ["OPENBLAS_NUM_THREADS"] = "1"
|
||||||
|
|
||||||
|
def initialize_ctypes():
|
||||||
|
import ctypes.util
|
||||||
|
import os
|
||||||
|
import pathlib
|
||||||
|
import sys
|
||||||
|
|
||||||
|
android_native_lib_dir = os.getenv("ANDROID_NATIVE_LIBRARY_DIR")
|
||||||
|
|
||||||
|
def find_library_override_imp(name: str):
|
||||||
|
if name is None:
|
||||||
|
return None
|
||||||
|
if pathlib.Path(name).exists():
|
||||||
|
return name
|
||||||
|
if sys.platform == "ios":
|
||||||
|
for lf in [
|
||||||
|
f"Frameworks/{name}.framework/{name}",
|
||||||
|
f"Frameworks/lib{name}.framework/lib{name}",
|
||||||
|
]:
|
||||||
|
lib_path = pathlib.Path(sys.executable).parent.joinpath(lf)
|
||||||
|
if lib_path.exists():
|
||||||
|
return str(lib_path)
|
||||||
|
elif android_native_lib_dir:
|
||||||
|
for lf in [f"lib{name}.so", f"{name}.so", name]:
|
||||||
|
lib_path = pathlib.Path(android_native_lib_dir).joinpath(lf)
|
||||||
|
if lib_path.exists():
|
||||||
|
return str(lib_path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
find_library_original = ctypes.util.find_library
|
||||||
|
|
||||||
|
def find_library_override(name):
|
||||||
|
return find_library_override_imp(name) or find_library_original(name)
|
||||||
|
|
||||||
|
ctypes.util.find_library = find_library_override
|
||||||
|
|
||||||
|
CDLL_init_original = ctypes.CDLL.__init__
|
||||||
|
|
||||||
|
def CDLL_init_override(self, name, *args, **kwargs):
|
||||||
|
CDLL_init_original(
|
||||||
|
self, find_library_override_imp(name) or name, *args, **kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
ctypes.CDLL.__init__ = CDLL_init_override
|
||||||
|
|
||||||
|
initialize_ctypes()
|
||||||
|
|
||||||
|
out_file = open("{outLogFilename}", "w+", buffering=1)
|
||||||
|
|
||||||
|
callback_socket_addr = os.getenv("FLET_PYTHON_CALLBACK_SOCKET_ADDR")
|
||||||
|
if ":" in callback_socket_addr:
|
||||||
|
addr, port = callback_socket_addr.split(":")
|
||||||
|
callback_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
callback_socket.connect((addr, int(port)))
|
||||||
|
else:
|
||||||
|
callback_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
callback_socket.connect(callback_socket_addr)
|
||||||
|
|
||||||
|
sys.stdout = sys.stderr = out_file
|
||||||
|
|
||||||
|
def flet_exit(code=0):
|
||||||
|
callback_socket.sendall(str(code).encode())
|
||||||
|
out_file.close()
|
||||||
|
callback_socket.close()
|
||||||
|
|
||||||
|
sys.exit = flet_exit
|
||||||
|
|
||||||
|
ex = None
|
||||||
|
try:
|
||||||
|
import certifi
|
||||||
|
|
||||||
|
os.environ["REQUESTS_CA_BUNDLE"] = certifi.where()
|
||||||
|
os.environ["SSL_CERT_FILE"] = certifi.where()
|
||||||
|
|
||||||
|
if os.getenv("FLET_PLATFORM") == "android":
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
def create_default_context(
|
||||||
|
purpose=ssl.Purpose.SERVER_AUTH, *, cafile=None, capath=None, cadata=None
|
||||||
|
):
|
||||||
|
return ssl.create_default_context(
|
||||||
|
purpose=purpose, cafile=certifi.where(), capath=capath, cadata=cadata
|
||||||
|
)
|
||||||
|
|
||||||
|
ssl._create_default_https_context = create_default_context
|
||||||
|
|
||||||
|
sys.argv = {argv}
|
||||||
|
runpy.run_module("{module_name}", run_name="__main__")
|
||||||
|
except Exception as e:
|
||||||
|
ex = e
|
||||||
|
traceback.print_exception(e)
|
||||||
|
|
||||||
|
sys.exit(0 if ex is None else 100)
|
||||||
|
""";
|
||||||
|
|
@ -6,16 +6,20 @@
|
||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
#include <screen_retriever/screen_retriever_plugin.h>
|
#include <record_linux/record_linux_plugin.h>
|
||||||
|
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
|
||||||
#include <serious_python_linux/serious_python_linux_plugin.h>
|
#include <serious_python_linux/serious_python_linux_plugin.h>
|
||||||
#include <url_launcher_linux/url_launcher_plugin.h>
|
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||||
#include <window_manager/window_manager_plugin.h>
|
#include <window_manager/window_manager_plugin.h>
|
||||||
#include <window_to_front/window_to_front_plugin.h>
|
#include <window_to_front/window_to_front_plugin.h>
|
||||||
|
|
||||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
g_autoptr(FlPluginRegistrar) screen_retriever_registrar =
|
g_autoptr(FlPluginRegistrar) record_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "RecordLinuxPlugin");
|
||||||
screen_retriever_plugin_register_with_registrar(screen_retriever_registrar);
|
record_linux_plugin_register_with_registrar(record_linux_registrar);
|
||||||
|
g_autoptr(FlPluginRegistrar) screen_retriever_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverLinuxPlugin");
|
||||||
|
screen_retriever_linux_plugin_register_with_registrar(screen_retriever_linux_registrar);
|
||||||
g_autoptr(FlPluginRegistrar) serious_python_linux_registrar =
|
g_autoptr(FlPluginRegistrar) serious_python_linux_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "SeriousPythonLinuxPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "SeriousPythonLinuxPlugin");
|
||||||
serious_python_linux_plugin_register_with_registrar(serious_python_linux_registrar);
|
serious_python_linux_plugin_register_with_registrar(serious_python_linux_registrar);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
screen_retriever
|
record_linux
|
||||||
|
screen_retriever_linux
|
||||||
serious_python_linux
|
serious_python_linux
|
||||||
url_launcher_linux
|
url_launcher_linux
|
||||||
window_manager
|
window_manager
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ import Foundation
|
||||||
|
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
import screen_retriever
|
import record_darwin
|
||||||
|
import screen_retriever_macos
|
||||||
import serious_python_darwin
|
import serious_python_darwin
|
||||||
import shared_preferences_foundation
|
import shared_preferences_foundation
|
||||||
import url_launcher_macos
|
import url_launcher_macos
|
||||||
|
|
@ -18,7 +19,8 @@ import window_to_front
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))
|
RecordPlugin.register(with: registry.registrar(forPlugin: "RecordPlugin"))
|
||||||
|
ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin"))
|
||||||
SeriousPythonPlugin.register(with: registry.registrar(forPlugin: "SeriousPythonPlugin"))
|
SeriousPythonPlugin.register(with: registry.registrar(forPlugin: "SeriousPythonPlugin"))
|
||||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,12 @@ dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
serious_python: 0.8.3
|
serious_python: 0.8.7
|
||||||
flet: 0.25.1
|
flet: #0.26.0
|
||||||
|
git:
|
||||||
|
url: https://github.com/flet-dev/flet.git
|
||||||
|
ref: main
|
||||||
|
path: packages/flet
|
||||||
|
|
||||||
path: ^1.9.0
|
path: ^1.9.0
|
||||||
url_strategy: ^0.2.0
|
url_strategy: ^0.2.0
|
||||||
|
|
@ -21,7 +25,7 @@ dependencies:
|
||||||
package_info_plus: ^8.0.2
|
package_info_plus: ^8.0.2
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
wakelock_plus: ^1.2.5
|
wakelock_plus: ^1.2.10
|
||||||
web: ^1.0.0
|
web: ^1.0.0
|
||||||
window_manager: ^0.4.3
|
window_manager: ^0.4.3
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,18 @@
|
||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
#include <screen_retriever/screen_retriever_plugin.h>
|
#include <record_windows/record_windows_plugin_c_api.h>
|
||||||
|
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
|
||||||
#include <serious_python_windows/serious_python_windows_plugin_c_api.h>
|
#include <serious_python_windows/serious_python_windows_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
#include <window_manager/window_manager_plugin.h>
|
#include <window_manager/window_manager_plugin.h>
|
||||||
#include <window_to_front/window_to_front_plugin.h>
|
#include <window_to_front/window_to_front_plugin.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
ScreenRetrieverPluginRegisterWithRegistrar(
|
RecordWindowsPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("ScreenRetrieverPlugin"));
|
registry->GetRegistrarForPlugin("RecordWindowsPluginCApi"));
|
||||||
|
ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
|
||||||
SeriousPythonWindowsPluginCApiRegisterWithRegistrar(
|
SeriousPythonWindowsPluginCApiRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("SeriousPythonWindowsPluginCApi"));
|
registry->GetRegistrarForPlugin("SeriousPythonWindowsPluginCApi"));
|
||||||
UrlLauncherWindowsRegisterWithRegistrar(
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
screen_retriever
|
record_windows
|
||||||
|
screen_retriever_windows
|
||||||
serious_python_windows
|
serious_python_windows
|
||||||
url_launcher_windows
|
url_launcher_windows
|
||||||
window_manager
|
window_manager
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue