mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
Merge branch 'master' into dev
This commit is contained in:
commit
816ad304df
2
.github/workflows/spotube-release-binary.yml
vendored
2
.github/workflows/spotube-release-binary.yml
vendored
@ -99,7 +99,7 @@ jobs:
|
|||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install -y tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev
|
sudo apt-get install -y tar clang cmake ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp1 libsecret-1-dev libjsoncpp-dev
|
||||||
|
|
||||||
- name: Install AppImage Tool
|
- name: Install AppImage Tool
|
||||||
run: |
|
run: |
|
||||||
|
@ -120,9 +120,9 @@ Do the following:
|
|||||||
|
|
||||||
- Download the latest Flutter SDK (>=2.15.1) & enable desktop support
|
- Download the latest Flutter SDK (>=2.15.1) & enable desktop support
|
||||||
- Install Development dependencies in linux
|
- Install Development dependencies in linux
|
||||||
- `libgstreamer1.0-dev` & `libgstreamer-plugins-base1.0-dev` (for Debian/Ubuntu)
|
- `libappindicator3-1 gir1.2-appindicator3-0.1 libappindicator3-dev libsecret-1-0 libjsoncpp1 libsecret-1-dev libjsoncpp-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev` (for Debian/Ubuntu)
|
||||||
- `gstreamer`, `gst-libav`, `gst-plugins-base` & `gst-plugins-good` (for Arch/Manjaro)
|
- `libappindicator-gtk3 libsecret jsoncpp gstreamer gst-libav gst-plugins-base gst-plugins-good` (for Arch/Manjaro)
|
||||||
- `gstreamer1-devel gstreamer1-plugins-base-tools gstreamer1-doc gstreamer1-plugins-base-devel gstreamer1-plugins-good gstreamer1-plugins-good-extras` (for Fedora)
|
- `libappindicator libsecret libsecret-devel jsoncpp gstreamer1-devel gstreamer1-plugins-base-tools gstreamer1-doc gstreamer1-plugins-base-devel gstreamer1-plugins-good gstreamer1-plugins-good-extras` (for Fedora)
|
||||||
- Clone the Repo & Run `flutter pub get` in the Terminal
|
- Clone the Repo & Run `flutter pub get` in the Terminal
|
||||||
- Create a `secrets.json` in root of the project. The structure should be similar to the following example:
|
- Create a `secrets.json` in root of the project. The structure should be similar to the following example:
|
||||||
|
|
||||||
|
@ -14,13 +14,34 @@
|
|||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
<application android:label="Spotube" android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:requestLegacyExternalStorage="true">
|
<application
|
||||||
<activity android:name="com.ryanheise.audioservice.AudioServiceActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
|
android:allowBackup="false"
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
android:fullBackupContent="false"
|
||||||
the Android process has started. This theme is visible to the user
|
android:label="Spotube"
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
android:name="${applicationName}"
|
||||||
to determine the Window background behind the Flutter UI. -->
|
android:icon="@mipmap/ic_launcher"
|
||||||
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
|
android:usesCleartextTraffic="true"
|
||||||
|
android:requestLegacyExternalStorage="true"
|
||||||
|
>
|
||||||
|
<activity
|
||||||
|
android:name="com.ryanheise.audioservice.AudioServiceActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:theme="@style/LaunchTheme"
|
||||||
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
|
android:hardwareAccelerated="true"
|
||||||
|
android:windowSoftInputMode="adjustResize"
|
||||||
|
>
|
||||||
|
<!--
|
||||||
|
Specifies an Android theme to apply to this Activity as soon as
|
||||||
|
the Android process has started. This theme is visible to the user
|
||||||
|
while the Flutter UI initializes. After that, this theme continues
|
||||||
|
to determine the Window background behind the Flutter UI.
|
||||||
|
-->
|
||||||
|
<meta-data
|
||||||
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
|
android:resource="@style/NormalTheme"
|
||||||
|
/>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
@ -25,9 +25,9 @@ import 'package:spotube/services/audio_player.dart';
|
|||||||
import 'package:spotube/services/pocketbase.dart';
|
import 'package:spotube/services/pocketbase.dart';
|
||||||
import 'package:spotube/services/youtube.dart';
|
import 'package:spotube/services/youtube.dart';
|
||||||
import 'package:spotube/themes/theme.dart';
|
import 'package:spotube/themes/theme.dart';
|
||||||
|
import 'package:spotube/utils/persisted_state_notifier.dart';
|
||||||
import 'package:system_theme/system_theme.dart';
|
import 'package:system_theme/system_theme.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
import 'package:spotube/hooks/use_init_sys_tray.dart';
|
import 'package:spotube/hooks/use_init_sys_tray.dart';
|
||||||
|
|
||||||
Future<void> main(List<String> rawArgs) async {
|
Future<void> main(List<String> rawArgs) async {
|
||||||
@ -83,6 +83,7 @@ Future<void> main(List<String> rawArgs) async {
|
|||||||
cachePrefix: "oss.krtirtho.spotube",
|
cachePrefix: "oss.krtirtho.spotube",
|
||||||
cacheDir: (await getApplicationSupportDirectory()).path,
|
cacheDir: (await getApplicationSupportDirectory()).path,
|
||||||
);
|
);
|
||||||
|
await PersistedStateNotifier.initializeBoxes();
|
||||||
Hive.registerAdapter(CacheTrackAdapter());
|
Hive.registerAdapter(CacheTrackAdapter());
|
||||||
Hive.registerAdapter(CacheTrackEngagementAdapter());
|
Hive.registerAdapter(CacheTrackEngagementAdapter());
|
||||||
Hive.registerAdapter(CacheTrackSkipSegmentAdapter());
|
Hive.registerAdapter(CacheTrackSkipSegmentAdapter());
|
||||||
|
@ -79,7 +79,7 @@ class AuthenticationNotifier
|
|||||||
|
|
||||||
bool get isLoggedIn => state != null;
|
bool get isLoggedIn => state != null;
|
||||||
|
|
||||||
AuthenticationNotifier() : super(null, "authentication");
|
AuthenticationNotifier() : super(null, "authentication", encrypted: true);
|
||||||
|
|
||||||
Timer? _refreshTimer;
|
Timer? _refreshTimer;
|
||||||
|
|
||||||
|
@ -1,22 +1,66 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
|
import 'package:spotube/utils/primitive_utils.dart';
|
||||||
|
|
||||||
|
const secureStorage = FlutterSecureStorage(
|
||||||
|
aOptions: AndroidOptions(
|
||||||
|
encryptedSharedPreferences: true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
const kKeyBoxName = "spotube_box_name";
|
||||||
|
String getBoxKey(String boxName) => "spotube_box_$boxName";
|
||||||
|
|
||||||
abstract class PersistedStateNotifier<T> extends StateNotifier<T> {
|
abstract class PersistedStateNotifier<T> extends StateNotifier<T> {
|
||||||
final String cacheKey;
|
final String cacheKey;
|
||||||
|
final bool encrypted;
|
||||||
|
|
||||||
FutureOr<void> onInit() {}
|
FutureOr<void> onInit() {}
|
||||||
|
|
||||||
PersistedStateNotifier(
|
PersistedStateNotifier(
|
||||||
super.state,
|
super.state,
|
||||||
this.cacheKey,
|
this.cacheKey, {
|
||||||
) {
|
this.encrypted = false,
|
||||||
|
}) {
|
||||||
_load().then((_) => onInit());
|
_load().then((_) => onInit());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static late LazyBox _box;
|
||||||
|
static late LazyBox _encryptedBox;
|
||||||
|
|
||||||
|
static Future<void> initializeBoxes() async {
|
||||||
|
String? boxName = await secureStorage.read(key: kKeyBoxName);
|
||||||
|
|
||||||
|
if (boxName == null) {
|
||||||
|
boxName = "spotube-${PrimitiveUtils.uuid.v4()}";
|
||||||
|
await secureStorage.write(key: kKeyBoxName, value: boxName);
|
||||||
|
}
|
||||||
|
|
||||||
|
String? encryptionKey = await secureStorage.read(key: getBoxKey(boxName));
|
||||||
|
|
||||||
|
if (encryptionKey == null) {
|
||||||
|
encryptionKey = base64Url.encode(Hive.generateSecureKey());
|
||||||
|
await secureStorage.write(
|
||||||
|
key: getBoxKey(boxName),
|
||||||
|
value: encryptionKey,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_encryptedBox = await Hive.openLazyBox(
|
||||||
|
boxName,
|
||||||
|
encryptionCipher: HiveAesCipher(base64Url.decode(encryptionKey)),
|
||||||
|
);
|
||||||
|
|
||||||
|
_box = await Hive.openLazyBox("spotube_cache");
|
||||||
|
}
|
||||||
|
|
||||||
|
LazyBox get box => encrypted ? _encryptedBox : _box;
|
||||||
|
|
||||||
Future<void> _load() async {
|
Future<void> _load() async {
|
||||||
final box = await Hive.openLazyBox("spotube_cache");
|
|
||||||
final json = await box.get(cacheKey);
|
final json = await box.get(cacheKey);
|
||||||
|
|
||||||
if (json != null) {
|
if (json != null) {
|
||||||
@ -47,7 +91,6 @@ abstract class PersistedStateNotifier<T> extends StateNotifier<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void save() async {
|
void save() async {
|
||||||
final box = await Hive.openLazyBox("spotube_cache");
|
|
||||||
box.put(cacheKey, toJson());
|
box.put(cacheKey, toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
#include <audioplayers_linux/audioplayers_linux_plugin.h>
|
||||||
#include <catcher/catcher_plugin.h>
|
#include <catcher/catcher_plugin.h>
|
||||||
#include <desktop_multi_window/desktop_multi_window_plugin.h>
|
#include <desktop_multi_window/desktop_multi_window_plugin.h>
|
||||||
|
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
|
||||||
#include <native_context_menu/native_context_menu_plugin.h>
|
#include <native_context_menu/native_context_menu_plugin.h>
|
||||||
#include <screen_retriever/screen_retriever_plugin.h>
|
#include <screen_retriever/screen_retriever_plugin.h>
|
||||||
#include <system_theme/system_theme_plugin.h>
|
#include <system_theme/system_theme_plugin.h>
|
||||||
@ -27,6 +28,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
|
|||||||
g_autoptr(FlPluginRegistrar) desktop_multi_window_registrar =
|
g_autoptr(FlPluginRegistrar) desktop_multi_window_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopMultiWindowPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopMultiWindowPlugin");
|
||||||
desktop_multi_window_plugin_register_with_registrar(desktop_multi_window_registrar);
|
desktop_multi_window_plugin_register_with_registrar(desktop_multi_window_registrar);
|
||||||
|
g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
|
||||||
|
flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);
|
||||||
g_autoptr(FlPluginRegistrar) native_context_menu_registrar =
|
g_autoptr(FlPluginRegistrar) native_context_menu_registrar =
|
||||||
fl_plugin_registry_get_registrar_for_plugin(registry, "NativeContextMenuPlugin");
|
fl_plugin_registry_get_registrar_for_plugin(registry, "NativeContextMenuPlugin");
|
||||||
native_context_menu_plugin_register_with_registrar(native_context_menu_registrar);
|
native_context_menu_plugin_register_with_registrar(native_context_menu_registrar);
|
||||||
|
@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
audioplayers_linux
|
audioplayers_linux
|
||||||
catcher
|
catcher
|
||||||
desktop_multi_window
|
desktop_multi_window
|
||||||
|
flutter_secure_storage_linux
|
||||||
native_context_menu
|
native_context_menu
|
||||||
screen_retriever
|
screen_retriever
|
||||||
system_theme
|
system_theme
|
||||||
|
@ -14,6 +14,8 @@ dependencies:
|
|||||||
- libgstreamer-plugins-base1.0-dev
|
- libgstreamer-plugins-base1.0-dev
|
||||||
- libappindicator3-1
|
- libappindicator3-1
|
||||||
- gir1.2-appindicator3-0.1
|
- gir1.2-appindicator3-0.1
|
||||||
|
- libsecret-1-0
|
||||||
|
- libjsoncpp1
|
||||||
|
|
||||||
essential: false
|
essential: false
|
||||||
icon: assets/spotube-logo.png
|
icon: assets/spotube-logo.png
|
||||||
|
@ -12,6 +12,8 @@ requires:
|
|||||||
- gstreamer1-plugins-base-devel
|
- gstreamer1-plugins-base-devel
|
||||||
- gstreamer1-plugins-good
|
- gstreamer1-plugins-good
|
||||||
- libappindicator
|
- libappindicator
|
||||||
|
- jsoncpp
|
||||||
|
- libsecret
|
||||||
|
|
||||||
display_name: Spotube
|
display_name: Spotube
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import audioplayers_darwin
|
|||||||
import catcher
|
import catcher
|
||||||
import desktop_multi_window
|
import desktop_multi_window
|
||||||
import device_info_plus
|
import device_info_plus
|
||||||
|
import flutter_secure_storage_macos
|
||||||
import native_context_menu
|
import native_context_menu
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
import path_provider_foundation
|
import path_provider_foundation
|
||||||
@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
CatcherPlugin.register(with: registry.registrar(forPlugin: "CatcherPlugin"))
|
CatcherPlugin.register(with: registry.registrar(forPlugin: "CatcherPlugin"))
|
||||||
FlutterMultiWindowPlugin.register(with: registry.registrar(forPlugin: "FlutterMultiWindowPlugin"))
|
FlutterMultiWindowPlugin.register(with: registry.registrar(forPlugin: "FlutterMultiWindowPlugin"))
|
||||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
|
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||||
NativeContextMenuPlugin.register(with: registry.registrar(forPlugin: "NativeContextMenuPlugin"))
|
NativeContextMenuPlugin.register(with: registry.registrar(forPlugin: "NativeContextMenuPlugin"))
|
||||||
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
||||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<true />
|
||||||
<key>com.apple.security.cs.allow-jit</key>
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
<true/>
|
<true />
|
||||||
<key>com.apple.security.network.client</key>
|
<key>com.apple.security.network.client</key>
|
||||||
<true/>
|
<true />
|
||||||
<key>com.apple.security.network.server</key>
|
<key>com.apple.security.network.server</key>
|
||||||
<true/>
|
<true />
|
||||||
</dict>
|
<key>keychain-access-groups</key>
|
||||||
</plist>
|
<array />
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -1,12 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.app-sandbox</key>
|
<key>com.apple.security.app-sandbox</key>
|
||||||
<true/>
|
<true />
|
||||||
<key>com.apple.security.network.client</key>
|
<key>com.apple.security.network.client</key>
|
||||||
<true/>
|
<true />
|
||||||
<key>com.apple.security.network.server</key>
|
<key>com.apple.security.network.server</key>
|
||||||
<true/>
|
<true />
|
||||||
</dict>
|
<key>keychain-access-groups</key>
|
||||||
</plist>
|
<array />
|
||||||
|
</dict>
|
||||||
|
</plist>
|
48
pubspec.lock
48
pubspec.lock
@ -725,6 +725,54 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.72.1"
|
version: "1.72.1"
|
||||||
|
flutter_secure_storage:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage
|
||||||
|
sha256: "98352186ee7ad3639ccc77ad7924b773ff6883076ab952437d20f18a61f0a7c5"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "8.0.0"
|
||||||
|
flutter_secure_storage_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage_linux
|
||||||
|
sha256: "0912ae29a572230ad52d8a4697e5518d7f0f429052fd51df7e5a7952c7efe2a3"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.3"
|
||||||
|
flutter_secure_storage_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage_macos
|
||||||
|
sha256: "083add01847fc1c80a07a08e1ed6927e9acd9618a35e330239d4422cd2a58c50"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
|
flutter_secure_storage_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage_platform_interface
|
||||||
|
sha256: b3773190e385a3c8a382007893d678ae95462b3c2279e987b55d140d3b0cb81b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
flutter_secure_storage_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage_web
|
||||||
|
sha256: "42938e70d4b872e856e678c423cc0e9065d7d294f45bc41fc1981a4eb4beaffe"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
flutter_secure_storage_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_secure_storage_windows
|
||||||
|
sha256: fc2910ec9b28d60598216c29ea763b3a96c401f0ce1d13cdf69ccb0e5c93c3ee
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
flutter_svg:
|
flutter_svg:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -37,6 +37,7 @@ dependencies:
|
|||||||
flutter_hooks: ^0.18.2+1
|
flutter_hooks: ^0.18.2+1
|
||||||
flutter_inappwebview: ^5.7.2+3
|
flutter_inappwebview: ^5.7.2+3
|
||||||
flutter_riverpod: ^2.1.1
|
flutter_riverpod: ^2.1.1
|
||||||
|
flutter_secure_storage: ^8.0.0
|
||||||
flutter_svg: ^1.1.6
|
flutter_svg: ^1.1.6
|
||||||
fuzzywuzzy: ^0.2.0
|
fuzzywuzzy: ^0.2.0
|
||||||
go_router: ^6.0.2
|
go_router: ^6.0.2
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <audioplayers_windows/audioplayers_windows_plugin.h>
|
#include <audioplayers_windows/audioplayers_windows_plugin.h>
|
||||||
#include <catcher/catcher_plugin.h>
|
#include <catcher/catcher_plugin.h>
|
||||||
#include <desktop_multi_window/desktop_multi_window_plugin.h>
|
#include <desktop_multi_window/desktop_multi_window_plugin.h>
|
||||||
|
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||||
#include <native_context_menu/native_context_menu_plugin.h>
|
#include <native_context_menu/native_context_menu_plugin.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <screen_retriever/screen_retriever_plugin.h>
|
#include <screen_retriever/screen_retriever_plugin.h>
|
||||||
@ -25,6 +26,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
|||||||
registry->GetRegistrarForPlugin("CatcherPlugin"));
|
registry->GetRegistrarForPlugin("CatcherPlugin"));
|
||||||
DesktopMultiWindowPluginRegisterWithRegistrar(
|
DesktopMultiWindowPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("DesktopMultiWindowPlugin"));
|
registry->GetRegistrarForPlugin("DesktopMultiWindowPlugin"));
|
||||||
|
FlutterSecureStorageWindowsPluginRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
|
||||||
NativeContextMenuPluginRegisterWithRegistrar(
|
NativeContextMenuPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("NativeContextMenuPlugin"));
|
registry->GetRegistrarForPlugin("NativeContextMenuPlugin"));
|
||||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||||
|
@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
|
|||||||
audioplayers_windows
|
audioplayers_windows
|
||||||
catcher
|
catcher
|
||||||
desktop_multi_window
|
desktop_multi_window
|
||||||
|
flutter_secure_storage_windows
|
||||||
native_context_menu
|
native_context_menu
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
screen_retriever
|
screen_retriever
|
||||||
|
Loading…
Reference in New Issue
Block a user