Compare commits
73 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
96bcfdc3c9 | |
|
|
994c584028 | |
|
|
a334ffce32 | |
|
|
2ef869dcb6 | |
|
|
751dd24874 | |
|
|
34c35a5b01 | |
|
|
a471e02725 | |
|
|
f8d79be167 | |
|
|
c3415d600e | |
|
|
dd93c8ae6d | |
|
|
b63cdfe089 | |
|
|
73cae4ec99 | |
|
|
ceaf31531e | |
|
|
fc515f77c5 | |
|
|
dc8a457647 | |
|
|
b5b455d0de | |
|
|
3d0975eb2b | |
|
|
c467094581 | |
|
|
b1c6b15da5 | |
|
|
652bbfa243 | |
|
|
6067841b81 | |
|
|
24d1a7056e | |
|
|
a58c6ffa92 | |
|
|
0ca26dd6b5 | |
|
|
9c399dfaae | |
|
|
f42393a5ae | |
|
|
6377f131b8 | |
|
|
5b39497d20 | |
|
|
e7ecd3baff | |
|
|
6da7a3ae8f | |
|
|
2eb1727362 | |
|
|
e7a3ede0ee | |
|
|
516518871e | |
|
|
6e2e7eebc8 | |
|
|
1f4cb54e9a | |
|
|
0178bd5f23 | |
|
|
0eac4d4c5b | |
|
|
4447012691 | |
|
|
3c41d5cb1c | |
|
|
03d7a63609 | |
|
|
f1c45f90b4 | |
|
|
1d28e0fbdb | |
|
|
b69b87efb3 | |
|
|
1cc0c49f29 | |
|
|
326209fdbf | |
|
|
a88b3b8e48 | |
|
|
14a925be08 | |
|
|
9496a9b3de | |
|
|
7bc5081b00 | |
|
|
e2ab18efdd | |
|
|
0b83309df0 | |
|
|
27a2ec266e | |
|
|
4ffc1adf42 | |
|
|
52d86b3bd3 | |
|
|
50c7144fca | |
|
|
26b3c9a244 | |
|
|
d96ce5a571 | |
|
|
d48614191d | |
|
|
5e1d40c94c | |
|
|
a233de7547 | |
|
|
c25fa1db79 | |
|
|
b6b6f3426f | |
|
|
bd9285b831 | |
|
|
6c78ea8471 | |
|
|
2546c20766 | |
|
|
5a1fc38804 | |
|
|
52ebf16507 | |
|
|
4fa29e6f5d | |
|
|
aadcfb3baa | |
|
|
31dca2b5e5 | |
|
|
417ae1c0c7 | |
|
|
3d3a54c486 | |
|
|
438daea208 |
|
|
@ -7,6 +7,7 @@
|
|||
"org_name": "com.flet",
|
||||
"company_name": "Your Company",
|
||||
"copyright": "Copyright (c) 2023 Your Company",
|
||||
"flutter": null,
|
||||
"sep": "/",
|
||||
"kotlin_dir": "{{ cookiecutter.org_name.replace('.', cookiecutter.sep) }}{{ cookiecutter.sep }}{{ cookiecutter.project_name }}{{ cookiecutter.sep }}",
|
||||
"hide_loading_animation": true,
|
||||
|
|
|
|||
|
|
@ -25,7 +25,13 @@ if (flutterVersionName == null) {
|
|||
android {
|
||||
namespace "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
||||
compileSdkVersion flutter.compileSdkVersion
|
||||
ndkVersion flutter.ndkVersion
|
||||
ndkVersion "25.1.8937393"
|
||||
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
useLegacyPackaging true
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
|
|
@ -41,24 +47,19 @@ android {
|
|||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "{{ cookiecutter.org_name }}.{{ cookiecutter.project_name }}"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
minSdkVersion 23
|
||||
targetSdkVersion flutter.targetSdkVersion
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
|
||||
ndk {
|
||||
abiFilters 'arm64-v8a', 'armeabi-v7a'
|
||||
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,5 +3,6 @@
|
|||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
</manifest>
|
||||
|
|
@ -1,9 +1,33 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<!-- Media access permissions.
|
||||
Android 13 or higher.
|
||||
https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions -->
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<!-- Storage access permissions. Android 12 or lower. -->
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<!-- Geolocator background/foreground service permissions -->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<!-- Google TV -->
|
||||
<uses-feature android:name="android.software.leanback" android:required="false" />
|
||||
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
|
||||
|
||||
<application
|
||||
android:label="{{ cookiecutter.project_name }}"
|
||||
android:label="{{ cookiecutter.product_name }}"
|
||||
android:name="${applicationName}"
|
||||
android:enableOnBackInvokedCallback="true"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.EnableImpeller"
|
||||
android:value="false"/>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
|
|
@ -21,8 +45,9 @@
|
|||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/> <!-- Google TV -->
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- Don't delete the meta-data below.
|
||||
|
|
|
|||
|
|
@ -3,5 +3,6 @@
|
|||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
</manifest>
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
ext.kotlin_version = '1.9.24'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.4.2'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
|
|
@ -10,11 +10,20 @@ pluginManagement {
|
|||
|
||||
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
|
||||
}
|
||||
}
|
||||
|
||||
include ":app"
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.3.1" apply false
|
||||
}
|
||||
|
||||
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
||||
include ":app"
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<true />
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
|
|
@ -42,8 +42,17 @@
|
|||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<true />
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<true />
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true />
|
||||
</dict>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>This app needs access to Audio Recording.</string>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string>This app needs access to location.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ import 'package:path/path.dart' as path;
|
|||
import 'package:serious_python/serious_python.dart';
|
||||
import 'package:url_strategy/url_strategy.dart';
|
||||
|
||||
{% for dep in cookiecutter.flutter.dependencies %}
|
||||
import 'package:{{ dep }}/{{ dep }}.dart' as {{ dep }};
|
||||
{% endfor %}
|
||||
|
||||
const bool isProduction = bool.fromEnvironment('dart.vm.product');
|
||||
|
||||
const assetPath = "app/app.zip";
|
||||
|
|
@ -19,12 +23,21 @@ final hideLoadingPage =
|
|||
const outLogFilename = "out.log";
|
||||
const errorExitCode = 100;
|
||||
|
||||
List<CreateControlFactory> createControlFactories = [
|
||||
{% for dep in cookiecutter.flutter.dependencies %}
|
||||
{{ dep }}.createControl,
|
||||
{% 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: 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
|
||||
|
||||
|
|
@ -79,6 +92,10 @@ void main() async {
|
|||
debugPrint = (String? message, {int? wrapWidth}) => null;
|
||||
}
|
||||
|
||||
{% for dep in cookiecutter.flutter.dependencies %}
|
||||
{{ dep }}.ensureInitialized();
|
||||
{% endfor %}
|
||||
|
||||
runApp(FutureBuilder(
|
||||
future: prepareApp(),
|
||||
builder: (BuildContext context, AsyncSnapshot snapshot) {
|
||||
|
|
@ -89,6 +106,7 @@ void main() async {
|
|||
pageUrl: pageUrl,
|
||||
assetsDir: assetsDir,
|
||||
hideLoadingPage: hideLoadingPage,
|
||||
createControlFactories: createControlFactories
|
||||
)
|
||||
: FutureBuilder(
|
||||
future: runPythonApp(),
|
||||
|
|
@ -107,6 +125,7 @@ void main() async {
|
|||
pageUrl: pageUrl,
|
||||
assetsDir: assetsDir,
|
||||
hideLoadingPage: hideLoadingPage,
|
||||
createControlFactories: createControlFactories
|
||||
);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -138,6 +138,12 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST})
|
|||
endif()
|
||||
endforeach(plugin)
|
||||
|
||||
# Copy the native assets provided by the build.dart from all packages.
|
||||
set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
|
||||
install(DIRECTORY "${NATIVE_ASSETS_DIR}"
|
||||
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
|
||||
COMPONENT Runtime)
|
||||
|
||||
# Fully re-copy the assets directory on each build to avoid having stale files
|
||||
# from a previous install.
|
||||
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
||||
#include <screen_retriever/screen_retriever_plugin.h>
|
||||
#include <serious_python_linux/serious_python_linux_plugin.h>
|
||||
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||
|
|
@ -14,9 +13,6 @@
|
|||
#include <window_to_front/window_to_front_plugin.h>
|
||||
|
||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||
g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin");
|
||||
audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar);
|
||||
g_autoptr(FlPluginRegistrar) screen_retriever_registrar =
|
||||
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin");
|
||||
screen_retriever_plugin_register_with_registrar(screen_retriever_registrar);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_linux
|
||||
screen_retriever
|
||||
serious_python_linux
|
||||
url_launcher_linux
|
||||
|
|
|
|||
|
|
@ -7,19 +7,17 @@
|
|||
|
||||
#include "flutter/generated_plugin_registrant.h"
|
||||
|
||||
struct _MyApplication
|
||||
{
|
||||
struct _MyApplication {
|
||||
GtkApplication parent_instance;
|
||||
char **dart_entrypoint_arguments;
|
||||
char** dart_entrypoint_arguments;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
|
||||
|
||||
// Implements GApplication::activate.
|
||||
static void my_application_activate(GApplication *application)
|
||||
{
|
||||
MyApplication *self = MY_APPLICATION(application);
|
||||
GtkWindow *window =
|
||||
static void my_application_activate(GApplication* application) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
GtkWindow* window =
|
||||
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
|
||||
|
||||
// Use a header bar when running in GNOME as this is the common style used
|
||||
|
|
@ -31,26 +29,21 @@ static void my_application_activate(GApplication *application)
|
|||
// if future cases occur).
|
||||
gboolean use_header_bar = TRUE;
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
GdkScreen *screen = gtk_window_get_screen(window);
|
||||
if (GDK_IS_X11_SCREEN(screen))
|
||||
{
|
||||
const gchar *wm_name = gdk_x11_screen_get_window_manager_name(screen);
|
||||
if (g_strcmp0(wm_name, "GNOME Shell") != 0)
|
||||
{
|
||||
GdkScreen* screen = gtk_window_get_screen(window);
|
||||
if (GDK_IS_X11_SCREEN(screen)) {
|
||||
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
|
||||
if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
|
||||
use_header_bar = FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (use_header_bar)
|
||||
{
|
||||
GtkHeaderBar *header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||
if (use_header_bar) {
|
||||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||
gtk_widget_show(GTK_WIDGET(header_bar));
|
||||
gtk_header_bar_set_title(header_bar, "{{ cookiecutter.product_name }}");
|
||||
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
||||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
gtk_window_set_title(window, "{{ cookiecutter.product_name }}");
|
||||
}
|
||||
|
||||
|
|
@ -60,7 +53,7 @@ static void my_application_activate(GApplication *application)
|
|||
g_autoptr(FlDartProject) project = fl_dart_project_new();
|
||||
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
|
||||
|
||||
FlView *view = fl_view_new(project);
|
||||
FlView* view = fl_view_new(project);
|
||||
gtk_widget_show(GTK_WIDGET(view));
|
||||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
|
||||
|
||||
|
|
@ -70,15 +63,13 @@ static void my_application_activate(GApplication *application)
|
|||
}
|
||||
|
||||
// Implements GApplication::local_command_line.
|
||||
static gboolean my_application_local_command_line(GApplication *application, gchar ***arguments, int *exit_status)
|
||||
{
|
||||
MyApplication *self = MY_APPLICATION(application);
|
||||
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
|
||||
MyApplication* self = MY_APPLICATION(application);
|
||||
// Strip out the first argument as it is the binary name.
|
||||
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
|
||||
|
||||
g_autoptr(GError) error = nullptr;
|
||||
if (!g_application_register(application, nullptr, &error))
|
||||
{
|
||||
if (!g_application_register(application, nullptr, &error)) {
|
||||
g_warning("Failed to register: %s", error->message);
|
||||
*exit_status = 1;
|
||||
return TRUE;
|
||||
|
|
@ -90,25 +81,42 @@ static gboolean my_application_local_command_line(GApplication *application, gch
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// Implements GApplication::startup.
|
||||
static void my_application_startup(GApplication* application) {
|
||||
//MyApplication* self = MY_APPLICATION(object);
|
||||
|
||||
// Perform any actions required at application startup.
|
||||
|
||||
G_APPLICATION_CLASS(my_application_parent_class)->startup(application);
|
||||
}
|
||||
|
||||
// Implements GApplication::shutdown.
|
||||
static void my_application_shutdown(GApplication* application) {
|
||||
//MyApplication* self = MY_APPLICATION(object);
|
||||
|
||||
// Perform any actions required at application shutdown.
|
||||
|
||||
G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application);
|
||||
}
|
||||
|
||||
// Implements GObject::dispose.
|
||||
static void my_application_dispose(GObject *object)
|
||||
{
|
||||
MyApplication *self = MY_APPLICATION(object);
|
||||
static void my_application_dispose(GObject* object) {
|
||||
MyApplication* self = MY_APPLICATION(object);
|
||||
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
|
||||
G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
|
||||
}
|
||||
|
||||
static void my_application_class_init(MyApplicationClass *klass)
|
||||
{
|
||||
static void my_application_class_init(MyApplicationClass* klass) {
|
||||
G_APPLICATION_CLASS(klass)->activate = my_application_activate;
|
||||
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
|
||||
G_APPLICATION_CLASS(klass)->startup = my_application_startup;
|
||||
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown;
|
||||
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
|
||||
}
|
||||
|
||||
static void my_application_init(MyApplication *self) {}
|
||||
static void my_application_init(MyApplication* self) {}
|
||||
|
||||
MyApplication *my_application_new()
|
||||
{
|
||||
MyApplication* my_application_new() {
|
||||
return MY_APPLICATION(g_object_new(my_application_get_type(),
|
||||
"application-id", APPLICATION_ID,
|
||||
"flags", G_APPLICATION_NON_UNIQUE,
|
||||
|
|
|
|||
|
|
@ -5,24 +5,24 @@
|
|||
import FlutterMacOS
|
||||
import Foundation
|
||||
|
||||
import audioplayers_darwin
|
||||
import package_info_plus
|
||||
import path_provider_foundation
|
||||
import screen_retriever
|
||||
import serious_python_darwin
|
||||
import shared_preferences_foundation
|
||||
import url_launcher_macos
|
||||
import wakelock_plus
|
||||
import window_manager
|
||||
import window_to_front
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))
|
||||
SeriousPythonPlugin.register(with: registry.registrar(forPlugin: "SeriousPythonPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
|
||||
WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin"))
|
||||
WindowToFrontPlugin.register(with: registry.registrar(forPlugin: "WindowToFrontPlugin"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,5 +8,11 @@
|
|||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.audio-input</key>
|
||||
<true/>
|
||||
<key>com.apple.security.personal-information.location</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
|
|
@ -28,5 +28,9 @@
|
|||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>This app needs access to Audio Recording.</string>
|
||||
<key>NSLocationUsageDescription</key>
|
||||
<string>This app needs access to location.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -4,5 +4,12 @@
|
|||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<false/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.device.audio-input</key>
|
||||
<true/>
|
||||
<key>com.apple.security.personal-information.location</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
|
|
|
|||
|
|
@ -11,28 +11,28 @@ dependencies:
|
|||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
serious_python: ^0.7.0
|
||||
# serious_python:
|
||||
# git:
|
||||
# url: https://github.com/flet-dev/serious-python
|
||||
# path: src/serious_python
|
||||
# ref: 'd059aef'
|
||||
serious_python: 0.7.1
|
||||
flet: 0.24.1
|
||||
|
||||
flet: ^0.19.0
|
||||
# flet:
|
||||
# git:
|
||||
# url: https://github.com/flet-dev/flet.git
|
||||
# path: package
|
||||
# ref: '37b9581'
|
||||
|
||||
path: ^1.8.3
|
||||
path: ^1.9.0
|
||||
url_strategy: ^0.2.0
|
||||
cupertino_icons: ^1.0.2
|
||||
cupertino_icons: ^1.0.6
|
||||
|
||||
dependency_overrides:
|
||||
wakelock_plus: ^1.2.5
|
||||
package_info_plus: ^8.0.0
|
||||
web: ^1.0.0
|
||||
|
||||
# {% if 'flet_audio_recorder' in cookiecutter.flutter.dependencies %}
|
||||
record: ^5.1.1
|
||||
# {% endif %}
|
||||
|
||||
# {% if 'flet_geolocator' in cookiecutter.flutter.dependencies %}
|
||||
# geolocator: ^12.0.0
|
||||
# geolocator_android: ^4.6.0
|
||||
# {% endif %}
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
flutter_launcher_icons: "^0.13.1"
|
||||
flutter_native_splash: ^2.3.6
|
||||
flutter_lints: ^2.0.0
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
importScripts("https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js");
|
||||
importScripts("https://cdn.jsdelivr.net/pyodide/v0.25.0/full/pyodide.js");
|
||||
|
||||
self.pythonModuleName = null;
|
||||
self.initialized = false;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "generated_plugin_registrant.h"
|
||||
|
||||
#include <audioplayers_windows/audioplayers_windows_plugin.h>
|
||||
#include <screen_retriever/screen_retriever_plugin.h>
|
||||
#include <serious_python_windows/serious_python_windows_plugin_c_api.h>
|
||||
#include <url_launcher_windows/url_launcher_windows.h>
|
||||
|
|
@ -14,8 +13,6 @@
|
|||
#include <window_to_front/window_to_front_plugin.h>
|
||||
|
||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||
AudioplayersWindowsPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
|
||||
ScreenRetrieverPluginRegisterWithRegistrar(
|
||||
registry->GetRegistrarForPlugin("ScreenRetrieverPlugin"));
|
||||
SeriousPythonWindowsPluginCApiRegisterWithRegistrar(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
#
|
||||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_windows
|
||||
screen_retriever
|
||||
serious_python_windows
|
||||
url_launcher_windows
|
||||
|
|
|
|||
Loading…
Reference in New Issue