From d7c17226e460672ba19d7b97d676cbd26eabf4e9 Mon Sep 17 00:00:00 2001
From: dd
Date: Sat, 16 May 2026 02:51:02 +0800
Subject: [PATCH 01/36] Enhance import preview with merge strategy, icon
backup, and rich analysis
---
.gitignore | 2 +
l10n.yaml | 3 +-
lib/Database/category_dao.dart | 11 +-
.../token_category_payload.pb.dart | 38 ++
.../token_category_payload.proto | 4 +
lib/Models/token_category.dart | 6 +-
lib/Screens/Lock/pin_change_screen.dart | 3 +
lib/Screens/Lock/pin_verify_screen.dart | 37 +-
lib/Screens/Setting/backup_log_screen.dart | 11 +-
lib/Screens/Setting/setting_safe_screen.dart | 17 +
lib/Screens/Token/import_preview_screen.dart | 492 ++++++++++++++++
lib/Screens/main_screen.dart | 488 +++++++++++++++-
lib/TokenUtils/ThirdParty/2fas_importer.dart | 13 +-
lib/TokenUtils/ThirdParty/aegis_importer.dart | 2 +-
.../ThirdParty/base_token_importer.dart | 32 +-
lib/TokenUtils/import_token_util.dart | 301 ++++++++--
lib/TokenUtils/otp_token_parser.dart | 15 +-
lib/TokenUtils/token_image_util.dart | 8 +-
lib/Utils/hive_util.dart | 1 +
lib/Utils/utils.dart | 14 +-
lib/l10n/intl_en.arb | 93 +++-
lib/l10n/intl_ja.arb | 93 +++-
lib/l10n/intl_zh.arb | 93 +++-
lib/l10n/intl_zh_TW.arb | 93 +++-
lib/main.dart | 49 +-
macos/Flutter/GeneratedPluginRegistrant.swift | 2 +-
macos/Podfile.lock | 99 ++--
macos/Runner.xcodeproj/project.pbxproj | 11 +-
.../xcshareddata/xcschemes/Runner.xcscheme | 1 +
macos/Runner/AppDelegate.swift | 14 +
macos/Runner/DebugProfile.entitlements | 8 +
macos/Runner/LocalNotifierOverride.swift | 125 +++++
macos/Runner/MainFlutterWindow.swift | 1 +
macos/Runner/Release.entitlements | 10 +
pubspec.lock | 97 ++--
pubspec.yaml | 2 +-
third-party/awesome_cloud/pubspec.lock | 482 ++++++++++------
third-party/awesome_cloud/pubspec.yaml | 2 +-
third-party/chewie/l10n.yaml | 3 +-
.../lib/src/Resources/theme_color_data.dart | 2 +-
.../lib/src/Widgets/Button/window_button.dart | 20 +-
.../Module/Unlock/gesture_unlock_view.dart | 5 +-
.../lib/src/Widgets/Scaffold/my_appbar.dart | 12 +-
.../Scaffold/sliver_appbar_delegate.dart | 2 +-
.../Selectable/my_selectable_region.dart | 49 ++
.../lib/src/Widgets/Tile/entry_item.dart | 23 +-
third-party/chewie/pubspec.lock | 115 ++--
third-party/chewie/pubspec.yaml | 2 +-
.../tool/biometric_storage/pubspec.lock | 250 +++++++++
.../tool/flutter_web_auth_2/pubspec.lock | 382 ++++++++-----
.../pubspec.lock | 213 +++++++
.../tool/flutter_windowmanager/pubspec.lock | 189 +++++++
.../tool/image_gallery_saver/pubspec.lock | 189 +++++++
.../tool/move_to_background/pubspec.lock | 189 +++++++
.../screen_capturer/pubspec.lock | 273 +++++++++
.../screen_capturer_linux/pubspec.lock | 236 ++++++++
.../screen_capturer_macos/pubspec.lock | 236 ++++++++
.../pubspec.lock | 525 ++++++++++++++++++
.../screen_capturer_windows/pubspec.lock | 244 ++++++++
.../widget/desktop_multi_window/pubspec.lock | 142 ++---
third-party/widget/lucide_icons/pubspec.lock | 108 ++--
third-party/widget/pinput/pubspec.lock | 132 ++---
.../widget/smart_snackbars/pubspec.lock | 205 +++++++
63 files changed, 5707 insertions(+), 812 deletions(-)
create mode 100644 lib/Screens/Token/import_preview_screen.dart
create mode 100644 macos/Runner/LocalNotifierOverride.swift
create mode 100644 third-party/tool/biometric_storage/pubspec.lock
create mode 100644 third-party/tool/flutter_web_auth_2_platform_interface/pubspec.lock
create mode 100644 third-party/tool/flutter_windowmanager/pubspec.lock
create mode 100644 third-party/tool/image_gallery_saver/pubspec.lock
create mode 100644 third-party/tool/move_to_background/pubspec.lock
create mode 100644 third-party/tool/screen_capturer_lib/screen_capturer/pubspec.lock
create mode 100644 third-party/tool/screen_capturer_lib/screen_capturer_linux/pubspec.lock
create mode 100644 third-party/tool/screen_capturer_lib/screen_capturer_macos/pubspec.lock
create mode 100644 third-party/tool/screen_capturer_lib/screen_capturer_platform_interface/pubspec.lock
create mode 100644 third-party/tool/screen_capturer_lib/screen_capturer_windows/pubspec.lock
create mode 100644 third-party/widget/smart_snackbars/pubspec.lock
diff --git a/.gitignore b/.gitignore
index 32e3845e..40731031 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,9 +5,11 @@
*.swp
.DS_Store
.atom/
+.build/
.buildlog/
.history
.svn/
+.swiftpm/
migrate_working_dir/
# IntelliJ related
diff --git a/l10n.yaml b/l10n.yaml
index bfb3f244..a4c7d648 100644
--- a/l10n.yaml
+++ b/l10n.yaml
@@ -2,5 +2,4 @@ arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: app_localizations.dart
output-class: AppLocalizations
-output-dir: lib/generated
-synthetic-package: false
\ No newline at end of file
+output-dir: lib/generated
\ No newline at end of file
diff --git a/lib/Database/category_dao.dart b/lib/Database/category_dao.dart
index eae432c8..e10c4bda 100644
--- a/lib/Database/category_dao.dart
+++ b/lib/Database/category_dao.dart
@@ -47,10 +47,15 @@ class CategoryDao {
static Future insertCategories(List categories) async {
if (categories.isEmpty) return 0;
final db = await DatabaseManager.getDataBase();
+ int maxSeq = await getMaxSeq();
+ int maxId = await getMaxId();
Batch batch = db.batch();
- for (TokenCategory category in categories) {
- category.seq = await getMaxSeq() + 1 + categories.indexOf(category);
- category.id = await getMaxId() + 1 + categories.indexOf(category);
+ for (int i = 0; i < categories.length; i++) {
+ TokenCategory category = categories[i];
+ if (category.seq <= 0) {
+ category.seq = maxSeq + 1 + i;
+ }
+ category.id = maxId + 1 + i;
if (category.uid.isEmpty) category.uid = StringUtil.generateUid();
batch.insert(
tableName,
diff --git a/lib/Models/Proto/TokenCategory/token_category_payload.pb.dart b/lib/Models/Proto/TokenCategory/token_category_payload.pb.dart
index d5eec248..0be61498 100644
--- a/lib/Models/Proto/TokenCategory/token_category_payload.pb.dart
+++ b/lib/Models/Proto/TokenCategory/token_category_payload.pb.dart
@@ -174,6 +174,8 @@ class TokenCategoryParameters extends $pb.GeneratedMessage {
$core.String? remark,
$core.String? uid,
$core.String? bindings,
+ $core.bool? pinned,
+ $core.int? seq,
}) {
final $result = create();
if (secret != null) {
@@ -197,6 +199,12 @@ class TokenCategoryParameters extends $pb.GeneratedMessage {
if (bindings != null) {
$result.bindings = bindings;
}
+ if (pinned != null) {
+ $result.pinned = pinned;
+ }
+ if (seq != null) {
+ $result.seq = seq;
+ }
return $result;
}
@@ -221,6 +229,8 @@ class TokenCategoryParameters extends $pb.GeneratedMessage {
..aOS(5, _omitFieldNames ? '' : 'remark')
..aOS(6, _omitFieldNames ? '' : 'uid')
..aOS(7, _omitFieldNames ? '' : 'bindings')
+ ..aOB(8, _omitFieldNames ? '' : 'pinned')
+ ..a<$core.int>(9, _omitFieldNames ? '' : 'seq', $pb.PbFieldType.O3)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
@@ -349,6 +359,34 @@ class TokenCategoryParameters extends $pb.GeneratedMessage {
@$pb.TagNumber(7)
void clearBindings() => clearField(7);
+
+ @$pb.TagNumber(8)
+ $core.bool get pinned => $_getBF(7);
+
+ @$pb.TagNumber(8)
+ set pinned($core.bool v) {
+ $_setBool(7, v);
+ }
+
+ @$pb.TagNumber(8)
+ $core.bool hasPinned() => $_has(7);
+
+ @$pb.TagNumber(8)
+ void clearPinned() => clearField(8);
+
+ @$pb.TagNumber(9)
+ $core.int get seq => $_getIZ(8);
+
+ @$pb.TagNumber(9)
+ set seq($core.int v) {
+ $_setSignedInt32(8, v);
+ }
+
+ @$pb.TagNumber(9)
+ $core.bool hasSeq() => $_has(8);
+
+ @$pb.TagNumber(9)
+ void clearSeq() => clearField(9);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
diff --git a/lib/Models/Proto/TokenCategory/token_category_payload.proto b/lib/Models/Proto/TokenCategory/token_category_payload.proto
index d9b9b615..195fd9e0 100644
--- a/lib/Models/Proto/TokenCategory/token_category_payload.proto
+++ b/lib/Models/Proto/TokenCategory/token_category_payload.proto
@@ -26,4 +26,8 @@ message TokenCategoryParameters {
optional string uid = 6;
optional string bindings = 7;
+
+ optional bool pinned = 8;
+
+ optional int32 seq = 9;
}
diff --git a/lib/Models/token_category.dart b/lib/Models/token_category.dart
index 96630a6b..543d59a5 100644
--- a/lib/Models/token_category.dart
+++ b/lib/Models/token_category.dart
@@ -97,6 +97,8 @@ class TokenCategory {
description: description,
remark: jsonEncode(remark),
bindings: (await BindingDao.getTokenUids(uid)).join(","),
+ pinned: pinned,
+ seq: seq,
);
}
@@ -112,13 +114,13 @@ class TokenCategory {
}
return TokenCategory(
id: 0,
- seq: 0,
+ seq: parameters.hasSeq() ? parameters.seq : 0,
uid: parameters.uid,
title: parameters.title,
description: parameters.description,
createTimeStamp: DateTime.now().millisecondsSinceEpoch,
editTimeStamp: DateTime.now().millisecondsSinceEpoch,
- pinned: false,
+ pinned: parameters.hasPinned() ? parameters.pinned : false,
remark: jsonDecode(parameters.remark),
bindings: parameters.bindings.split(","),
);
diff --git a/lib/Screens/Lock/pin_change_screen.dart b/lib/Screens/Lock/pin_change_screen.dart
index ed64d070..e0ef4c4c 100644
--- a/lib/Screens/Lock/pin_change_screen.dart
+++ b/lib/Screens/Lock/pin_change_screen.dart
@@ -42,6 +42,8 @@ class PinChangeScreenState extends BaseDynamicState {
.isNotEmpty;
late final bool _enableBiometric =
ChewieHiveUtil.getBool(CloudOTPHiveUtil.enableBiometricKey);
+ final bool _hideGestureTrail =
+ ChewieHiveUtil.getBool(CloudOTPHiveUtil.hideGestureTrailKey);
late final GestureNotifier _notifier = _isEditMode
? GestureNotifier(
status: GestureStatus.verify,
@@ -123,6 +125,7 @@ class PinChangeScreenState extends BaseDynamicState {
solidRadiusRatio: 0.3,
lineWidth: 2,
touchRadiusRatio: 0.3,
+ showLine: !_hideGestureTrail,
onCompleted: _gestureComplete,
),
),
diff --git a/lib/Screens/Lock/pin_verify_screen.dart b/lib/Screens/Lock/pin_verify_screen.dart
index 71eefd03..9bc60c7a 100644
--- a/lib/Screens/Lock/pin_verify_screen.dart
+++ b/lib/Screens/Lock/pin_verify_screen.dart
@@ -55,6 +55,8 @@ class PinVerifyScreenState extends BaseWindowState
ChewieHiveUtil.getString(CloudOTPHiveUtil.guesturePasswdKey);
late final bool _enableBiometric =
ChewieHiveUtil.getBool(CloudOTPHiveUtil.enableBiometricKey);
+ final bool _hideGestureTrail =
+ ChewieHiveUtil.getBool(CloudOTPHiveUtil.hideGestureTrailKey);
late final GestureNotifier _notifier = GestureNotifier(
status: GestureStatus.verify,
gestureText: appLocalizations.verifyGestureLock);
@@ -136,31 +138,30 @@ class PinVerifyScreenState extends BaseWindowState
child: PopScope(
canPop: !widget.isModal,
child: Column(
- mainAxisSize: MainAxisSize.min,
- mainAxisAlignment: MainAxisAlignment.center,
+ mainAxisSize: MainAxisSize.max,
+ mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- const SizedBox(height: 50),
+ const Spacer(),
Text(
_notifier.gestureText,
style: ChewieTheme.titleMedium,
),
const SizedBox(height: 30),
- Flexible(
- child: GestureUnlockView(
- key: _gestureUnlockView,
- size: min(MediaQuery.sizeOf(context).width, 400),
- padding: 60,
- roundSpace: 40,
- defaultColor: Colors.grey.withOpacity(0.5),
- selectedColor: ChewieTheme.primaryColor,
- failedColor: Colors.redAccent,
- disableColor: Colors.grey,
- solidRadiusRatio: 0.3,
- lineWidth: 2,
- touchRadiusRatio: 0.3,
- onCompleted: _gestureComplete,
- ),
+ GestureUnlockView(
+ key: _gestureUnlockView,
+ size: min(MediaQuery.sizeOf(context).width, 400),
+ padding: 60,
+ roundSpace: 40,
+ defaultColor: Colors.grey.withOpacity(0.5),
+ selectedColor: ChewieTheme.primaryColor,
+ failedColor: Colors.redAccent,
+ disableColor: Colors.grey,
+ solidRadiusRatio: 0.3,
+ lineWidth: 2,
+ touchRadiusRatio: 0.3,
+ showLine: !_hideGestureTrail,
+ onCompleted: _gestureComplete,
),
Visibility(
visible: _biometricAvailable && _enableBiometric,
diff --git a/lib/Screens/Setting/backup_log_screen.dart b/lib/Screens/Setting/backup_log_screen.dart
index 54916d82..60467b3d 100644
--- a/lib/Screens/Setting/backup_log_screen.dart
+++ b/lib/Screens/Setting/backup_log_screen.dart
@@ -18,6 +18,7 @@ import 'dart:math';
import 'package:awesome_chewie/awesome_chewie.dart';
import 'package:cloudotp/Models/auto_backup_log.dart';
import 'package:cloudotp/Screens/Setting/setting_backup_screen.dart';
+import 'package:cloudotp/Screens/Setting/setting_navigation_screen.dart';
import 'package:cloudotp/Utils/app_provider.dart';
import 'package:flutter/material.dart';
import 'package:lucide_icons/lucide_icons.dart';
@@ -165,21 +166,23 @@ class BackupLogScreenState extends BaseDynamicState {
),
if (!canBackup)
Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
children: [
+ const SizedBox(height: 20),
Text(
appLocalizations.haveNotSetBackupPassword,
style: ChewieTheme.bodyMedium,
),
const SizedBox(height: 10),
RoundIconTextButton(
+ height: 36,
text: appLocalizations.goToSetBackupPassword,
background: ChewieTheme.primaryColor,
onPressed: () {
if (widget.isOverlay) {
- RouteUtil.pushDialogRoute(
- context,
- const BackupSettingScreen(
- jumpToAutoBackupPassword: true));
+ RouteUtil.pushDialogRoute(context,
+ const SettingNavigationScreen(initPageIndex: 3));
} else {
RouteUtil.pushCupertinoRoute(
context,
diff --git a/lib/Screens/Setting/setting_safe_screen.dart b/lib/Screens/Setting/setting_safe_screen.dart
index de4e1465..a50a00f7 100644
--- a/lib/Screens/Setting/setting_safe_screen.dart
+++ b/lib/Screens/Setting/setting_safe_screen.dart
@@ -55,6 +55,8 @@ class _SafeSettingScreenState extends BaseDynamicState
bool _enableSafeMode = ChewieHiveUtil.getBool(
CloudOTPHiveUtil.enableSafeModeKey,
defaultValue: defaultEnableSafeMode);
+ bool _hideGestureTrail =
+ ChewieHiveUtil.getBool(CloudOTPHiveUtil.hideGestureTrailKey);
bool _allowGuestureBiometric =
ChewieHiveUtil.getBool(CloudOTPHiveUtil.enableBiometricKey);
bool _allowDatabaseBiometric = ChewieHiveUtil.getBool(
@@ -148,6 +150,21 @@ class _SafeSettingScreenState extends BaseDynamicState
onTap: onBiometricTapped,
),
),
+ Visibility(
+ visible: _gesturePasswdAvailableAndSet,
+ child: CheckboxItem(
+ value: _hideGestureTrail,
+ title: appLocalizations.hideGestureTrail,
+ description: appLocalizations.hideGestureTrailTip,
+ onTap: () {
+ setState(() {
+ _hideGestureTrail = !_hideGestureTrail;
+ ChewieHiveUtil.put(
+ CloudOTPHiveUtil.hideGestureTrailKey, _hideGestureTrail);
+ });
+ },
+ ),
+ ),
],
);
}
diff --git a/lib/Screens/Token/import_preview_screen.dart b/lib/Screens/Token/import_preview_screen.dart
new file mode 100644
index 00000000..564c5768
--- /dev/null
+++ b/lib/Screens/Token/import_preview_screen.dart
@@ -0,0 +1,492 @@
+/*
+ * Copyright (c) 2024 Robert-Stackflow.
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program.
+ * If not, see .
+ */
+
+import 'package:awesome_chewie/awesome_chewie.dart';
+import 'package:cloudotp/Models/opt_token.dart';
+import 'package:cloudotp/Models/token_category.dart';
+import 'package:cloudotp/TokenUtils/ThirdParty/base_token_importer.dart';
+import 'package:cloudotp/TokenUtils/import_token_util.dart';
+import 'package:flutter/material.dart';
+
+import '../../Widgets/cloudotp/cloudotp_item_builder.dart';
+import '../../l10n/l10n.dart';
+
+class ImportPreviewScreen extends StatefulWidget {
+ final List tokens;
+ final List categories;
+ final List errors;
+
+ const ImportPreviewScreen({
+ super.key,
+ required this.tokens,
+ required this.categories,
+ this.errors = const [],
+ });
+
+ static void show({
+ required List tokens,
+ required List categories,
+ List errors = const [],
+ }) {
+ if (tokens.isEmpty && errors.isEmpty && categories.isEmpty) {
+ IToast.showTop(appLocalizations.importNoTokens);
+ return;
+ }
+ RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ ImportPreviewScreen(
+ tokens: tokens,
+ categories: categories,
+ errors: errors,
+ ),
+ );
+ }
+
+ @override
+ State createState() => _ImportPreviewScreenState();
+}
+
+class _ImportPreviewScreenState extends BaseDynamicState {
+ List _tokenItems = [];
+ List _categoryItems = [];
+ bool _loading = true;
+ bool _overwriteExisting = false;
+ late SelectionItemModel _keepLocalOption;
+ late SelectionItemModel _overwriteLocalOption;
+ SelectionItemModel? _currentMergeOption;
+
+ bool get _hasCategories => widget.categories.isNotEmpty;
+
+ @override
+ void initState() {
+ super.initState();
+ _keepLocalOption =
+ SelectionItemModel(appLocalizations.importKeepLocal, false);
+ _overwriteLocalOption =
+ SelectionItemModel(appLocalizations.importOverwriteLocal, true);
+ _currentMergeOption = _keepLocalOption;
+ _loadPreview();
+ }
+
+ Future _loadPreview() async {
+ final tokenItems = await ImportTokenUtil.previewImport(
+ widget.tokens,
+ errors: widget.errors,
+ );
+ List categoryItems = [];
+ if (_hasCategories) {
+ categoryItems =
+ await ImportTokenUtil.previewCategories(widget.categories);
+ }
+ tokenItems.sort((a, b) => a.status.index.compareTo(b.status.index));
+ setState(() {
+ _tokenItems = tokenItems;
+ _categoryItems = categoryItems;
+ _loading = false;
+ });
+ }
+
+ int get _selectedTokenCount => _tokenItems.where((e) => e.selected).length;
+
+ int get _selectedCategoryCount =>
+ _categoryItems.where((e) => e.selected).length;
+
+ int get _totalSelectedCount => _selectedTokenCount + _selectedCategoryCount;
+
+ List get _selectedTokens =>
+ _tokenItems.where((e) => e.selected).map((e) => e.token).toList();
+
+ List get _selectedCategories =>
+ _categoryItems.where((e) => e.selected).map((e) => e.category).toList();
+
+ bool get _allTokensSelectableSelected => _tokenItems
+ .where((e) => e.status != ImportTokenStatus.error)
+ .every((e) => e.selected);
+
+ bool get _allCategoriesSelected =>
+ _categoryItems.isEmpty || _categoryItems.every((e) => e.selected);
+
+ bool get _allSelected =>
+ _allTokensSelectableSelected && _allCategoriesSelected;
+
+ String get _buttonText {
+ if (_selectedTokenCount > 0 && _selectedCategoryCount > 0) {
+ return appLocalizations.importSelectedBothCount(
+ _selectedTokenCount, _selectedCategoryCount);
+ } else if (_selectedCategoryCount > 0) {
+ return appLocalizations
+ .importSelectedCategoryCount(_selectedCategoryCount);
+ } else {
+ return appLocalizations.importSelectedCount(_selectedTokenCount);
+ }
+ }
+
+ void _toggleSelectAll() {
+ setState(() {
+ bool selectAll = !_allSelected;
+ for (var item in _tokenItems) {
+ if (item.status != ImportTokenStatus.error) {
+ item.selected = selectAll;
+ }
+ }
+ for (var item in _categoryItems) {
+ item.selected = selectAll;
+ }
+ });
+ }
+
+ void _setOverwrite(bool overwrite) {
+ setState(() {
+ _overwriteExisting = overwrite;
+ _currentMergeOption =
+ overwrite ? _overwriteLocalOption : _keepLocalOption;
+ for (var item in _tokenItems) {
+ if (item.status == ImportTokenStatus.duplicate) {
+ item.selected = _overwriteExisting;
+ }
+ }
+ for (var item in _categoryItems) {
+ if (!item.isNew) {
+ item.selected = _overwriteExisting;
+ }
+ }
+ });
+ }
+
+ Future _confirmImport() async {
+ if (_totalSelectedCount == 0) return;
+ CustomLoadingDialog.showLoading(title: appLocalizations.importing);
+ try {
+ final selectedCategories = _selectedCategories;
+ final selectedTokenUids = _selectedTokens.map((t) => t.uid).toSet();
+ for (var cat in selectedCategories) {
+ cat.bindings = cat.bindings
+ .where((uid) => selectedTokenUids.contains(uid))
+ .toList();
+ }
+ ImportAnalysis analysis = await ImportTokenUtil.confirmImport(
+ _selectedTokens,
+ selectedCategories,
+ overwriteExisting: _overwriteExisting,
+ tokenItems: _tokenItems,
+ categoryItems: _categoryItems,
+ );
+ CustomLoadingDialog.dismissLoading();
+ analysis.showToast(appLocalizations.importNoTokens);
+ if (mounted) Navigator.of(context).pop();
+ } catch (e, t) {
+ CustomLoadingDialog.dismissLoading();
+ ILogger.error("Failed to confirm import", e, t);
+ IToast.showTop(appLocalizations.importFailed);
+ }
+ }
+
+ String _buildCategoryBindingText(ImportCategoryItem item) {
+ final bindings = item.category.bindings;
+ if (bindings.isEmpty) return "";
+ List names = [];
+ for (String uid in bindings) {
+ final match = _tokenItems.where((t) => t.token.uid == uid);
+ if (match.isNotEmpty) {
+ final token = match.first.token;
+ names.add(token.issuer.isNotEmpty ? token.issuer : token.account);
+ }
+ }
+ if (names.isEmpty) return "";
+ final count = names.length;
+ if (count <= 3) {
+ return appLocalizations.importCategoryContains(names.join(", "), count);
+ } else {
+ final displayNames = names.take(3).join(", ");
+ return appLocalizations.importCategoryContainsMore(displayNames, count);
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return MyScaffold(
+ appBar: ResponsiveAppBar(
+ title: appLocalizations.importPreview,
+ showBack: ResponsiveUtil.isLandscapeLayout() ? false : true,
+ titleLeftMargin: ResponsiveUtil.isLandscapeLayout() ? 15 : 5,
+ actions: [
+ if (!_loading)
+ TextButton(
+ onPressed: _toggleSelectAll,
+ child: Text(
+ _allSelected
+ ? appLocalizations.importDeselectAll
+ : appLocalizations.importSelectAll,
+ style: TextStyle(color: ChewieTheme.primaryColor),
+ ),
+ ),
+ const SizedBox(width: 5),
+ ],
+ ),
+ body: _loading
+ ? const Center(child: CircularProgressIndicator())
+ : Column(
+ children: [
+ Expanded(
+ child: ListView(
+ padding: const EdgeInsets.symmetric(horizontal: 10),
+ children: [
+ const SizedBox(height: 10),
+ InlineSelectionItem>(
+ title: appLocalizations.importMergeStrategy,
+ selections: [
+ _keepLocalOption,
+ _overwriteLocalOption,
+ ],
+ hint: appLocalizations.importMergeStrategy,
+ selected: _currentMergeOption,
+ onChanged: (item) {
+ if (item != null) {
+ _setOverwrite(item.value);
+ }
+ },
+ ),
+ CaptionItem(
+ title:
+ "${appLocalizations.tokenCount} (${_tokenItems.length})",
+ children: _tokenItems
+ .map((item) => _buildTokenItem(item))
+ .toList(),
+ ),
+ if (_hasCategories)
+ CaptionItem(
+ title:
+ "${appLocalizations.categoryCount} (${_categoryItems.length})",
+ children: _categoryItems
+ .map((item) => _buildCategoryItem(item))
+ .toList(),
+ ),
+ ],
+ ),
+ ),
+ _buildBottomBar(),
+ ],
+ ),
+ );
+ }
+
+ Widget _buildTokenItem(ImportTokenItem item) {
+ final isError = item.status == ImportTokenStatus.error;
+ return Container(
+ margin: const EdgeInsets.symmetric(vertical: 3, horizontal: 8),
+ decoration: BoxDecoration(
+ color: ChewieTheme.canvasColor,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ child: Material(
+ color: Colors.transparent,
+ borderRadius: BorderRadius.circular(8),
+ child: InkWell(
+ borderRadius: BorderRadius.circular(8),
+ onTap: isError
+ ? null
+ : () {
+ setState(() {
+ item.selected = !item.selected;
+ });
+ },
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
+ child: Row(
+ children: [
+ Checkbox(
+ value: item.selected,
+ onChanged: isError
+ ? null
+ : (value) {
+ setState(() {
+ item.selected = value ?? false;
+ });
+ },
+ activeColor: ChewieTheme.primaryColor,
+ ),
+ const SizedBox(width: 4),
+ CloudOTPItemBuilder.buildTokenImage(item.token, size: 24),
+ const SizedBox(width: 8),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ item.token.issuer.isNotEmpty
+ ? item.token.issuer
+ : item.token.account,
+ style: ChewieTheme.titleSmall,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ if (item.token.account.isNotEmpty &&
+ item.token.account != item.token.issuer)
+ Text(
+ item.token.account,
+ style: ChewieTheme.bodySmall,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ if (isError && item.errorReason != null)
+ Text(
+ item.errorReason!,
+ style:
+ ChewieTheme.bodySmall.copyWith(color: Colors.red),
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ],
+ ),
+ ),
+ const SizedBox(width: 8),
+ _buildTokenStatusText(item),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ Widget _buildTokenStatusText(ImportTokenItem item) {
+ String label;
+ Color? color;
+ switch (item.status) {
+ case ImportTokenStatus.ready:
+ label = appLocalizations.importReady;
+ case ImportTokenStatus.duplicate:
+ label = _overwriteExisting
+ ? appLocalizations.importOverwrite
+ : appLocalizations.importDuplicate;
+ case ImportTokenStatus.error:
+ label = appLocalizations.importError;
+ color = Colors.red;
+ }
+ return Text(
+ label,
+ style: ChewieTheme.bodySmall.copyWith(
+ color: color ?? ChewieTheme.bodySmall.color,
+ ),
+ );
+ }
+
+ Widget _buildCategoryItem(ImportCategoryItem item) {
+ final bindingText = _buildCategoryBindingText(item);
+ return Container(
+ margin: const EdgeInsets.symmetric(vertical: 3, horizontal: 8),
+ decoration: BoxDecoration(
+ color: ChewieTheme.canvasColor,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ child: Material(
+ color: Colors.transparent,
+ borderRadius: BorderRadius.circular(8),
+ child: InkWell(
+ borderRadius: BorderRadius.circular(8),
+ onTap: () {
+ setState(() {
+ item.selected = !item.selected;
+ });
+ },
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
+ child: Row(
+ children: [
+ Checkbox(
+ value: item.selected,
+ onChanged: (value) {
+ setState(() {
+ item.selected = value ?? false;
+ });
+ },
+ activeColor: ChewieTheme.primaryColor,
+ ),
+ const SizedBox(width: 8),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ item.category.title,
+ style: ChewieTheme.titleSmall,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ if (bindingText.isNotEmpty)
+ Text(
+ bindingText,
+ style: ChewieTheme.bodySmall,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ],
+ ),
+ ),
+ const SizedBox(width: 8),
+ Text(
+ item.isNew
+ ? appLocalizations.importCategoryNew
+ : (_overwriteExisting
+ ? appLocalizations.importOverwrite
+ : appLocalizations.importCategoryExisting),
+ style: ChewieTheme.bodySmall,
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ Widget _buildBottomBar() {
+ return Container(
+ padding: EdgeInsets.only(
+ left: 16,
+ right: 16,
+ top: 12,
+ bottom: 12 + MediaQuery.of(context).padding.bottom,
+ ),
+ decoration: BoxDecoration(
+ color: ChewieTheme.scaffoldBackgroundColor,
+ border: Border(
+ top: BorderSide(
+ color: Theme.of(context).dividerColor.withValues(alpha: 0.3),
+ ),
+ ),
+ ),
+ child: SizedBox(
+ width: double.infinity,
+ child: ElevatedButton(
+ onPressed: _totalSelectedCount > 0 ? _confirmImport : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor: ChewieTheme.primaryColor,
+ disabledBackgroundColor: Colors.grey.withValues(alpha: 0.3),
+ foregroundColor: Colors.white,
+ padding: const EdgeInsets.symmetric(vertical: 14),
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12),
+ ),
+ ),
+ child: Text(
+ _buttonText,
+ style: const TextStyle(fontSize: 16),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/Screens/main_screen.dart b/lib/Screens/main_screen.dart
index 71c62c78..bae38377 100644
--- a/lib/Screens/main_screen.dart
+++ b/lib/Screens/main_screen.dart
@@ -34,8 +34,15 @@ import 'package:screen_capturer/screen_capturer.dart';
import 'package:tray_manager/tray_manager.dart';
import 'package:window_manager/window_manager.dart';
+import '../Database/category_dao.dart';
+import '../Database/token_category_binding_dao.dart';
+import '../Database/token_dao.dart';
+import '../Models/opt_token.dart';
+import '../Models/token_category.dart';
+import '../TokenUtils/code_generator.dart';
import '../TokenUtils/import_token_util.dart';
import '../Utils/app_provider.dart';
+import '../Utils/constant.dart';
import '../Utils/hive_util.dart';
import '../Utils/lottie_util.dart';
import '../Utils/utils.dart';
@@ -70,6 +77,8 @@ class MainScreenState extends BaseWindowState
AutomaticKeepAliveClientMixin {
Timer? _timer;
TextEditingController searchController = TextEditingController();
+ List _menuTokens = [];
+ List _menuCategories = [];
@override
void onWindowMinimize() {
@@ -129,6 +138,10 @@ class MainScreenState extends BaseWindowState
appProvider.canShowCloudBackupButton = value;
});
fetchReleases();
+ if (ResponsiveUtil.isMacOS()) {
+ _checkNotificationPermission();
+ _loadMenuTokenData();
+ }
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (ChewieHiveUtil.getBool(CloudOTPHiveUtil.autoFocusSearchBarKey,
defaultValue: false)) {
@@ -156,6 +169,64 @@ class MainScreenState extends BaseWindowState
});
}
+ static const _notifierChannel = MethodChannel('local_notifier');
+
+ Future _checkNotificationPermission() async {
+ await Future.delayed(const Duration(seconds: 2));
+ if (!mounted) return;
+ try {
+ final status =
+ await _notifierChannel.invokeMethod('checkPermission');
+ if (status == 'denied' || status == 'notDetermined') {
+ if (!mounted) return;
+ DialogBuilder.showConfirmDialog(
+ context,
+ title: appLocalizations.setting,
+ message: status == 'denied'
+ ? appLocalizations.notificationPermissionDenied
+ : appLocalizations.notificationPermissionRequest,
+ confirmButtonText: appLocalizations.goToSettings,
+ cancelButtonText: appLocalizations.cancel,
+ onTapConfirm: () async {
+ await _notifierChannel.invokeMethod('openNotificationSettings');
+ },
+ );
+ }
+ } catch (e) {
+ ILogger.error("Failed to check notification permission", e);
+ }
+ }
+
+ Future _loadMenuTokenData() async {
+ if (!DatabaseManager.initialized) return;
+ _menuTokens = await TokenDao.listTokens();
+ _menuTokens.sort((a, b) => a.issuer.compareTo(b.issuer));
+ List cats = await CategoryDao.listCategories();
+ for (var cat in cats) {
+ cat.tokens = await BindingDao.getTokens(cat.uid);
+ cat.tokens.sort((a, b) => a.issuer.compareTo(b.issuer));
+ }
+ _menuCategories = cats.where((e) => e.tokens.isNotEmpty).toList();
+ if (mounted) setState(() {});
+ }
+
+ Future _copyTokenCode(OtpToken token) async {
+ double currentProgress = token.period == 0
+ ? 0
+ : (token.period * 1000 -
+ (DateTime.now().millisecondsSinceEpoch %
+ (token.period * 1000))) /
+ (token.period * 1000);
+ if (ChewieHiveUtil.getBool(CloudOTPHiveUtil.autoCopyNextCodeKey) &&
+ currentProgress < autoCopyNextCodeProgressThrehold) {
+ ChewieUtils.copy(context, CodeGenerator.getNextCode(token),
+ toastText: appLocalizations.alreadyCopiedNextCode);
+ } else {
+ ChewieUtils.copy(context, CodeGenerator.getCurrentCode(token));
+ }
+ TokenDao.incTokenCopyTimes(token);
+ }
+
initGlobalConfig() {
if (ResponsiveUtil.isDesktop()) {
windowManager
@@ -209,11 +280,410 @@ class MainScreenState extends BaseWindowState
}
_buildBodyByPlatform() {
- return ResponsiveUtil.selectByResponsive(
+ Widget body = ResponsiveUtil.selectByResponsive(
desktop: _buildDesktopBody(),
landscape: SafeArea(child: _buildDesktopBody()),
portrait: HomeScreen(key: chewieProvider.panelScreenKey),
);
+ if (ResponsiveUtil.isMacOS()) {
+ return PlatformMenuBar(
+ menus: _buildMacMenuBar(),
+ child: body,
+ );
+ }
+ return body;
+ }
+
+ String _checked(String label, bool isChecked) =>
+ isChecked ? '✓ $label' : ' $label';
+
+ List _buildMacMenuBar() {
+ return [
+ // App menu
+ PlatformMenu(
+ label: ResponsiveUtil.appName,
+ menus: [
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.about,
+ onSelected: () => ShortcutsUtil.jumpToAbout(context),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.checkUpdates,
+ onSelected: () => ChewieUtils.getReleases(
+ context: context,
+ showLoading: true,
+ showUpdateDialog: true,
+ showFailedToast: true,
+ showLatestToast: true,
+ ),
+ ),
+ ]),
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.setting,
+ shortcut: const SingleActivator(
+ LogicalKeyboardKey.comma,
+ meta: true,
+ ),
+ onSelected: () => ShortcutsUtil.jumpToSetting(context),
+ ),
+ ]),
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: '${appLocalizations.quit} ${ResponsiveUtil.appName}',
+ shortcut: const SingleActivator(
+ LogicalKeyboardKey.keyQ,
+ meta: true,
+ ),
+ onSelected: () => windowManager.close(),
+ ),
+ ]),
+ ],
+ ),
+ // File menu
+ PlatformMenu(
+ label: appLocalizations.menuFile,
+ menus: [
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.addToken,
+ shortcut: const SingleActivator(
+ LogicalKeyboardKey.keyA,
+ control: true,
+ alt: true,
+ ),
+ onSelected: () => RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ const AddTokenScreen(),
+ ),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.category,
+ shortcut: const SingleActivator(
+ LogicalKeyboardKey.keyC,
+ control: true,
+ alt: true,
+ ),
+ onSelected: () => RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ const CategoryScreen(),
+ ),
+ ),
+ PlatformMenu(
+ label: appLocalizations.scanToken,
+ menus: [
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.scanFromImageFile,
+ onSelected: () async {
+ FilePickerResult? result = await FileUtil.pickFiles(
+ type: FileType.image,
+ lockParentWindow: true,
+ );
+ if (result == null) return;
+ if (!mounted) return;
+ await ImportTokenUtil.analyzeImageFile(
+ result.files.single.path!,
+ context: context,
+ );
+ },
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.scanFromClipboard,
+ onSelected: () {
+ ScreenCapturerPlatform.instance
+ .readImageFromClipboard()
+ .then((value) {
+ if (value != null) {
+ ImportTokenUtil.analyzeImage(value, context: context);
+ } else {
+ IToast.showTop(appLocalizations.clipboardNoImage);
+ }
+ });
+ },
+ ),
+ ]),
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.scanFromRegionCapture,
+ onSelected: () => capture(CaptureMode.region),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.scanFromWindowCapture,
+ onSelected: () => capture(CaptureMode.window),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.scanFromScreenCapture,
+ onSelected: () => capture(CaptureMode.screen),
+ ),
+ ]),
+ ],
+ ),
+ ]),
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.exportImport,
+ shortcut: const SingleActivator(
+ LogicalKeyboardKey.keyI,
+ control: true,
+ alt: true,
+ ),
+ onSelected: () => RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ const ImportExportTokenScreen(),
+ ),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.importFromThirdParty,
+ onSelected: () => RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ const ImportFromThirdPartyBottomSheet(),
+ ),
+ ),
+ ]),
+ PlatformMenuItemGroup(members: [
+ PlatformMenuItem(
+ label: appLocalizations.cloudBackupServiceSetting,
+ onSelected: () => RouteUtil.pushDialogRoute(
+ chewieProvider.rootContext,
+ const CloudServiceScreen(showBack: false),
+ ),
+ ),
+ ]),
+ ],
+ ),
+ // View menu
+ PlatformMenu(
+ label: appLocalizations.menuView,
+ menus: [
+ PlatformMenu(
+ label: appLocalizations.changeLayoutType,
+ menus: [
+ PlatformMenuItem(
+ label: _checked(appLocalizations.simpleLayoutType,
+ homeScreenState?.layoutType == LayoutType.Simple),
+ onSelected: () =>
+ homeScreenState?.changeLayoutType(LayoutType.Simple),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.compactLayoutType,
+ homeScreenState?.layoutType == LayoutType.Compact),
+ onSelected: () =>
+ homeScreenState?.changeLayoutType(LayoutType.Compact),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.listLayoutType,
+ homeScreenState?.layoutType == LayoutType.List),
+ onSelected: () =>
+ homeScreenState?.changeLayoutType(LayoutType.List),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.spotlightLayoutType,
+ homeScreenState?.layoutType == LayoutType.Spotlight),
+ onSelected: () =>
+ homeScreenState?.changeLayoutType(LayoutType.Spotlight),
+ ),
+ ],
+ ),
+ PlatformMenu(
+ label: appLocalizations.menuSortOrder,
+ menus: [
+ PlatformMenuItem(
+ label: _checked(appLocalizations.defaultOrder,
+ homeScreenState?.orderType == OrderType.Default),
+ onSelected: () =>
+ homeScreenState?.changeOrderType(type: OrderType.Default),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.alphabeticalASCOrder,
+ homeScreenState?.orderType == OrderType.AlphabeticalASC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.AlphabeticalASC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.alphabeticalDESCOrder,
+ homeScreenState?.orderType == OrderType.AlphabeticalDESC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.AlphabeticalDESC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.copyTimesDESCOrder,
+ homeScreenState?.orderType == OrderType.CopyTimesDESC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.CopyTimesDESC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.copyTimesASCOrder,
+ homeScreenState?.orderType == OrderType.CopyTimesASC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.CopyTimesASC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.lastCopyTimeDESCOrder,
+ homeScreenState?.orderType == OrderType.LastCopyTimeDESC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.LastCopyTimeDESC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.lastCopyTimeASCOrder,
+ homeScreenState?.orderType == OrderType.LastCopyTimeASC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.LastCopyTimeASC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.createTimeDESCOrder,
+ homeScreenState?.orderType == OrderType.CreateTimeDESC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.CreateTimeDESC),
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.createTimeASCOrder,
+ homeScreenState?.orderType == OrderType.CreateTimeASC),
+ onSelected: () => homeScreenState?.changeOrderType(
+ type: OrderType.CreateTimeASC),
+ ),
+ ],
+ ),
+ PlatformMenuItemGroup(members: [
+ PlatformMenu(
+ label: appLocalizations.themeMode,
+ menus: [
+ PlatformMenuItem(
+ label: _checked(appLocalizations.followSystem,
+ appProvider.themeMode == ActiveThemeMode.system),
+ onSelected: () {
+ appProvider.themeMode = ActiveThemeMode.system;
+ setState(() {});
+ },
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.lightTheme,
+ appProvider.themeMode == ActiveThemeMode.light),
+ onSelected: () {
+ appProvider.themeMode = ActiveThemeMode.light;
+ setState(() {});
+ },
+ ),
+ PlatformMenuItem(
+ label: _checked(appLocalizations.darkTheme,
+ appProvider.themeMode == ActiveThemeMode.dark),
+ onSelected: () {
+ appProvider.themeMode = ActiveThemeMode.dark;
+ setState(() {});
+ },
+ ),
+ ],
+ ),
+ PlatformMenu(
+ label: appLocalizations.language,
+ menus: LocaleUtil.localeLabels
+ .map((tuple) => PlatformMenuItem(
+ label: _checked(
+ tuple.item1,
+ appProvider.locale?.toString() ==
+ tuple.item2?.toString()),
+ onSelected: () {
+ appProvider.locale = tuple.item2;
+ setState(() {});
+ },
+ ))
+ .toList(),
+ ),
+ PlatformMenu(
+ label: appLocalizations.fontFamily,
+ menus: CustomFont.getAllFonts()
+ .map((font) => PlatformMenuItem(
+ label: _checked(
+ font.intlFontName, appProvider.currentFont == font),
+ onSelected: () {
+ CustomFont.loadFont(context, font,
+ autoRestartApp: true);
+ },
+ ))
+ .toList(),
+ ),
+ ]),
+ ],
+ ),
+ // Tokens menu
+ PlatformMenu(
+ label: appLocalizations.menuTokens,
+ menus: [
+ if (_menuTokens.isNotEmpty)
+ PlatformMenu(
+ label: appLocalizations.allTokens,
+ menus: _menuTokens
+ .map((token) => PlatformMenuItem(
+ label: token.issuer,
+ onSelected: () => _copyTokenCode(token),
+ ))
+ .toList(),
+ ),
+ ..._menuCategories.map(
+ (category) => PlatformMenu(
+ label: category.title,
+ menus: category.tokens
+ .map((token) => PlatformMenuItem(
+ label: token.issuer,
+ onSelected: () => _copyTokenCode(token),
+ ))
+ .toList(),
+ ),
+ ),
+ ],
+ ),
+ // Window menu
+ // PlatformMenu(
+ // label: appLocalizations.menuWindow,
+ // menus: [
+ // PlatformMenuItemGroup(members: [
+ // PlatformMenuItem(
+ // label: appLocalizations.minimize,
+ // shortcut: const SingleActivator(
+ // LogicalKeyboardKey.keyM,
+ // meta: true,
+ // ),
+ // onSelected: () => windowManager.minimize(),
+ // ),
+ // PlatformMenuItem(
+ // label: appLocalizations.zoom,
+ // onSelected: () => ResponsiveUtil.maximizeOrRestore(),
+ // ),
+ // ]),
+ // PlatformMenuItemGroup(members: [
+ // PlatformMenuItem(
+ // label: appLocalizations.lock,
+ // shortcut: const SingleActivator(
+ // LogicalKeyboardKey.keyL,
+ // control: true,
+ // alt: true,
+ // ),
+ // onSelected: () => ShortcutsUtil.lock(context),
+ // ),
+ // ]),
+ // ],
+ // ),
+ // Help menu
+ PlatformMenu(
+ label: appLocalizations.menuHelp,
+ menus: [
+ PlatformMenuItem(
+ label: appLocalizations.shortcutHelp,
+ shortcut: const SingleActivator(LogicalKeyboardKey.f1),
+ onSelected: () => ShortcutsUtil.showShortcutHelp(context),
+ ),
+ PlatformMenuItem(
+ label: 'GitHub',
+ onSelected: () => UriUtil.launchUrlUri(context, repoUrl),
+ ),
+ PlatformMenuItem(
+ label: appLocalizations.officialWebsite,
+ onSelected: () => UriUtil.launchUrlUri(context, officialWebsite),
+ ),
+ ],
+ ),
+ ];
}
_buildDesktopBody() {
@@ -249,6 +719,9 @@ class MainScreenState extends BaseWindowState
}
refresh() {
+ if (ResponsiveUtil.isMacOS()) {
+ _loadMenuTokenData();
+ }
setState(() {});
}
@@ -504,11 +977,14 @@ class MainScreenState extends BaseWindowState
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- ResponsiveUtil.selectByResponsive(
- desktop: const SizedBox(height: 8),
- landscape: const SizedBox(height: 12),
- portrait: const SizedBox(height: 8),
- ),
+ SizedBox(
+ height: ResponsiveUtil.isMacOS()
+ ? 38
+ : ResponsiveUtil.isDesktop()
+ ? 8
+ : ResponsiveUtil.isLandscapeLayout()
+ ? 12
+ : 8),
_buildLogo(),
const SizedBox(height: 8),
ToolButton(
diff --git a/lib/TokenUtils/ThirdParty/2fas_importer.dart b/lib/TokenUtils/ThirdParty/2fas_importer.dart
index bb3a5e21..0014fd84 100644
--- a/lib/TokenUtils/ThirdParty/2fas_importer.dart
+++ b/lib/TokenUtils/ThirdParty/2fas_importer.dart
@@ -92,13 +92,9 @@ class TwoFASToken {
OtpToken toOtpToken() {
OtpToken token = OtpToken.init();
- token.uid = serviceTypeID;
token.issuer = otp.issuer;
token.account = otp.account;
token.secret = secret;
- // token.counterString = otp.digits > 0
- // ? otp.digits.toString()
- // : token.tokenType.defaultDigits.toString();
token.digits = otp.digits > 0
? OtpDigits.fromString(otp.digits.toString())
: token.tokenType.defaultDigits;
@@ -110,10 +106,10 @@ class TwoFASToken {
return token;
}
- List getBindings() {
+ List getBindings(String tokenUid) {
return [
TokenCategoryBinding(
- tokenUid: serviceTypeID,
+ tokenUid: tokenUid,
categoryUid: groupId,
),
];
@@ -219,7 +215,10 @@ class TwoFASTokenImporter implements BaseTokenImporter {
}
categories = twoFASGroups.map((e) => e.toTokenCategory()).toList();
tokens = twoFASTokens.map((e) => e.toOtpToken()).toList();
- bindings = twoFASTokens.expand((e) => e.getBindings()).toList();
+ bindings = [];
+ for (int i = 0; i < twoFASTokens.length; i++) {
+ bindings.addAll(twoFASTokens[i].getBindings(tokens[i].uid));
+ }
await BaseTokenImporter.importResult(
ImporterResult(tokens, categories, bindings));
}
diff --git a/lib/TokenUtils/ThirdParty/aegis_importer.dart b/lib/TokenUtils/ThirdParty/aegis_importer.dart
index c3848743..760cbbd9 100644
--- a/lib/TokenUtils/ThirdParty/aegis_importer.dart
+++ b/lib/TokenUtils/ThirdParty/aegis_importer.dart
@@ -394,7 +394,7 @@ class AegisTokenImporter implements BaseTokenImporter {
try {
return decryptSlot(slot, passwordBytes);
} catch (e) {
- return null;
+ continue;
}
}
return null;
diff --git a/lib/TokenUtils/ThirdParty/base_token_importer.dart b/lib/TokenUtils/ThirdParty/base_token_importer.dart
index 7fda039d..e30a9ba7 100644
--- a/lib/TokenUtils/ThirdParty/base_token_importer.dart
+++ b/lib/TokenUtils/ThirdParty/base_token_importer.dart
@@ -17,8 +17,7 @@ import 'package:cloudotp/Models/token_category_binding.dart';
import '../../Models/opt_token.dart';
import '../../Models/token_category.dart';
-import '../../l10n/l10n.dart';
-import '../import_token_util.dart';
+import '../../Screens/Token/import_preview_screen.dart';
enum DecryptResult {
success,
@@ -33,9 +32,6 @@ abstract class BaseTokenImporter {
});
static importResult(ImporterResult res) async {
- ImportAnalysis analysis = ImportAnalysis();
- analysis.parseSuccess = res.tokens.length;
- analysis.parseCategorySuccess = res.categories.length;
for (TokenCategoryBinding binding in res.bindings) {
res.categories
.where((element) => element.uid == binding.categoryUid)
@@ -43,13 +39,11 @@ abstract class BaseTokenImporter {
element.bindings.add(binding.tokenUid);
});
}
- ImportAnalysis tmpAnalysis = await ImportTokenUtil.mergeTokensAndCategories(
- res.tokens,
- res.categories,
+ ImportPreviewScreen.show(
+ tokens: res.tokens,
+ categories: res.categories,
+ errors: res.errors,
);
- analysis.importSuccess = tmpAnalysis.importSuccess;
- analysis.importCategorySuccess = tmpAnalysis.importCategorySuccess;
- analysis.showToast(appLocalizations.fileDoesNotContainToken);
}
}
@@ -57,6 +51,20 @@ class ImporterResult {
final List tokens;
final List categories;
final List bindings;
+ final List errors;
- ImporterResult(this.tokens, this.categories, this.bindings);
+ ImporterResult(this.tokens, this.categories, this.bindings,
+ [this.errors = const []]);
+}
+
+class ImportTokenError {
+ final String issuer;
+ final String account;
+ final String reason;
+
+ ImportTokenError({
+ required this.issuer,
+ required this.account,
+ required this.reason,
+ });
}
diff --git a/lib/TokenUtils/import_token_util.dart b/lib/TokenUtils/import_token_util.dart
index 2dc53420..312f6743 100644
--- a/lib/TokenUtils/import_token_util.dart
+++ b/lib/TokenUtils/import_token_util.dart
@@ -30,7 +30,9 @@ import 'package:zxing2/qrcode.dart';
import '../Database/category_dao.dart';
import '../Database/config_dao.dart';
+import '../Database/token_category_binding_dao.dart';
import '../Models/token_category.dart';
+import '../Screens/Token/import_preview_screen.dart';
import '../Utils/constant.dart';
import '../Utils/hive_util.dart';
import '../Widgets/BottomSheet/token_option_bottom_sheet.dart';
@@ -38,6 +40,7 @@ import '../l10n/l10n.dart';
import 'Backup/backup.dart';
import 'Backup/backup_encrypt_interface.dart';
import 'Backup/backup_encrypt_v1.dart';
+import 'ThirdParty/base_token_importer.dart';
extension TrimPadding on String {
String trimPadding() {
@@ -46,47 +49,47 @@ extension TrimPadding on String {
}
class ImportAnalysis {
- int parseFailed;
-
- int parseSuccess;
-
- int importSuccess;
-
+ int parseTokenSuccess;
+ int parseTokenFailed;
+ int importTokenSuccess;
int parseCategorySuccess;
-
int importCategorySuccess;
- int importConfigSuccess;
-
- int importCloudServiceConfigSuccess;
-
ImportAnalysis({
- this.parseFailed = 0,
- this.parseSuccess = 0,
- this.importSuccess = 0,
+ this.parseTokenSuccess = 0,
+ this.parseTokenFailed = 0,
+ this.importTokenSuccess = 0,
this.parseCategorySuccess = 0,
this.importCategorySuccess = 0,
- this.importConfigSuccess = 0,
- this.importCloudServiceConfigSuccess = 0,
});
showToast([String noTokenToast = ""]) {
- String tokenToast =
- appLocalizations.importResultTip(importSuccess, parseSuccess);
- String categoryToast = appLocalizations.importCategoryResultTip(
- importCategorySuccess, parseCategorySuccess);
- if (parseSuccess > 0) {
- if (parseCategorySuccess > 0) {
- IToast.showTop("$tokenToast; $categoryToast");
+ ILogger.info(toString());
+ List parts = [];
+ if (parseTokenSuccess > 0 || parseTokenFailed > 0) {
+ if (parseTokenFailed > 0) {
+ parts.add(appLocalizations.importTokenResultWithError(
+ parseTokenSuccess, parseTokenFailed, importTokenSuccess));
} else {
- IToast.showTop(tokenToast);
+ parts.add(appLocalizations.importTokenResult(
+ parseTokenSuccess, importTokenSuccess));
}
- } else if (parseCategorySuccess > 0) {
- IToast.showTop(categoryToast);
+ }
+ if (parseCategorySuccess > 0) {
+ parts.add(appLocalizations.importCategoryResult(
+ parseCategorySuccess, importCategorySuccess));
+ }
+ if (parts.isNotEmpty) {
+ IToast.showTop(parts.join("; "));
} else {
IToast.showTop(noTokenToast);
}
}
+
+ @override
+ String toString() {
+ return "ImportAnalysis(parseTokenSuccess: $parseTokenSuccess, parseTokenFailed: $parseTokenFailed, importTokenSuccess: $importTokenSuccess, parseCategorySuccess: $parseCategorySuccess, importCategorySuccess: $importCategorySuccess)";
+ }
}
class ImportTokenUtil {
@@ -298,13 +301,13 @@ class ImportTokenUtil {
IToast.showTop(appLocalizations.importFailed);
return true;
}
- ImportAnalysis analysis = ImportAnalysis();
- analysis.parseSuccess = tokens.length;
- analysis.importSuccess = await mergeTokens(tokens);
if (showLoading) {
CustomLoadingDialog.dismissLoading();
}
- analysis.showToast(appLocalizations.fileDoesNotContainToken);
+ ImportPreviewScreen.show(
+ tokens: tokens,
+ categories: [],
+ );
return true;
}
} catch (e, t) {
@@ -458,16 +461,10 @@ class ImportTokenUtil {
Backup backup = await compute((_) async {
return await BackupEncryptionV1().decrypt(content, tmpPassword);
}, null);
- ImportAnalysis analysis = ImportAnalysis();
- analysis.parseSuccess = backup.tokens.length;
- analysis.parseCategorySuccess = backup.categories.length;
- ImportAnalysis tmpAnalysis = await mergeTokensAndCategories(
- backup.tokens,
- backup.categories,
+ ImportPreviewScreen.show(
+ tokens: backup.tokens,
+ categories: backup.categories,
);
- analysis.importSuccess = tmpAnalysis.importSuccess;
- analysis.importCategorySuccess = tmpAnalysis.importCategorySuccess;
- analysis.showToast(appLocalizations.fileDoesNotContainToken);
return true;
}
@@ -485,7 +482,6 @@ class ImportTokenUtil {
if (showLoading) {
CustomLoadingDialog.showLoading(title: appLocalizations.importing);
}
- ImportAnalysis analysis = ImportAnalysis();
List lines = content.split("\n");
List tokens = [];
for (String line in lines) {
@@ -493,16 +489,19 @@ class ImportTokenUtil {
List parsedTokens = OtpTokenParser.parseUri(line);
if (parsedTokens.isNotEmpty) {
tokens.addAll(parsedTokens);
- analysis.parseSuccess += parsedTokens.length;
- } else {
- analysis.parseFailed++;
}
}
- analysis.importSuccess = await mergeTokens(tokens);
if (showLoading) {
CustomLoadingDialog.dismissLoading();
}
- if (showToast) analysis.showToast(noTokenToast);
+ if (tokens.isEmpty) {
+ if (showToast && noTokenToast.isNotEmpty) IToast.showTop(noTokenToast);
+ return [];
+ }
+ ImportPreviewScreen.show(
+ tokens: tokens,
+ categories: [],
+ );
return tokens;
}
@@ -620,7 +619,7 @@ class ImportTokenUtil {
return null;
}
- static bool checkCategoryExist(
+ static TokenCategory? findExistingCategory(
TokenCategory category,
List categoryList,
) {
@@ -630,10 +629,10 @@ class ImportTokenUtil {
category.uid = StringUtil.generateUid();
}
if (tokenCategory.title == category.title) {
- return true;
+ return tokenCategory;
}
}
- return false;
+ return null;
}
static Future mergeTokensAndCategories(
@@ -642,7 +641,9 @@ class ImportTokenUtil {
bool performInsert = true,
}) async {
ImportAnalysis analysis = ImportAnalysis();
- analysis.importSuccess = await mergeTokens(tokenList);
+ analysis.parseTokenSuccess = tokenList.length;
+ analysis.parseCategorySuccess = categoryList.length;
+ analysis.importTokenSuccess = await mergeTokens(tokenList);
Map uidMap = await getAlreadyExistUid(tokenList);
for (TokenCategory category in categoryList) {
category.bindings = category.bindings.map((e) => uidMap[e] ?? e).toList();
@@ -661,8 +662,10 @@ class ImportTokenUtil {
if (toMergeToken.issuer.isEmpty) {
toMergeToken.issuer = toMergeToken.account;
}
- toMergeToken.imagePath =
- TokenImageUtil.matchBrandLogo(toMergeToken) ?? "";
+ if (toMergeToken.imagePath.isEmpty) {
+ toMergeToken.imagePath =
+ TokenImageUtil.matchBrandLogo(toMergeToken) ?? "";
+ }
OtpToken? alreadyToken = checkTokenExist(toMergeToken, already);
if (alreadyToken == null &&
checkTokenExist(toMergeToken, finalMergeTokenList) == null) {
@@ -695,16 +698,208 @@ class ImportTokenUtil {
}
List already = await CategoryDao.listCategories();
List newCategoryList = [];
+ List updatedCategoryList = [];
for (TokenCategory category in categoryList) {
- if (!checkCategoryExist(category, already) &&
- !checkCategoryExist(category, newCategoryList)) {
+ TokenCategory? existingInDb = findExistingCategory(category, already);
+ TokenCategory? existingInNew =
+ findExistingCategory(category, newCategoryList);
+ if (existingInDb != null) {
+ bool needUpdate = false;
+ if (category.pinned && !existingInDb.pinned) {
+ existingInDb.pinned = true;
+ needUpdate = true;
+ }
+ if (category.bindings.isNotEmpty) {
+ for (String binding in category.bindings) {
+ if (!existingInDb.bindings.contains(binding)) {
+ existingInDb.bindings.add(binding);
+ needUpdate = true;
+ }
+ }
+ }
+ if (needUpdate) {
+ updatedCategoryList.add(existingInDb);
+ }
+ } else if (existingInNew == null) {
newCategoryList.add(category);
}
}
if (performInsert) {
await CategoryDao.insertCategories(newCategoryList);
+ if (updatedCategoryList.isNotEmpty) {
+ await CategoryDao.updateCategories(updatedCategoryList);
+ for (TokenCategory cat in updatedCategoryList) {
+ if (cat.bindings.isNotEmpty) {
+ await BindingDao.bingdingsForCategory(cat.uid, cat.bindings);
+ }
+ }
+ }
homeScreenState?.refresh();
}
return newCategoryList.length;
}
+
+ static Future> previewImport(
+ List tokens, {
+ List errors = const [],
+ }) async {
+ List already = await TokenDao.listTokens();
+ List items = [];
+ for (OtpToken token in tokens) {
+ if (token.issuer.isEmpty) {
+ token.issuer = token.account;
+ }
+ if (token.imagePath.isEmpty) {
+ token.imagePath = TokenImageUtil.matchBrandLogo(token) ?? "";
+ }
+ OtpToken? existing = checkTokenExist(token, already);
+ if (existing != null) {
+ items.add(ImportTokenItem(
+ token: token,
+ existingToken: existing,
+ status: ImportTokenStatus.duplicate,
+ selected: false,
+ ));
+ } else {
+ items.add(ImportTokenItem(
+ token: token,
+ status: ImportTokenStatus.ready,
+ selected: true,
+ ));
+ }
+ }
+ for (ImportTokenError error in errors) {
+ OtpToken placeholder = OtpToken.init();
+ placeholder.issuer = error.issuer;
+ placeholder.account = error.account;
+ items.add(ImportTokenItem(
+ token: placeholder,
+ status: ImportTokenStatus.error,
+ errorReason: error.reason,
+ selected: false,
+ ));
+ }
+ return items;
+ }
+
+ static Future> previewCategories(
+ List categories,
+ ) async {
+ List already = await CategoryDao.listCategories();
+ List items = [];
+ for (TokenCategory category in categories) {
+ TokenCategory? existingCat =
+ already.where((e) => e.title == category.title).firstOrNull;
+ items.add(ImportCategoryItem(
+ category: category,
+ existingCategory: existingCat,
+ isNew: existingCat == null,
+ selected: existingCat == null,
+ ));
+ }
+ return items;
+ }
+
+ static Future confirmImport(
+ List selectedTokens,
+ List categories, {
+ bool overwriteExisting = false,
+ List tokenItems = const [],
+ List categoryItems = const [],
+ }) async {
+ ImportAnalysis analysis = ImportAnalysis();
+ analysis.parseTokenSuccess =
+ tokenItems.where((e) => e.status != ImportTokenStatus.error).length;
+ analysis.parseTokenFailed =
+ tokenItems.where((e) => e.status == ImportTokenStatus.error).length;
+ analysis.parseCategorySuccess = categoryItems.length;
+ if (!overwriteExisting) {
+ var result =
+ await mergeTokensAndCategories(selectedTokens, categories);
+ analysis.importTokenSuccess = result.importTokenSuccess;
+ analysis.importCategorySuccess = result.importCategorySuccess;
+ return analysis;
+ }
+ Set selectedUids = selectedTokens.map((t) => t.uid).toSet();
+ List newTokens = [];
+ List overwriteTokens = [];
+ for (var item in tokenItems) {
+ if (!selectedUids.contains(item.token.uid)) continue;
+ if (item.status == ImportTokenStatus.duplicate &&
+ item.existingToken != null) {
+ OtpToken existing = item.existingToken!;
+ existing.pinned = item.token.pinned;
+ existing.imagePath = item.token.imagePath;
+ existing.description = item.token.description;
+ overwriteTokens.add(existing);
+ } else if (item.status == ImportTokenStatus.ready) {
+ newTokens.add(item.token);
+ }
+ }
+ analysis.importTokenSuccess = await mergeTokens(newTokens);
+ if (overwriteTokens.isNotEmpty) {
+ await TokenDao.updateTokens(overwriteTokens);
+ analysis.importTokenSuccess += overwriteTokens.length;
+ }
+ Map uidMap =
+ await getAlreadyExistUid([...newTokens, ...selectedTokens]);
+ List newCategories = [];
+ for (var catItem in categoryItems) {
+ if (!catItem.selected) continue;
+ var cat = catItem.category;
+ cat.bindings = cat.bindings.map((e) => uidMap[e] ?? e).toList();
+ if (!catItem.isNew && catItem.existingCategory != null) {
+ TokenCategory existing = catItem.existingCategory!;
+ existing.pinned = cat.pinned;
+ existing.description = cat.description;
+ existing.bindings = cat.bindings;
+ await CategoryDao.updateCategories([existing]);
+ await BindingDao.bingdingsForCategory(existing.uid, existing.bindings);
+ analysis.importCategorySuccess++;
+ } else if (catItem.isNew) {
+ newCategories.add(cat);
+ }
+ }
+ if (newCategories.isNotEmpty) {
+ analysis.importCategorySuccess += await mergeCategories(newCategories);
+ }
+ homeScreenState?.refresh();
+ return analysis;
+ }
+}
+
+enum ImportTokenStatus {
+ ready,
+ duplicate,
+ error,
+}
+
+class ImportTokenItem {
+ final OtpToken token;
+ final OtpToken? existingToken;
+ final ImportTokenStatus status;
+ final String? errorReason;
+ bool selected;
+
+ ImportTokenItem({
+ required this.token,
+ this.existingToken,
+ required this.status,
+ this.errorReason,
+ required this.selected,
+ });
+}
+
+class ImportCategoryItem {
+ final TokenCategory category;
+ final TokenCategory? existingCategory;
+ final bool isNew;
+ bool selected;
+
+ ImportCategoryItem({
+ required this.category,
+ this.existingCategory,
+ required this.isNew,
+ required this.selected,
+ });
}
diff --git a/lib/TokenUtils/otp_token_parser.dart b/lib/TokenUtils/otp_token_parser.dart
index 4ce1a495..3b583975 100644
--- a/lib/TokenUtils/otp_token_parser.dart
+++ b/lib/TokenUtils/otp_token_parser.dart
@@ -51,6 +51,9 @@ class OtpTokenParser {
default:
break;
}
+ if (token.imagePath.isNotEmpty) {
+ uriText += "&image=${token.imagePath}";
+ }
return Uri.parse(Uri.encodeFull(uriText));
}
@@ -171,7 +174,13 @@ class OtpTokenParser {
);
}
}
- token.imagePath = TokenImageUtil.matchBrandLogo(token) ?? "";
+ if (queryParameters.containsKey("image") &&
+ queryParameters["image"].notNullOrEmpty) {
+ token.imagePath = queryParameters["image"]!;
+ }
+ if (token.imagePath.isEmpty) {
+ token.imagePath = TokenImageUtil.matchBrandLogo(token) ?? "";
+ }
return token;
}
@@ -213,7 +222,9 @@ class OtpTokenParser {
token.secret = queryParameters["secret"]!;
if (!CheckTokenUtil.isSecretBase32(token.secret)) return null;
}
- token.imagePath = TokenImageUtil.matchBrandLogo(token) ?? "";
+ if (token.imagePath.isEmpty) {
+ token.imagePath = TokenImageUtil.matchBrandLogo(token) ?? "";
+ }
return token;
}
diff --git a/lib/TokenUtils/token_image_util.dart b/lib/TokenUtils/token_image_util.dart
index dd3d9fea..6d8e481c 100644
--- a/lib/TokenUtils/token_image_util.dart
+++ b/lib/TokenUtils/token_image_util.dart
@@ -13,8 +13,6 @@
* If not, see .
*/
-import 'dart:convert';
-
import 'package:awesome_chewie/awesome_chewie.dart';
import 'package:cloudotp/Models/opt_token.dart';
import 'package:flutter/services.dart';
@@ -26,9 +24,9 @@ class TokenImageUtil {
static final Map> _matchCache = {};
static loadBrandLogos() async {
- final manifestContent = await rootBundle.loadString('AssetManifest.json');
- final Map manifestMap = json.decode(manifestContent);
- final brandFiles = manifestMap.keys
+ final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
+ final brandFiles = assetManifest
+ .listAssets()
.where((String key) =>
key.startsWith('assets/brand/') && key.endsWith('.png'))
.toList();
diff --git a/lib/Utils/hive_util.dart b/lib/Utils/hive_util.dart
index 97eaf09b..81a52a8a 100644
--- a/lib/Utils/hive_util.dart
+++ b/lib/Utils/hive_util.dart
@@ -81,6 +81,7 @@ class CloudOTPHiveUtil {
static const String autoLockKey = "autoLock";
static const String autoLockTimeKey = "autoLockTime";
static const String enableSafeModeKey = "enableSafeMode";
+ static const String hideGestureTrailKey = "hideGestureTrail";
//System
static const String oldVersionKey = "oldVersion";
diff --git a/lib/Utils/utils.dart b/lib/Utils/utils.dart
index 6010f396..0fe2fe74 100644
--- a/lib/Utils/utils.dart
+++ b/lib/Utils/utils.dart
@@ -155,7 +155,12 @@ class Utils {
await trayManager.setIcon('assets/logo-transparent.png');
}
- bool lauchAtStartup = await LaunchAtStartup.instance.isEnabled();
+ bool lauchAtStartup = false;
+ try {
+ lauchAtStartup = await LaunchAtStartup.instance.isEnabled();
+ } catch (e, t) {
+ ILogger.error("Failed to check LaunchAtStartup in tray", e, t);
+ }
if (!ResponsiveUtil.isLinux()) {
ILogger.debug(
"Setting tray tooltip to app name ${ResponsiveUtil.appName}");
@@ -241,7 +246,12 @@ class Utils {
await trayManager.setIcon('assets/logo-transparent.png');
}
- bool lauchAtStartup = await LaunchAtStartup.instance.isEnabled();
+ bool lauchAtStartup = false;
+ try {
+ lauchAtStartup = await LaunchAtStartup.instance.isEnabled();
+ } catch (e, t) {
+ ILogger.error("Failed to check LaunchAtStartup in initSimpleTray", e, t);
+ }
if (!ResponsiveUtil.isLinux()) {
await trayManager.setToolTip(ResponsiveUtil.appName);
}
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index 22ecfa26..f93ec681 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -589,8 +589,28 @@
"clipboardNoImage": "No image in clipboard",
"importSuccess": "Import successful",
"copySuccess": "Copied to clipboard",
- "importResultTip": "{parseSuccess} tokens parsed successfully, {importSuccess} tokens imported successfully",
- "importCategoryResultTip": "{parseSuccess} categories found, {importSuccess} categories imported successfully",
+ "importTokenResult": "Parsed {parseSuccess} tokens, imported {importSuccess}",
+ "@importTokenResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importTokenResultWithError": "Parsed {parseSuccess} tokens ({parseFailed} failed), imported {importSuccess}",
+ "@importTokenResultWithError": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "parseFailed": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importCategoryResult": "Parsed {parseSuccess} categories, imported {importSuccess}",
+ "@importCategoryResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
"importFailed": "Import failed",
"searchIconName": "Search icon name",
"setIconForToken": "Choose token icon",
@@ -704,8 +724,75 @@
"cloudBackupSettings": "Cloud Backup",
"databaseEncryptionSettings": "Database Encryption",
"gestureLockSettings": "Gesture Lock",
+ "hideGestureTrail": "Hide Gesture Trail",
+ "hideGestureTrailTip": "Hide the drawn pattern when unlocking",
"autoLockSettings": "Auto Lock",
"projectRepoAbout": "Project Repository",
"appAbout": "App",
- "contactAbout": "Contact"
+ "contactAbout": "Contact",
+ "menuFile": "File",
+ "menuEdit": "Edit",
+ "menuView": "View",
+ "menuWindow": "Window",
+ "menuHelp": "Help",
+ "quit": "Quit",
+ "minimize": "Minimize",
+ "zoom": "Zoom",
+ "notificationPermissionDenied": "Notification permission has been denied. Please enable it in System Settings to receive desktop notifications.",
+ "notificationPermissionRequest": "Desktop notification permission is required. Go to System Settings to enable it?",
+ "goToSettings": "Go to Settings",
+ "menuTokens": "Tokens",
+ "menuSortOrder": "Sort Order",
+ "importPreview": "Import Preview",
+ "importReady": "Ready",
+ "importDuplicate": "Duplicate",
+ "importError": "Error",
+ "importSelectedCount": "Import {count} tokens",
+ "@importSelectedCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "importSelectAll": "Select All",
+ "importDeselectAll": "Deselect All",
+ "importInvalidData": "Invalid token data",
+ "importNoTokens": "No tokens to import",
+ "importCategoryNew": "New",
+ "importCategoryExisting": "Existing",
+ "importCategoryContains": "Contains: {names} ({count} tokens)",
+ "@importCategoryContains": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importCategoryContainsMore": "Contains: {names}... ({count} tokens)",
+ "@importCategoryContainsMore": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedCategoryCount": "Import {count} categories",
+ "@importSelectedCategoryCount": {
+ "placeholders": {
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedBothCount": "Import {tokenCount} tokens and {categoryCount} categories",
+ "@importSelectedBothCount": {
+ "placeholders": {
+ "tokenCount": {"type": "int"},
+ "categoryCount": {"type": "int"}
+ }
+ },
+ "importOverwriteExisting": "Overwrite",
+ "importOverwrite": "Overwrite",
+ "importMergeStrategy": "Merge Strategy",
+ "importKeepLocal": "Keep Local",
+ "importOverwriteLocal": "Overwrite Local",
+ "tokenCount": "Tokens",
+ "categoryCount": "Categories"
}
\ No newline at end of file
diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb
index 45157f93..6159ba94 100644
--- a/lib/l10n/intl_ja.arb
+++ b/lib/l10n/intl_ja.arb
@@ -589,8 +589,28 @@
"clipboardNoImage": "クリップボードに画像がありません",
"importSuccess": "インポート成功",
"copySuccess": "クリップボードにコピーしました",
- "importResultTip": "解析成功トークン数: {parseSuccess}、インポート成功トークン数: {importSuccess}",
- "importCategoryResultTip": "カテゴリの合計数: {parseSuccess}、インポート成功カテゴリ数: {importSuccess}",
+ "importTokenResult": "解析 {parseSuccess} 個のトークン、インポート {importSuccess} 個",
+ "@importTokenResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importTokenResultWithError": "解析 {parseSuccess} 個のトークン(失敗 {parseFailed} 個)、インポート {importSuccess} 個",
+ "@importTokenResultWithError": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "parseFailed": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importCategoryResult": "解析 {parseSuccess} 個のカテゴリ、インポート {importSuccess} 個",
+ "@importCategoryResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
"importFailed": "インポート失敗",
"searchIconName": "アイコン名を検索",
"setIconForToken": "トークンのアイコンを選択",
@@ -704,8 +724,75 @@
"cloudBackupSettings": "クラウドバックアップ",
"databaseEncryptionSettings": "データベース暗号化",
"gestureLockSettings": "ジェスチャーロック",
+ "hideGestureTrail": "ジェスチャー軌跡を隠す",
+ "hideGestureTrailTip": "ロック解除時にパターンを非表示にする",
"autoLockSettings": "自動ロック",
"projectRepoAbout": "プロジェクトリポジトリ",
"appAbout": "APP",
- "contactAbout": "お問い合わせ"
+ "contactAbout": "お問い合わせ",
+ "menuFile": "ファイル",
+ "menuEdit": "編集",
+ "menuView": "表示",
+ "menuWindow": "ウインドウ",
+ "menuHelp": "ヘルプ",
+ "quit": "終了",
+ "minimize": "最小化",
+ "zoom": "拡大/縮小",
+ "notificationPermissionDenied": "通知の権限が拒否されています。デスクトップ通知を受信するには、システム設定で有効にしてください。",
+ "notificationPermissionRequest": "デスクトップ通知の権限が必要です。システム設定で有効にしますか?",
+ "goToSettings": "設定を開く",
+ "menuTokens": "トークン",
+ "menuSortOrder": "並べ替え",
+ "importPreview": "インポートプレビュー",
+ "importReady": "インポート可能",
+ "importDuplicate": "重複",
+ "importError": "エラー",
+ "importSelectedCount": "{count} 個のトークンをインポート",
+ "@importSelectedCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "importSelectAll": "すべて選択",
+ "importDeselectAll": "すべて解除",
+ "importInvalidData": "無効なトークンデータ",
+ "importNoTokens": "インポートするトークンがありません",
+ "importCategoryNew": "新規",
+ "importCategoryExisting": "既存",
+ "importCategoryContains": "含む: {names} ({count}個のトークン)",
+ "@importCategoryContains": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importCategoryContainsMore": "含む: {names}… ({count}個のトークン)",
+ "@importCategoryContainsMore": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedCategoryCount": "{count} 個のカテゴリをインポート",
+ "@importSelectedCategoryCount": {
+ "placeholders": {
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedBothCount": "{tokenCount} 個のトークンと{categoryCount} 個のカテゴリをインポート",
+ "@importSelectedBothCount": {
+ "placeholders": {
+ "tokenCount": {"type": "int"},
+ "categoryCount": {"type": "int"}
+ }
+ },
+ "importOverwriteExisting": "上書き",
+ "importOverwrite": "上書き",
+ "importMergeStrategy": "マージ方法",
+ "importKeepLocal": "ローカルを保持",
+ "importOverwriteLocal": "ローカルを上書き",
+ "tokenCount": "トークン",
+ "categoryCount": "カテゴリ"
}
\ No newline at end of file
diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb
index 263c26b7..dc508a52 100644
--- a/lib/l10n/intl_zh.arb
+++ b/lib/l10n/intl_zh.arb
@@ -589,8 +589,28 @@
"clipboardNoImage": "剪贴板中无图片",
"importSuccess": "导入成功",
"copySuccess": "已复制到剪贴板",
- "importResultTip": "解析成功{parseSuccess}个令牌,导入成功{importSuccess}个令牌",
- "importCategoryResultTip": "共包含{parseSuccess}个分类,导入成功{importSuccess}个分类",
+ "importTokenResult": "解析 {parseSuccess} 个令牌,导入 {importSuccess} 个",
+ "@importTokenResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importTokenResultWithError": "解析 {parseSuccess} 个令牌(失败 {parseFailed} 个),导入 {importSuccess} 个",
+ "@importTokenResultWithError": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "parseFailed": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importCategoryResult": "解析 {parseSuccess} 个分类,导入 {importSuccess} 个",
+ "@importCategoryResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
"importFailed": "导入失败",
"searchIconName": "搜索图标名称",
"setIconForToken": "选择令牌图标",
@@ -704,8 +724,75 @@
"cloudBackupSettings": "云备份",
"databaseEncryptionSettings": "数据库加密",
"gestureLockSettings": "手势锁",
+ "hideGestureTrail": "隐藏手势轨迹",
+ "hideGestureTrailTip": "解锁时隐藏绘制的图案",
"autoLockSettings": "自动锁定",
"projectRepoAbout": "项目仓库",
"appAbout": "APP",
- "contactAbout": "联系我们"
+ "contactAbout": "联系我们",
+ "menuFile": "文件",
+ "menuEdit": "编辑",
+ "menuView": "视图",
+ "menuWindow": "窗口",
+ "menuHelp": "帮助",
+ "quit": "退出",
+ "minimize": "最小化",
+ "zoom": "缩放",
+ "notificationPermissionDenied": "通知权限已被拒绝,无法显示桌面通知。请在系统设置中开启通知权限。",
+ "notificationPermissionRequest": "需要通知权限以显示桌面通知。是否前往系统设置开启?",
+ "goToSettings": "前往设置",
+ "menuTokens": "令牌",
+ "menuSortOrder": "排序方式",
+ "importPreview": "导入预览",
+ "importReady": "可导入",
+ "importDuplicate": "已存在",
+ "importError": "错误",
+ "importSelectedCount": "导入 {count} 个令牌",
+ "@importSelectedCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "importSelectAll": "全选",
+ "importDeselectAll": "取消全选",
+ "importInvalidData": "无效的令牌数据",
+ "importNoTokens": "没有可导入的令牌",
+ "importCategoryNew": "新增",
+ "importCategoryExisting": "已存在",
+ "importCategoryContains": "包含: {names} ({count}个令牌)",
+ "@importCategoryContains": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importCategoryContainsMore": "包含: {names}…等({count}个令牌)",
+ "@importCategoryContainsMore": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedCategoryCount": "导入 {count} 个分类",
+ "@importSelectedCategoryCount": {
+ "placeholders": {
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedBothCount": "导入 {tokenCount} 个令牌和 {categoryCount} 个分类",
+ "@importSelectedBothCount": {
+ "placeholders": {
+ "tokenCount": {"type": "int"},
+ "categoryCount": {"type": "int"}
+ }
+ },
+ "importOverwriteExisting": "覆盖已存在",
+ "importOverwrite": "覆盖",
+ "importMergeStrategy": "合并策略",
+ "importKeepLocal": "保留本地",
+ "importOverwriteLocal": "覆盖本地",
+ "tokenCount": "令牌",
+ "categoryCount": "分类"
}
\ No newline at end of file
diff --git a/lib/l10n/intl_zh_TW.arb b/lib/l10n/intl_zh_TW.arb
index b8b61c07..c0b531af 100644
--- a/lib/l10n/intl_zh_TW.arb
+++ b/lib/l10n/intl_zh_TW.arb
@@ -589,8 +589,28 @@
"clipboardNoImage": "剪貼簿中無圖片",
"importSuccess": "導入成功",
"copySuccess": "已複製到剪貼簿",
- "importResultTip": "解析成功{parseSuccess}個令牌,導入成功{importSuccess}個令牌",
- "importCategoryResultTip": "共包含{parseSuccess}個分類,導入成功{importSuccess}個分類",
+ "importTokenResult": "解析 {parseSuccess} 個令牌,導入 {importSuccess} 個",
+ "@importTokenResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importTokenResultWithError": "解析 {parseSuccess} 個令牌(失敗 {parseFailed} 個),導入 {importSuccess} 個",
+ "@importTokenResultWithError": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "parseFailed": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
+ "importCategoryResult": "解析 {parseSuccess} 個分類,導入 {importSuccess} 個",
+ "@importCategoryResult": {
+ "placeholders": {
+ "parseSuccess": {"type": "int"},
+ "importSuccess": {"type": "int"}
+ }
+ },
"importFailed": "導入失敗",
"searchIconName": "搜尋圖示名稱",
"setIconForToken": "選擇令牌圖示",
@@ -704,8 +724,75 @@
"cloudBackupSettings": "雲端備份",
"databaseEncryptionSettings": "資料庫加密",
"gestureLockSettings": "手勢鎖",
+ "hideGestureTrail": "隱藏手勢軌跡",
+ "hideGestureTrailTip": "解鎖時隱藏繪製的圖案",
"autoLockSettings": "自動鎖定",
"projectRepoAbout": "專案倉庫",
"appAbout": "APP",
- "contactAbout": "聯絡我們"
+ "contactAbout": "聯絡我們",
+ "menuFile": "檔案",
+ "menuEdit": "編輯",
+ "menuView": "顯示方式",
+ "menuWindow": "視窗",
+ "menuHelp": "說明",
+ "quit": "結束",
+ "minimize": "最小化",
+ "zoom": "縮放",
+ "notificationPermissionDenied": "通知權限已被拒絕,無法顯示桌面通知。請在系統設定中開啟通知權限。",
+ "notificationPermissionRequest": "需要通知權限以顯示桌面通知。是否前往系統設定開啟?",
+ "goToSettings": "前往設定",
+ "menuTokens": "令牌",
+ "menuSortOrder": "排序方式",
+ "importPreview": "匯入預覽",
+ "importReady": "可匯入",
+ "importDuplicate": "已存在",
+ "importError": "錯誤",
+ "importSelectedCount": "匯入 {count} 個令牌",
+ "@importSelectedCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "importSelectAll": "全選",
+ "importDeselectAll": "取消全選",
+ "importInvalidData": "無效的令牌資料",
+ "importNoTokens": "沒有可匯入的令牌",
+ "importCategoryNew": "新增",
+ "importCategoryExisting": "已存在",
+ "importCategoryContains": "包含: {names} ({count}個令牌)",
+ "@importCategoryContains": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importCategoryContainsMore": "包含: {names}…等({count}個令牌)",
+ "@importCategoryContainsMore": {
+ "placeholders": {
+ "names": {"type": "String"},
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedCategoryCount": "匯入 {count} 個分類",
+ "@importSelectedCategoryCount": {
+ "placeholders": {
+ "count": {"type": "int"}
+ }
+ },
+ "importSelectedBothCount": "匯入 {tokenCount} 個令牌和 {categoryCount} 個分類",
+ "@importSelectedBothCount": {
+ "placeholders": {
+ "tokenCount": {"type": "int"},
+ "categoryCount": {"type": "int"}
+ }
+ },
+ "importOverwriteExisting": "覆蓋已存在",
+ "importOverwrite": "覆蓋",
+ "importMergeStrategy": "合併策略",
+ "importKeepLocal": "保留本地",
+ "importOverwriteLocal": "覆蓋本地",
+ "tokenCount": "令牌",
+ "categoryCount": "分類"
}
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index 8b123f77..6a80d7d5 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -143,22 +143,41 @@ Future initAndroid() async {
Future initDesktop() async {
await initWindow();
- LaunchAtStartup.instance.setup(
- appName: ResponsiveUtil.appName,
- appPath: Platform.resolvedExecutable,
- );
- await LocalNotifier.instance.setup(
- appName: ResponsiveUtil.appName,
- shortcutPolicy: ShortcutPolicy.requireCreate,
- );
- ILogger.debug(
- "LaunchAtStartup: ${await LaunchAtStartup.instance.isEnabled()}");
- ChewieHiveUtil.put(ChewieHiveUtil.launchAtStartupKey,
- await LaunchAtStartup.instance.isEnabled());
- for (String scheme in kWindowsSchemes) {
- await protocolHandler.register(scheme);
+ try {
+ LaunchAtStartup.instance.setup(
+ appName: ResponsiveUtil.appName,
+ appPath: Platform.resolvedExecutable,
+ );
+ } catch (e, t) {
+ ILogger.error("Failed to setup LaunchAtStartup", e, t);
+ }
+ try {
+ await LocalNotifier.instance.setup(
+ appName: ResponsiveUtil.appName,
+ shortcutPolicy: ShortcutPolicy.requireCreate,
+ );
+ } catch (e, t) {
+ ILogger.error("Failed to setup LocalNotifier", e, t);
+ }
+ try {
+ bool isEnabled = await LaunchAtStartup.instance.isEnabled();
+ ILogger.debug("LaunchAtStartup: $isEnabled");
+ ChewieHiveUtil.put(ChewieHiveUtil.launchAtStartupKey, isEnabled);
+ } catch (e, t) {
+ ILogger.error("Failed to check LaunchAtStartup status", e, t);
+ }
+ try {
+ for (String scheme in kWindowsSchemes) {
+ await protocolHandler.register(scheme);
+ }
+ } catch (e, t) {
+ ILogger.error("Failed to register protocol handler", e, t);
+ }
+ try {
+ await HotKeyManager.instance.unregisterAll();
+ } catch (e, t) {
+ ILogger.error("Failed to unregister hotkeys", e, t);
}
- await HotKeyManager.instance.unregisterAll();
ILogger.debug(
"http proxy: ${Platform.environment['http_proxy']}, https proxy: ${Platform.environment['https_proxy']}");
}
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 21104d93..e8aa6937 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -48,7 +48,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
HotkeyManagerMacosPlugin.register(with: registry.registrar(forPlugin: "HotkeyManagerMacosPlugin"))
IsarFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "IsarFlutterLibsPlugin"))
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
- FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
+ LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
LocalNotifierPlugin.register(with: registry.registrar(forPlugin: "LocalNotifierPlugin"))
MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
diff --git a/macos/Podfile.lock b/macos/Podfile.lock
index 903a2ed7..0de9b4f1 100644
--- a/macos/Podfile.lock
+++ b/macos/Podfile.lock
@@ -1,15 +1,17 @@
PODS:
+ - app_links (1.0.0):
+ - FlutterMacOS
- audio_session (0.0.1):
- FlutterMacOS
- biometric_storage (0.0.1):
- FlutterMacOS
- device_info_plus (0.0.1):
- FlutterMacOS
- - flutter_inappwebview_macos (0.0.1):
+ - file_picker (0.0.1):
- FlutterMacOS
- - OrderedSet (~> 5.0)
- - flutter_local_notifications (0.0.1):
+ - flutter_inappwebview_macos (0.0.1):
- FlutterMacOS
+ - OrderedSet (~> 6.0.3)
- flutter_secure_storage_macos (6.1.1):
- FlutterMacOS
- flutter_web_auth_2 (3.0.0):
@@ -17,7 +19,7 @@ PODS:
- FlutterMacOS (1.0.0)
- FMDB/SQLCipher (2.7.11):
- SQLCipher (~> 4.0)
- - HotKey (0.2.0)
+ - HotKey (0.2.1)
- hotkey_manager_macos (0.0.1):
- FlutterMacOS
- HotKey
@@ -32,7 +34,7 @@ PODS:
- FlutterMacOS
- mobile_scanner (5.2.3):
- FlutterMacOS
- - OrderedSet (5.0.0)
+ - OrderedSet (6.0.3)
- package_info_plus (0.0.1):
- FlutterMacOS
- path_provider_foundation (0.0.1):
@@ -42,7 +44,7 @@ PODS:
- FlutterMacOS
- screen_capturer_macos (0.0.1):
- FlutterMacOS
- - screen_retriever (0.0.1):
+ - screen_retriever_macos (0.0.1):
- FlutterMacOS
- share_plus (0.0.1):
- FlutterMacOS
@@ -78,11 +80,12 @@ PODS:
- FlutterMacOS
DEPENDENCIES:
+ - app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`)
- biometric_storage (from `Flutter/ephemeral/.symlinks/plugins/biometric_storage/macos`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
+ - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
- - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`)
- flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
- flutter_web_auth_2 (from `Flutter/ephemeral/.symlinks/plugins/flutter_web_auth_2/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
@@ -96,11 +99,12 @@ DEPENDENCIES:
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- protocol_handler_macos (from `Flutter/ephemeral/.symlinks/plugins/protocol_handler_macos/macos`)
- screen_capturer_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_capturer_macos/macos`)
- - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
+ - screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`)
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
- sodium_libs (from `Flutter/ephemeral/.symlinks/plugins/sodium_libs/macos`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- sqflite_sqlcipher (from `Flutter/ephemeral/.symlinks/plugins/sqflite_sqlcipher/macos`)
+ - SQLCipher (~> 4.5)
- tray_manager (from `Flutter/ephemeral/.symlinks/plugins/tray_manager/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- video_player_avfoundation (from `Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin`)
@@ -117,16 +121,18 @@ SPEC REPOS:
- SQLCipher
EXTERNAL SOURCES:
+ app_links:
+ :path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
audio_session:
:path: Flutter/ephemeral/.symlinks/plugins/audio_session/macos
biometric_storage:
:path: Flutter/ephemeral/.symlinks/plugins/biometric_storage/macos
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
+ file_picker:
+ :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
flutter_inappwebview_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos
- flutter_local_notifications:
- :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos
flutter_secure_storage_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos
flutter_web_auth_2:
@@ -153,8 +159,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/protocol_handler_macos/macos
screen_capturer_macos:
:path: Flutter/ephemeral/.symlinks/plugins/screen_capturer_macos/macos
- screen_retriever:
- :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
+ screen_retriever_macos:
+ :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos
share_plus:
:path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos
sodium_libs:
@@ -179,41 +185,42 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/window_to_front/macos
SPEC CHECKSUMS:
- audio_session: dea1f41890dbf1718f04a56f1d6150fd50039b72
- biometric_storage: 43caa6e7ef00e8e19c074216e7e1786dacda9e76
- device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
- flutter_inappwebview_macos: 9600c9df9fdb346aaa8933812009f8d94304203d
- flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4
- flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9
- flutter_web_auth_2: 2e1dc2d2139973e4723c5286ce247dd590390d70
- FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
+ app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
+ audio_session: 48ab6500f7a5e7c64363e206565a5dfe5a0c1441
+ biometric_storage: 9de0cb4e591e52329ca0da7df42e964db6c526cf
+ device_info_plus: 4fb280989f669696856f8b129e4a5e3cd6c48f76
+ file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
+ flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d
+ flutter_secure_storage_macos: b2d62a774c23b060f0b99d0173b0b36abb4a8632
+ flutter_web_auth_2: 62b08da29f15a20fa63f144234622a1488d45b65
+ FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
FMDB: 57486c1117fd8e0e6b947b2f54c3f42bf8e57a4e
- HotKey: e96d8a2ddbf4591131e2bb3f54e69554d90cdca6
- hotkey_manager_macos: 1e2edb0c7ae4fe67108af44a9d3445de41404160
- isar_flutter_libs: 43385c99864c168fadba7c9adeddc5d38838ca6a
- just_audio: 9b67ca7b97c61cfc9784ea23cd8cc55eb226d489
- local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3
- local_notifier: e9506bc66fc70311e8bc7291fb70f743c081e4ff
- mobile_scanner: 0a05256215b047af27b9495db3b77640055e8824
- OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
- package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
- path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
- protocol_handler_macos: d10a6c01d6373389ffd2278013ab4c47ed6d6daa
- screen_capturer_macos: e91a66e1eeefd5e4fe068bb1bffc053cc34b63b8
- screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
- share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf
- sodium_libs: d39bd76697736cb11ce4a0be73b9b4bc64466d6f
- sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
- sqflite_sqlcipher: 87b476a4b1dbaa86041d5be30112d33ba7b48d07
+ HotKey: 400beb7caa29054ea8d864c96f5ba7e5b4852277
+ hotkey_manager_macos: a4317849af96d2430fa89944d3c58977ca089fbe
+ isar_flutter_libs: a65381780401f81ad6bf3f2e7cd0de5698fb98c4
+ just_audio: eb8b016ac4493159ab24db4f7215e55303b39a84
+ local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb
+ local_notifier: ebf072651e35ae5e47280ad52e2707375cb2ae4e
+ mobile_scanner: bd1e7cd9b67b442f4d903747f4778e040513f860
+ OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
+ package_info_plus: f0052d280d17aa382b932f399edf32507174e870
+ path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+ protocol_handler_macos: f9cd7b13bcaf6b0425f7410cbe52376cb843a936
+ screen_capturer_macos: 229306903c56767a7c7d3a48167ba303e95c6d29
+ screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
+ share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc
+ sodium_libs: b9459e5bfc1185349f43472e79fc5d8e526b2bda
+ sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
+ sqflite_sqlcipher: d60db72e70c8a75053810dbb988f66458043793c
SQLCipher: 5e6bfb47323635c8b657b1b27d25c5f1baf63bf5
- tray_manager: 9064e219c56d75c476e46b9a21182087930baf90
- url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
- video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
- wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269
- webview_flutter_wkwebview: 0982481e3d9c78fd5c6f62a002fcd24fc791f1e4
- window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
- window_to_front: 4cdc24ddd8461ad1a55fa06286d6a79d8b29e8d8
+ tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
+ url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
+ video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
+ wakelock_plus: 21ddc249ac4b8d018838dbdabd65c5976c308497
+ webview_flutter_wkwebview: 44d4dee7d7056d5ad185d25b38404436d56c547c
+ window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c
+ window_to_front: 9e76fd432e36700a197dac86a0011e49c89abe0a
-PODFILE CHECKSUM: b8db6f1aee8a2a93682b04d5d0af948b996b6a1d
+PODFILE CHECKSUM: a93941be6bc34b39b845d80e274606784deb57a4
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj
index 4efe9deb..a2a33da1 100644
--- a/macos/Runner.xcodeproj/project.pbxproj
+++ b/macos/Runner.xcodeproj/project.pbxproj
@@ -27,6 +27,7 @@
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+ AA0001012044BFA00003C045 /* LocalNotifierOverride.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0001002044BFA00003C045 /* LocalNotifierOverride.swift */; };
7A7A95CE29141F3546CCC15E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8FA190C15AB53FB43E71E4E /* Pods_RunnerTests.framework */; };
F84DEA6E45FA7511E0E158EE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C3F37A8706029947F81B05D /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
@@ -73,6 +74,7 @@
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
+ AA0001002044BFA00003C045 /* LocalNotifierOverride.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotifierOverride.swift; sourceTree = ""; };
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
@@ -177,6 +179,7 @@
children = (
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
+ AA0001002044BFA00003C045 /* LocalNotifierOverride.swift */,
33E51913231747F40026EE4D /* DebugProfile.entitlements */,
33E51914231749380026EE4D /* Release.entitlements */,
33CC11242044D66E0003C045 /* Resources */,
@@ -195,7 +198,6 @@
31C8C8D8E119FCDDAC6236F6 /* Pods-RunnerTests.release.xcconfig */,
FC85FC4B6AD978221380EB5C /* Pods-RunnerTests.profile.xcconfig */,
);
- name = Pods;
path = Pods;
sourceTree = "";
};
@@ -440,6 +442,7 @@
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
+ AA0001012044BFA00003C045 /* LocalNotifierOverride.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -572,8 +575,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = 9CAPQ7Q4W8;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -704,8 +709,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = 9CAPQ7Q4W8;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -724,8 +731,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
+ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
+ DEVELOPMENT_TEAM = 9CAPQ7Q4W8;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 7a49a087..15435c1d 100644
--- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -59,6 +59,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
+ enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift
index 8e02df28..5482ca0d 100644
--- a/macos/Runner/AppDelegate.swift
+++ b/macos/Runner/AppDelegate.swift
@@ -1,9 +1,23 @@
import Cocoa
import FlutterMacOS
+import UserNotifications
@main
class AppDelegate: FlutterAppDelegate {
+ override func applicationDidFinishLaunching(_ notification: Notification) {
+ UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
+ if let error = error {
+ NSLog("Notification permission error: \(error.localizedDescription)")
+ }
+ }
+ super.applicationDidFinishLaunching(notification)
+ }
+
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
+
+ override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
+ return true
+ }
}
diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements
index dddb8a30..fd6760c4 100644
--- a/macos/Runner/DebugProfile.entitlements
+++ b/macos/Runner/DebugProfile.entitlements
@@ -8,5 +8,13 @@
com.apple.security.network.server
+ com.apple.security.network.client
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.files.downloads.read-write
+
+ keychain-access-groups
+
diff --git a/macos/Runner/LocalNotifierOverride.swift b/macos/Runner/LocalNotifierOverride.swift
new file mode 100644
index 00000000..ae56caed
--- /dev/null
+++ b/macos/Runner/LocalNotifierOverride.swift
@@ -0,0 +1,125 @@
+import Cocoa
+import FlutterMacOS
+import UserNotifications
+
+public class LocalNotifierOverride: NSObject, FlutterPlugin, UNUserNotificationCenterDelegate {
+ var channel: FlutterMethodChannel!
+
+ public static func register(with registrar: FlutterPluginRegistrar) {
+ let channel = FlutterMethodChannel(name: "local_notifier", binaryMessenger: registrar.messenger)
+ let instance = LocalNotifierOverride()
+ instance.channel = channel
+ registrar.addMethodCallDelegate(instance, channel: channel)
+ UNUserNotificationCenter.current().delegate = instance
+ }
+
+ public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
+ switch call.method {
+ case "notify":
+ notify(call, result: result)
+ case "close":
+ close(call, result: result)
+ case "checkPermission":
+ checkPermission(result: result)
+ case "openNotificationSettings":
+ openNotificationSettings(result: result)
+ default:
+ result(FlutterMethodNotImplemented)
+ }
+ }
+
+ public func checkPermission(result: @escaping FlutterResult) {
+ UNUserNotificationCenter.current().getNotificationSettings { settings in
+ DispatchQueue.main.async {
+ switch settings.authorizationStatus {
+ case .authorized:
+ result("authorized")
+ case .denied:
+ result("denied")
+ case .notDetermined:
+ result("notDetermined")
+ case .provisional:
+ result("provisional")
+ case .ephemeral:
+ result("ephemeral")
+ @unknown default:
+ result("unknown")
+ }
+ }
+ }
+ }
+
+ public func openNotificationSettings(result: @escaping FlutterResult) {
+ if let url = URL(string: "x-apple.systempreferences:com.apple.preference.notifications") {
+ NSWorkspace.shared.open(url)
+ }
+ result(true)
+ }
+
+ public func notify(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
+ guard let args = call.arguments as? [String: Any],
+ let identifier = args["identifier"] as? String else {
+ result(FlutterError(code: "INVALID_ARGS", message: "Missing identifier", details: nil))
+ return
+ }
+
+ let title = args["title"] as? String ?? ""
+ let subtitle = args["subtitle"] as? String ?? ""
+ let body = args["body"] as? String ?? ""
+
+ let content = UNMutableNotificationContent()
+ content.title = title
+ content.subtitle = subtitle
+ content.body = body
+ content.sound = .default
+
+ let request = UNNotificationRequest(identifier: identifier, content: content, trigger: nil)
+
+ UNUserNotificationCenter.current().add(request) { error in
+ if let error = error {
+ result(FlutterError(code: "NOTIFY_ERROR", message: error.localizedDescription, details: nil))
+ } else {
+ DispatchQueue.main.async {
+ self.channel.invokeMethod("onLocalNotificationShow", arguments: ["notificationId": identifier])
+ }
+ result(true)
+ }
+ }
+ }
+
+ public func close(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
+ guard let args = call.arguments as? [String: Any],
+ let identifier = args["identifier"] as? String else {
+ result(FlutterError(code: "INVALID_ARGS", message: "Missing identifier", details: nil))
+ return
+ }
+
+ UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [identifier])
+ channel.invokeMethod("onLocalNotificationClose", arguments: ["notificationId": identifier])
+ result(true)
+ }
+
+ // Show notifications even when app is in foreground
+ public func userNotificationCenter(
+ _ center: UNUserNotificationCenter,
+ willPresent notification: UNNotification,
+ withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
+ ) {
+ if #available(macOS 11.0, *) {
+ completionHandler([.banner, .sound])
+ } else {
+ completionHandler([.alert, .sound])
+ }
+ }
+
+ // Handle notification click
+ public func userNotificationCenter(
+ _ center: UNUserNotificationCenter,
+ didReceive response: UNNotificationResponse,
+ withCompletionHandler completionHandler: @escaping () -> Void
+ ) {
+ let identifier = response.notification.request.identifier
+ channel.invokeMethod("onLocalNotificationClick", arguments: ["notificationId": identifier])
+ completionHandler()
+ }
+}
diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift
index 3cc05eb2..5be98f29 100644
--- a/macos/Runner/MainFlutterWindow.swift
+++ b/macos/Runner/MainFlutterWindow.swift
@@ -9,6 +9,7 @@ class MainFlutterWindow: NSWindow {
self.setFrame(windowFrame, display: true)
RegisterGeneratedPlugins(registry: flutterViewController)
+ LocalNotifierOverride.register(with: flutterViewController.registrar(forPlugin: "LocalNotifierOverride"))
super.awakeFromNib()
}
diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements
index 852fa1a4..69b7d913 100644
--- a/macos/Runner/Release.entitlements
+++ b/macos/Runner/Release.entitlements
@@ -4,5 +4,15 @@
com.apple.security.app-sandbox
+ com.apple.security.network.server
+
+ com.apple.security.network.client
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.files.downloads.read-write
+
+ keychain-access-groups
+
diff --git a/pubspec.lock b/pubspec.lock
index 1dc74e7d..29269453 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -13,23 +13,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
+ sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "76.0.0"
- _macros:
- dependency: transitive
- description: dart
- source: sdk
- version: "0.3.3"
+ version: "67.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
- sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
+ sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "6.11.0"
+ version: "6.4.1"
animations:
dependency: "direct main"
description:
@@ -255,10 +250,10 @@ packages:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
charcode:
dependency: transitive
description:
@@ -295,10 +290,10 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
code_builder:
dependency: transitive
description:
@@ -319,10 +314,10 @@ packages:
dependency: transitive
description:
name: collection
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.19.0"
+ version: "1.19.1"
console:
dependency: transitive
description:
@@ -383,10 +378,10 @@ packages:
dependency: transitive
description:
name: dart_style
- sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
+ sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.3.7"
+ version: "2.3.6"
dbus:
dependency: transitive
description:
@@ -471,10 +466,10 @@ packages:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
@@ -1015,10 +1010,10 @@ packages:
dependency: "direct main"
description:
name: intl
- sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+ sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.19.0"
+ version: "0.20.2"
intl_translation:
dependency: "direct dev"
description:
@@ -1111,26 +1106,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "10.0.7"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "3.0.8"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
@@ -1159,10 +1154,10 @@ packages:
dependency: transitive
description:
name: local_auth_darwin
- sha256: "7ba5738c874ca2b910d72385d00d2bebad9d4e807612936cf5e32bc01a048c71"
+ sha256: "699873970067a40ef2f2c09b4c72eb1cfef64224ef041b3df9fdc5c4c1f91f49"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.4.0"
+ version: "1.6.1"
local_auth_platform_interface:
dependency: transitive
description:
@@ -1218,14 +1213,6 @@ packages:
relative: true
source: path
version: "0.257.0"
- macros:
- dependency: transitive
- description:
- name: macros
- sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "0.1.3-main.0"
markdown:
dependency: transitive
description:
@@ -1245,18 +1232,18 @@ packages:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
menu_base:
dependency: transitive
description:
@@ -1269,10 +1256,10 @@ packages:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.15.0"
+ version: "1.17.0"
metadata_fetch:
dependency: transitive
description:
@@ -1380,10 +1367,10 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_drawing:
dependency: "direct main"
description:
@@ -1947,18 +1934,18 @@ packages:
dependency: transitive
description:
name: stack_trace
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.12.0"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
stream_transform:
dependency: transitive
description:
@@ -2003,10 +1990,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.7.3"
+ version: "0.7.10"
timing:
dependency: transitive
description:
@@ -2155,10 +2142,10 @@ packages:
dependency: "direct main"
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
video_player:
dependency: transitive
description:
@@ -2360,5 +2347,5 @@ packages:
source: hosted
version: "0.2.3"
sdks:
- dart: ">=3.6.0 <4.0.0"
- flutter: ">=3.27.0"
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.35.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index b762dab9..e0c339c4 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -51,7 +51,7 @@ dependencies:
awesome_cloud:
path: third-party/awesome_cloud
# 工具
- intl: ^0.19.0
+ intl: ^0.20.2
html: ^0.15.0
uuid: ^4.4.2 # UUID
logger: ^2.4.0 # 日志
diff --git a/third-party/awesome_cloud/pubspec.lock b/third-party/awesome_cloud/pubspec.lock
index 41675a1b..6ad5e33f 100644
--- a/third-party/awesome_cloud/pubspec.lock
+++ b/third-party/awesome_cloud/pubspec.lock
@@ -6,65 +6,113 @@ packages:
description:
name: _discoveryapis_commons
sha256: "113c4100b90a5b70a983541782431b82168b3cae166ab130649c36eb3559d498"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.0.7"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
- url: "https://pub.flutter-io.cn"
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
- url: "https://pub.flutter-io.cn"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
+ buffer:
+ dependency: "direct main"
+ description:
+ name: buffer
+ sha256: "389da2ec2c16283c8787e0adaede82b1842102f8c8aae2f49003a766c5c6b3d1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.3"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
- url: "https://pub.flutter-io.cn"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
clock:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
- url: "https://pub.flutter-io.cn"
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
+ code_assets:
+ dependency: transitive
+ description:
+ name: code_assets
+ sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
collection:
dependency: transitive
description:
name: collection
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
- url: "https://pub.flutter-io.cn"
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ convert:
+ dependency: "direct main"
+ description:
+ name: convert
+ sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
+ url: "https://pub.dev"
source: hosted
- version: "1.19.0"
+ version: "3.1.2"
+ crypto:
+ dependency: "direct main"
+ description:
+ name: crypto
+ sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.7"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.flutter-io.cn"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
- url: "https://pub.flutter-io.cn"
+ sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.2.0"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
flutter:
dependency: "direct main"
description: flutter
@@ -75,7 +123,7 @@ packages:
description:
name: flutter_lints
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "3.0.2"
flutter_secure_storage:
@@ -83,31 +131,31 @@ packages:
description:
name: flutter_secure_storage
sha256: "22dbf16f23a4bcf9d35e51be1c84ad5bb6f627750565edd70dab70f3ff5fff8f"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "8.1.0"
flutter_secure_storage_linux:
dependency: transitive
description:
name: flutter_secure_storage_linux
- sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b"
- url: "https://pub.flutter-io.cn"
+ sha256: be76c1d24a97d0b98f8b54bce6b481a380a6590df992d0098f868ad54dc8f688
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.3"
flutter_secure_storage_macos:
dependency: transitive
description:
name: flutter_secure_storage_macos
- sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81"
- url: "https://pub.flutter-io.cn"
+ sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247"
+ url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.3"
flutter_secure_storage_platform_interface:
dependency: transitive
description:
name: flutter_secure_storage_platform_interface
sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.1.2"
flutter_secure_storage_web:
@@ -115,7 +163,7 @@ packages:
description:
name: flutter_secure_storage_web
sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.2.1"
flutter_secure_storage_windows:
@@ -123,7 +171,7 @@ packages:
description:
name: flutter_secure_storage_windows
sha256: "38f9501c7cb6f38961ef0e1eacacee2b2d4715c63cc83fe56449c4d3d0b47255"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.1"
flutter_test:
@@ -134,14 +182,14 @@ packages:
flutter_web_auth_2:
dependency: "direct main"
description:
- path: "../flutter_web_auth_2"
+ path: "../tool/flutter_web_auth_2"
relative: true
source: path
version: "4.0.0-alpha.8"
flutter_web_auth_2_platform_interface:
dependency: transitive
description:
- path: "../flutter_web_auth_2_platform_interface"
+ path: "../tool/flutter_web_auth_2_platform_interface"
relative: true
source: path
version: "4.0.0-alpha.1"
@@ -150,148 +198,228 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
googleapis:
dependency: "direct main"
description:
name: googleapis
sha256: "864f222aed3f2ff00b816c675edf00a39e2aaf373d728d8abec30b37bee1a81c"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "13.2.0"
hashlib:
dependency: "direct main"
description:
name: hashlib
- sha256: d41795742c10947930630118c6836608deeb9047cd05aee32d2baeb697afd66a
- url: "https://pub.flutter-io.cn"
+ sha256: f547a6273fa2bba211e903f32b234a6a7097aca1d218d2391f40021d25e7f200
+ url: "https://pub.dev"
source: hosted
- version: "1.19.2"
+ version: "1.24.0"
hashlib_codecs:
dependency: transitive
description:
name: hashlib_codecs
sha256: "8cea9ccafcfeaa7324d2ae52c61c69f7ff71f4237507a018caab31b9e416e3b1"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.6.0"
+ hooks:
+ dependency: transitive
+ description:
+ name: hooks
+ sha256: "025f060e86d2d4c3c47b56e33caf7f93bf9283340f26d23424ebcfccf34f621e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.3"
http:
dependency: "direct main"
description:
name: http
- sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
- url: "https://pub.flutter-io.cn"
+ sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.2"
+ version: "1.6.0"
http_parser:
dependency: transitive
description:
name: http_parser
- sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
- url: "https://pub.flutter-io.cn"
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
+ url: "https://pub.dev"
source: hosted
- version: "4.0.2"
+ version: "4.1.2"
+ intl:
+ dependency: "direct main"
+ description:
+ name: intl
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.0"
+ jni:
+ dependency: transitive
+ description:
+ name: jni
+ sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
+ jni_flutter:
+ dependency: transitive
+ description:
+ name: jni_flutter
+ sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.6.7"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
- url: "https://pub.flutter-io.cn"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
source: hosted
- version: "10.0.7"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
- url: "https://pub.flutter-io.cn"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.8"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.flutter-io.cn"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
name: lints
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "3.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
- url: "https://pub.flutter-io.cn"
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.flutter-io.cn"
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
- dependency: transitive
+ dependency: "direct main"
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
- url: "https://pub.flutter-io.cn"
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
source: hosted
- version: "1.15.0"
- path:
+ version: "1.17.0"
+ mime:
+ dependency: "direct main"
+ description:
+ name: mime
+ sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.6"
+ native_toolchain_c:
+ dependency: transitive
+ description:
+ name: native_toolchain_c
+ sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.17.6"
+ objective_c:
dependency: transitive
+ description:
+ name: objective_c
+ sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.3.0"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ path:
+ dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
- url: "https://pub.flutter-io.cn"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: transitive
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
- url: "https://pub.flutter-io.cn"
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
- url: "https://pub.flutter-io.cn"
+ sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
+ url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.3.1"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
- url: "https://pub.flutter-io.cn"
+ sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
+ url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
@@ -299,7 +427,7 @@ packages:
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
@@ -307,23 +435,31 @@ packages:
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.3.0"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.2"
platform:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
- url: "https://pub.flutter-io.cn"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
+ url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.8"
protocol_handler:
@@ -331,7 +467,7 @@ packages:
description:
name: protocol_handler
sha256: dc2e2dcb1e0e313c3f43827ec3fa6d98adee6e17edc0c3923ac67efee87479a9
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_android:
@@ -339,7 +475,7 @@ packages:
description:
name: protocol_handler_android
sha256: "82eb860ca42149e400328f54b85140329a1766d982e94705b68271f6ca73895c"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_ios:
@@ -347,7 +483,7 @@ packages:
description:
name: protocol_handler_ios
sha256: "0d3a56b8c1926002cb1e32b46b56874759f4dcc8183d389b670864ac041b6ec2"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_macos:
@@ -355,7 +491,7 @@ packages:
description:
name: protocol_handler_macos
sha256: "6eb8687a84e7da3afbc5660ce046f29d7ecf7976db45a9dadeae6c87147dd710"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_platform_interface:
@@ -363,7 +499,7 @@ packages:
description:
name: protocol_handler_platform_interface
sha256: "53776b10526fdc25efdf1abcf68baf57fdfdb75342f4101051db521c9e3f3e5b"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_windows:
@@ -371,9 +507,25 @@ packages:
description:
name: protocol_handler_windows
sha256: d8f3a58938386aca2c76292757392f4d059d09f11439d6d896d876ebe997f2c4
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ record_use:
+ dependency: transitive
+ description:
+ name: record_use
+ sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.0"
sky_engine:
dependency: transitive
description: flutter
@@ -383,178 +535,194 @@ packages:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
- url: "https://pub.flutter-io.cn"
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
- url: "https://pub.flutter-io.cn"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
source: hosted
- version: "1.12.0"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
- url: "https://pub.flutter-io.cn"
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
- url: "https://pub.flutter-io.cn"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
- url: "https://pub.flutter-io.cn"
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
- url: "https://pub.flutter-io.cn"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
source: hosted
- version: "0.7.3"
+ version: "0.7.10"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
- url: "https://pub.flutter-io.cn"
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.4.0"
url_launcher:
dependency: transitive
description:
name: url_launcher
- sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
- url: "https://pub.flutter-io.cn"
+ sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
+ url: "https://pub.dev"
source: hosted
- version: "6.3.0"
+ version: "6.3.2"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
- url: "https://pub.flutter-io.cn"
+ sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572"
+ url: "https://pub.dev"
source: hosted
- version: "6.3.9"
+ version: "6.3.29"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
- url: "https://pub.flutter-io.cn"
+ sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
+ url: "https://pub.dev"
source: hosted
- version: "6.3.1"
+ version: "6.4.1"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af
- url: "https://pub.flutter-io.cn"
+ sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
+ url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.2"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
- url: "https://pub.flutter-io.cn"
+ sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
+ url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.5"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
- url: "https://pub.flutter-io.cn"
+ sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
+ url: "https://pub.dev"
source: hosted
- version: "2.3.3"
+ version: "2.4.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
- url: "https://pub.flutter-io.cn"
+ sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
+ url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.5"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.flutter-io.cn"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
- url: "https://pub.flutter-io.cn"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
source: hosted
- version: "14.3.0"
+ version: "15.2.0"
web:
dependency: transitive
description:
name: web
- sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
- url: "https://pub.flutter-io.cn"
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
source: hosted
- version: "1.0.0"
+ version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
- sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
- url: "https://pub.flutter-io.cn"
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
+ url: "https://pub.dev"
source: hosted
- version: "5.5.4"
+ version: "5.15.0"
win32_registry:
dependency: transitive
description:
name: win32_registry
- sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
- url: "https://pub.flutter-io.cn"
+ sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
+ url: "https://pub.dev"
source: hosted
- version: "1.1.4"
+ version: "1.1.5"
window_to_front:
dependency: transitive
description:
name: window_to_front
sha256: "7aef379752b7190c10479e12b5fd7c0b9d92adc96817d9e96c59937929512aee"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.0.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
- url: "https://pub.flutter-io.cn"
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ xml:
+ dependency: "direct main"
+ description:
+ name: xml
+ sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.6.1"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "3.1.3"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.10.3 <4.0.0"
+ flutter: ">=3.38.4"
diff --git a/third-party/awesome_cloud/pubspec.yaml b/third-party/awesome_cloud/pubspec.yaml
index b2de37fc..9be3ecc7 100644
--- a/third-party/awesome_cloud/pubspec.yaml
+++ b/third-party/awesome_cloud/pubspec.yaml
@@ -22,7 +22,7 @@ dependencies:
convert: ^3.1.1
xml: ^6.1.0
buffer: ^1.1.1
- intl: ^0.19.0
+ intl: ^0.20.2
mime: ^1.0.2
dev_dependencies:
diff --git a/third-party/chewie/l10n.yaml b/third-party/chewie/l10n.yaml
index 24627ac2..d8fc8a5c 100644
--- a/third-party/chewie/l10n.yaml
+++ b/third-party/chewie/l10n.yaml
@@ -2,5 +2,4 @@ arb-dir: lib/src/l10n
template-arb-file: intl_en.arb
output-localization-file: chewie_localizations.dart
output-class: ChewieLocalizations
-output-dir: lib/src/generated
-synthetic-package: false
\ No newline at end of file
+output-dir: lib/src/generated
\ No newline at end of file
diff --git a/third-party/chewie/lib/src/Resources/theme_color_data.dart b/third-party/chewie/lib/src/Resources/theme_color_data.dart
index e5f40a0b..05ab0f40 100644
--- a/third-party/chewie/lib/src/Resources/theme_color_data.dart
+++ b/third-party/chewie/lib/src/Resources/theme_color_data.dart
@@ -594,7 +594,7 @@ class ChewieThemeColorData {
backgroundColor: appBarBackgroundColor,
surfaceTintColor: appBarSurfaceTintColor,
),
- tabBarTheme: const TabBarTheme(
+ tabBarTheme: const TabBarThemeData(
splashFactory: NoSplash.splashFactory,
),
buttonTheme: ButtonThemeData(
diff --git a/third-party/chewie/lib/src/Widgets/Button/window_button.dart b/third-party/chewie/lib/src/Widgets/Button/window_button.dart
index 2c342acd..59dbf427 100644
--- a/third-party/chewie/lib/src/Widgets/Button/window_button.dart
+++ b/third-party/chewie/lib/src/Widgets/Button/window_button.dart
@@ -164,12 +164,12 @@ class WindowButton extends StatelessWidget {
return selectedAnimated;
}
+ bool get _isWindowChromeButton => false;
+
@override
Widget build(BuildContext context) {
- if (kIsWeb) {
- return emptyWidget;
- } else {
- if (Platform.isMacOS) {
+ if (_isWindowChromeButton) {
+ if (kIsWeb || Platform.isMacOS) {
return emptyWidget;
}
}
@@ -315,6 +315,9 @@ class StayOnTopWindowButton extends WindowButton {
}
class MinimizeWindowButton extends WindowButton {
+ @override
+ bool get _isWindowChromeButton => true;
+
MinimizeWindowButton({
super.key,
super.colors,
@@ -330,6 +333,9 @@ class MinimizeWindowButton extends WindowButton {
}
class MaximizeWindowButton extends WindowButton {
+ @override
+ bool get _isWindowChromeButton => true;
+
MaximizeWindowButton({
super.key,
super.colors,
@@ -347,6 +353,9 @@ class MaximizeWindowButton extends WindowButton {
}
class RestoreWindowButton extends WindowButton {
+ @override
+ bool get _isWindowChromeButton => true;
+
RestoreWindowButton({
super.key,
super.colors,
@@ -368,6 +377,9 @@ final _defaultCloseButtonColors = WindowButtonColors(
iconMouseOver: const Color(0xFFFFFFFF));
class CloseWindowButton extends WindowButton {
+ @override
+ bool get _isWindowChromeButton => true;
+
CloseWindowButton({
super.key,
WindowButtonColors? colors,
diff --git a/third-party/chewie/lib/src/Widgets/Module/Unlock/gesture_unlock_view.dart b/third-party/chewie/lib/src/Widgets/Module/Unlock/gesture_unlock_view.dart
index 50225fa5..151682ab 100644
--- a/third-party/chewie/lib/src/Widgets/Module/Unlock/gesture_unlock_view.dart
+++ b/third-party/chewie/lib/src/Widgets/Module/Unlock/gesture_unlock_view.dart
@@ -37,6 +37,8 @@ class GestureUnlockView extends StatefulWidget {
final int delayTime;
+ final bool showLine;
+
final Function(List, UnlockStatus) onCompleted;
const GestureUnlockView({
@@ -54,6 +56,7 @@ class GestureUnlockView extends StatefulWidget {
this.solidRadiusRatio = 0.4,
this.touchRadiusRatio = 0.6,
this.delayTime = 500,
+ this.showLine = true,
required this.onCompleted,
});
@@ -149,7 +152,7 @@ class GestureState extends State {
child: CustomPaint(
size: Size(widget.size, widget.size),
painter: UnlockLinePainter(
- pathPoints: pathPoints,
+ pathPoints: widget.showLine ? pathPoints : [],
status: _status,
selectColor: widget.selectedColor,
failedColor: widget.failedColor,
diff --git a/third-party/chewie/lib/src/Widgets/Scaffold/my_appbar.dart b/third-party/chewie/lib/src/Widgets/Scaffold/my_appbar.dart
index b41963ae..e26bedaa 100644
--- a/third-party/chewie/lib/src/Widgets/Scaffold/my_appbar.dart
+++ b/third-party/chewie/lib/src/Widgets/Scaffold/my_appbar.dart
@@ -813,8 +813,8 @@ class _MyAppBarState extends State {
assert(debugCheckHasMaterialLocalizations(context));
final ThemeData theme = Theme.of(context);
final IconButtonThemeData iconButtonTheme = IconButtonTheme.of(context);
- final AppBarTheme appBarTheme = AppBarTheme.of(context);
- final AppBarTheme defaults = theme.useMaterial3
+ final AppBarThemeData appBarTheme = AppBarTheme.of(context);
+ final AppBarThemeData defaults = theme.useMaterial3
? _AppBarDefaultsM3(context)
: _AppBarDefaultsM2(context);
final ScaffoldState? scaffold = Scaffold.maybeOf(context);
@@ -1210,7 +1210,7 @@ class _RenderAppBarTitleBox extends RenderAligningShiftedBox {
}
// Hand coded defaults based on Material Design 2.
-class _AppBarDefaultsM2 extends AppBarTheme {
+class _AppBarDefaultsM2 extends AppBarThemeData {
_AppBarDefaultsM2(this.context)
: super(
elevation: 4.0,
@@ -1249,7 +1249,7 @@ class _AppBarDefaultsM2 extends AppBarTheme {
// Design token database by the script:
// dev/tools/gen_defaults/bin/gen_defaults.dart.
-class _AppBarDefaultsM3 extends AppBarTheme {
+class _AppBarDefaultsM3 extends AppBarThemeData {
_AppBarDefaultsM3(this.context)
: super(
elevation: 0.0,
@@ -2485,8 +2485,8 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
@override
Widget build(BuildContext context) {
- late final AppBarTheme appBarTheme = AppBarTheme.of(context);
- late final AppBarTheme defaults = Theme.of(context).useMaterial3
+ late final AppBarThemeData appBarTheme = AppBarTheme.of(context);
+ late final AppBarThemeData defaults = Theme.of(context).useMaterial3
? _AppBarDefaultsM3(context)
: _AppBarDefaultsM2(context);
final FlexibleSpaceBarSettings settings =
diff --git a/third-party/chewie/lib/src/Widgets/Scaffold/sliver_appbar_delegate.dart b/third-party/chewie/lib/src/Widgets/Scaffold/sliver_appbar_delegate.dart
index 02b18f3c..d7c4b09b 100644
--- a/third-party/chewie/lib/src/Widgets/Scaffold/sliver_appbar_delegate.dart
+++ b/third-party/chewie/lib/src/Widgets/Scaffold/sliver_appbar_delegate.dart
@@ -32,7 +32,7 @@ class SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
data: ThemeData(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
- tabBarTheme: const TabBarTheme(
+ tabBarTheme: const TabBarThemeData(
splashFactory: NoSplash.splashFactory,
),
),
diff --git a/third-party/chewie/lib/src/Widgets/Selectable/my_selectable_region.dart b/third-party/chewie/lib/src/Widgets/Selectable/my_selectable_region.dart
index af96892a..6bf59e23 100644
--- a/third-party/chewie/lib/src/Widgets/Selectable/my_selectable_region.dart
+++ b/third-party/chewie/lib/src/Widgets/Selectable/my_selectable_region.dart
@@ -1664,6 +1664,55 @@ class _SelectableRegionContainerDelegate
Offset? _lastStartEdgeUpdateGlobalPosition;
Offset? _lastEndEdgeUpdateGlobalPosition;
+ @override
+ SelectedContentRange? getSelection() {
+ if (currentSelectionStartIndex == -1 || currentSelectionEndIndex == -1) {
+ return null;
+ }
+ var startOffset = 0;
+ var endOffset = 0;
+ var foundStart = false;
+ bool forwardSelection = currentSelectionEndIndex >= currentSelectionStartIndex;
+ if (currentSelectionEndIndex == currentSelectionStartIndex) {
+ final range = selectables[currentSelectionStartIndex].getSelection()!;
+ forwardSelection = range.endOffset >= range.startOffset;
+ }
+ for (var index = 0; index < selectables.length; index++) {
+ final selectable = selectables[index];
+ final range = selectable.getSelection();
+ if (range == null) {
+ if (foundStart) {
+ return SelectedContentRange(
+ startOffset: forwardSelection ? startOffset : endOffset,
+ endOffset: forwardSelection ? endOffset : startOffset,
+ );
+ }
+ startOffset += selectable.contentLength;
+ endOffset = startOffset;
+ continue;
+ }
+ final selectionStartNormalized = min(range.startOffset, range.endOffset);
+ final selectionEndNormalized = max(range.startOffset, range.endOffset);
+ if (!foundStart) {
+ startOffset += selectionStartNormalized;
+ endOffset = startOffset + (selectionEndNormalized - selectionStartNormalized).abs();
+ foundStart = true;
+ } else {
+ endOffset += (selectionEndNormalized - selectionStartNormalized).abs();
+ }
+ }
+ return foundStart
+ ? SelectedContentRange(
+ startOffset: forwardSelection ? startOffset : endOffset,
+ endOffset: forwardSelection ? endOffset : startOffset,
+ )
+ : null;
+ }
+
+ @override
+ int get contentLength =>
+ selectables.fold(0, (int sum, Selectable selectable) => sum + selectable.contentLength);
+
@override
void remove(Selectable selectable) {
_hasReceivedStartEvent.remove(selectable);
diff --git a/third-party/chewie/lib/src/Widgets/Tile/entry_item.dart b/third-party/chewie/lib/src/Widgets/Tile/entry_item.dart
index 0aa7f967..6fed2376 100644
--- a/third-party/chewie/lib/src/Widgets/Tile/entry_item.dart
+++ b/third-party/chewie/lib/src/Widgets/Tile/entry_item.dart
@@ -111,14 +111,21 @@ class EntryItemState extends SearchableState {
// onTap: widget.onTap,
child: Column(
children: [
- Container(
- padding: EdgeInsets.symmetric(
- vertical: _paddingVertical,
- horizontal: _paddingHorizontal,
- ),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: _buildRowChildren(),
+ GestureDetector(
+ onTap: widget.onTap,
+ child: Container(
+ decoration: BoxDecoration(
+ color: widget.backgroundColor ?? Colors.transparent,
+ borderRadius: _borderRadius,
+ ),
+ padding: EdgeInsets.symmetric(
+ vertical: _paddingVertical,
+ horizontal: _paddingHorizontal,
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: _buildRowChildren(),
+ ),
),
),
// _buildBottomDivider(),
diff --git a/third-party/chewie/pubspec.lock b/third-party/chewie/pubspec.lock
index c092b3b9..d645ef7c 100644
--- a/third-party/chewie/pubspec.lock
+++ b/third-party/chewie/pubspec.lock
@@ -5,23 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
+ sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "76.0.0"
- _macros:
- dependency: transitive
- description: dart
- source: sdk
- version: "0.3.3"
+ version: "67.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
- sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
+ sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "6.11.0"
+ version: "6.4.1"
app_links:
dependency: "direct main"
description:
@@ -114,10 +109,10 @@ packages:
dependency: transitive
description:
name: build
- sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
+ sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.4.2"
+ version: "2.4.1"
build_config:
dependency: transitive
description:
@@ -138,26 +133,26 @@ packages:
dependency: transitive
description:
name: build_resolvers
- sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0
+ sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.4.4"
+ version: "2.4.2"
build_runner:
dependency: "direct dev"
description:
name: build_runner
- sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99"
+ sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.4.15"
+ version: "2.4.13"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
- sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
+ sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
url: "https://pub.flutter-io.cn"
source: hosted
- version: "8.0.0"
+ version: "7.3.2"
built_collection:
dependency: transitive
description:
@@ -202,10 +197,10 @@ packages:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
checked_yaml:
dependency: transitive
description:
@@ -226,10 +221,10 @@ packages:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
code_builder:
dependency: transitive
description:
@@ -250,10 +245,10 @@ packages:
dependency: transitive
description:
name: collection
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.19.0"
+ version: "1.19.1"
convert:
dependency: transitive
description:
@@ -306,10 +301,10 @@ packages:
dependency: transitive
description:
name: dart_style
- sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
+ sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.3.8"
+ version: "2.3.6"
dbus:
dependency: transitive
description:
@@ -378,10 +373,10 @@ packages:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
@@ -780,10 +775,10 @@ packages:
dependency: "direct main"
description:
name: intl
- sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+ sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.19.0"
+ version: "0.20.2"
io:
dependency: transitive
description:
@@ -828,10 +823,10 @@ packages:
dependency: "direct dev"
description:
name: json_serializable
- sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c
+ sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "6.9.0"
+ version: "6.8.0"
just_audio:
dependency: transitive
description:
@@ -860,26 +855,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "10.0.7"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "3.0.8"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
@@ -967,14 +962,6 @@ packages:
relative: true
source: path
version: "0.257.0"
- macros:
- dependency: transitive
- description:
- name: macros
- sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "0.1.3-main.0"
markdown:
dependency: "direct main"
description:
@@ -994,26 +981,26 @@ packages:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.15.0"
+ version: "1.17.0"
metadata_fetch:
dependency: "direct main"
description:
@@ -1090,10 +1077,10 @@ packages:
dependency: "direct main"
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_drawing:
dependency: "direct main"
description:
@@ -1410,10 +1397,10 @@ packages:
dependency: transitive
description:
name: shelf_web_socket
- sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
+ sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
url: "https://pub.flutter-io.cn"
source: hosted
- version: "3.0.0"
+ version: "2.0.1"
shell_executor:
dependency: "direct main"
description:
@@ -1510,18 +1497,18 @@ packages:
dependency: transitive
description:
name: stack_trace
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "1.12.0"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
stream_transform:
dependency: transitive
description:
@@ -1566,10 +1553,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
url: "https://pub.flutter-io.cn"
source: hosted
- version: "0.7.3"
+ version: "0.7.10"
timing:
dependency: transitive
description:
@@ -1710,10 +1697,10 @@ packages:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.flutter-io.cn"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
video_player:
dependency: transitive
description:
@@ -1899,5 +1886,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
- dart: ">=3.6.0 <4.0.0"
+ dart: ">=3.9.0-0 <4.0.0"
flutter: ">=3.27.0"
diff --git a/third-party/chewie/pubspec.yaml b/third-party/chewie/pubspec.yaml
index f115f929..73deb280 100644
--- a/third-party/chewie/pubspec.yaml
+++ b/third-party/chewie/pubspec.yaml
@@ -56,7 +56,7 @@ dependencies:
hotkey_manager: ^0.2.3
flutter_inappwebview: 6.0.0
# 工具
- intl: ^0.19.0
+ intl: ^0.20.2
html: ^0.15.5+1
uuid: ^4.4.2
tuple: ^2.0.0
diff --git a/third-party/tool/biometric_storage/pubspec.lock b/third-party/tool/biometric_storage/pubspec.lock
new file mode 100644
index 00000000..7ed3d84f
--- /dev/null
+++ b/third-party/tool/biometric_storage/pubspec.lock
@@ -0,0 +1,250 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ ffi:
+ dependency: "direct main"
+ description:
+ name: ffi
+ sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_web_plugins:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ logging:
+ dependency: "direct main"
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: "direct main"
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+ web:
+ dependency: "direct main"
+ description:
+ name: web
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ win32:
+ dependency: "direct main"
+ description:
+ name: win32
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.15.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/flutter_web_auth_2/pubspec.lock b/third-party/tool/flutter_web_auth_2/pubspec.lock
index c9455e58..67ee680d 100644
--- a/third-party/tool/flutter_web_auth_2/pubspec.lock
+++ b/third-party/tool/flutter_web_auth_2/pubspec.lock
@@ -1,62 +1,94 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
async:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
- url: "https://pub.flutter-io.cn"
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
- url: "https://pub.flutter-io.cn"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
- url: "https://pub.flutter-io.cn"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
clock:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
- url: "https://pub.flutter-io.cn"
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
+ code_assets:
+ dependency: transitive
+ description:
+ name: code_assets
+ sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
collection:
dependency: transitive
description:
name: collection
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
- url: "https://pub.flutter-io.cn"
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
+ url: "https://pub.dev"
source: hosted
- version: "1.19.0"
+ version: "3.0.7"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.flutter-io.cn"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
ffi:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
- url: "https://pub.flutter-io.cn"
+ sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.2.0"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
flutter:
dependency: "direct main"
description: flutter
@@ -67,7 +99,7 @@ packages:
description:
name: flutter_lints
sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "4.0.0"
flutter_test:
@@ -87,100 +119,164 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
+ hooks:
+ dependency: transitive
+ description:
+ name: hooks
+ sha256: "025f060e86d2d4c3c47b56e33caf7f93bf9283340f26d23424ebcfccf34f621e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.3"
+ jni:
+ dependency: transitive
+ description:
+ name: jni
+ sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0"
+ jni_flutter:
+ dependency: transitive
+ description:
+ name: jni_flutter
+ sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
- url: "https://pub.flutter-io.cn"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
source: hosted
- version: "10.0.7"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
- url: "https://pub.flutter-io.cn"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.8"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.flutter-io.cn"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
name: lints
sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "4.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
- url: "https://pub.flutter-io.cn"
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.flutter-io.cn"
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
- url: "https://pub.flutter-io.cn"
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ native_toolchain_c:
+ dependency: transitive
+ description:
+ name: native_toolchain_c
+ sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.17.6"
+ objective_c:
+ dependency: transitive
+ description:
+ name: objective_c
+ sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
+ url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "9.3.0"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
path:
dependency: transitive
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
- url: "https://pub.flutter-io.cn"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
- url: "https://pub.flutter-io.cn"
+ sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
- url: "https://pub.flutter-io.cn"
+ sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
+ url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.3.1"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
- url: "https://pub.flutter-io.cn"
+ sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
+ url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
@@ -188,7 +284,7 @@ packages:
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
@@ -196,23 +292,23 @@ packages:
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.3.0"
platform:
dependency: transitive
description:
name: platform
- sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
- url: "https://pub.flutter-io.cn"
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
+ url: "https://pub.dev"
source: hosted
- version: "3.1.5"
+ version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.8"
protocol_handler:
@@ -220,7 +316,7 @@ packages:
description:
name: protocol_handler
sha256: dc2e2dcb1e0e313c3f43827ec3fa6d98adee6e17edc0c3923ac67efee87479a9
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_android:
@@ -228,7 +324,7 @@ packages:
description:
name: protocol_handler_android
sha256: "82eb860ca42149e400328f54b85140329a1766d982e94705b68271f6ca73895c"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_ios:
@@ -236,7 +332,7 @@ packages:
description:
name: protocol_handler_ios
sha256: "0d3a56b8c1926002cb1e32b46b56874759f4dcc8183d389b670864ac041b6ec2"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_macos:
@@ -244,7 +340,7 @@ packages:
description:
name: protocol_handler_macos
sha256: "6eb8687a84e7da3afbc5660ce046f29d7ecf7976db45a9dadeae6c87147dd710"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_platform_interface:
@@ -252,7 +348,7 @@ packages:
description:
name: protocol_handler_platform_interface
sha256: "53776b10526fdc25efdf1abcf68baf57fdfdb75342f4101051db521c9e3f3e5b"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
protocol_handler_windows:
@@ -260,9 +356,25 @@ packages:
description:
name: protocol_handler_windows
sha256: d8f3a58938386aca2c76292757392f4d059d09f11439d6d896d876ebe997f2c4
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.2.0"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ record_use:
+ dependency: transitive
+ description:
+ name: record_use
+ sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.0"
sky_engine:
dependency: transitive
description: flutter
@@ -272,170 +384,186 @@ packages:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
- url: "https://pub.flutter-io.cn"
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
- url: "https://pub.flutter-io.cn"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
source: hosted
- version: "1.12.0"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
- url: "https://pub.flutter-io.cn"
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
- url: "https://pub.flutter-io.cn"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
- url: "https://pub.flutter-io.cn"
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
- url: "https://pub.flutter-io.cn"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
source: hosted
- version: "0.7.3"
+ version: "1.4.0"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
- sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
- url: "https://pub.flutter-io.cn"
+ sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
+ url: "https://pub.dev"
source: hosted
- version: "6.3.0"
+ version: "6.3.2"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
- url: "https://pub.flutter-io.cn"
+ sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572"
+ url: "https://pub.dev"
source: hosted
- version: "6.3.9"
+ version: "6.3.29"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
- url: "https://pub.flutter-io.cn"
+ sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
+ url: "https://pub.dev"
source: hosted
- version: "6.3.1"
+ version: "6.4.1"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af
- url: "https://pub.flutter-io.cn"
+ sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
+ url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.2"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
- url: "https://pub.flutter-io.cn"
+ sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
+ url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.5"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
- sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
- url: "https://pub.flutter-io.cn"
+ sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
+ url: "https://pub.dev"
source: hosted
- version: "2.3.3"
+ version: "2.4.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
- url: "https://pub.flutter-io.cn"
+ sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
+ url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "3.1.5"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.flutter-io.cn"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
- url: "https://pub.flutter-io.cn"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
source: hosted
- version: "14.3.0"
+ version: "15.2.0"
web:
dependency: "direct main"
description:
name: web
- sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
- url: "https://pub.flutter-io.cn"
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
source: hosted
- version: "1.0.0"
+ version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
- sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
- url: "https://pub.flutter-io.cn"
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
+ url: "https://pub.dev"
source: hosted
- version: "5.5.4"
+ version: "5.15.0"
win32_registry:
dependency: transitive
description:
name: win32_registry
- sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
- url: "https://pub.flutter-io.cn"
+ sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
+ url: "https://pub.dev"
source: hosted
- version: "1.1.4"
+ version: "1.1.5"
window_to_front:
dependency: "direct main"
description:
name: window_to_front
sha256: "7aef379752b7190c10479e12b5fd7c0b9d92adc96817d9e96c59937929512aee"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "0.0.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
- url: "https://pub.flutter-io.cn"
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "3.1.3"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.10.3 <4.0.0"
+ flutter: ">=3.38.4"
diff --git a/third-party/tool/flutter_web_auth_2_platform_interface/pubspec.lock b/third-party/tool/flutter_web_auth_2_platform_interface/pubspec.lock
new file mode 100644
index 00000000..477abfc3
--- /dev/null
+++ b/third-party/tool/flutter_web_auth_2_platform_interface/pubspec.lock
@@ -0,0 +1,213 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: "direct main"
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/flutter_windowmanager/pubspec.lock b/third-party/tool/flutter_windowmanager/pubspec.lock
new file mode 100644
index 00000000..9fe59906
--- /dev/null
+++ b/third-party/tool/flutter_windowmanager/pubspec.lock
@@ -0,0 +1,189 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/image_gallery_saver/pubspec.lock b/third-party/tool/image_gallery_saver/pubspec.lock
new file mode 100644
index 00000000..9fe59906
--- /dev/null
+++ b/third-party/tool/image_gallery_saver/pubspec.lock
@@ -0,0 +1,189 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/move_to_background/pubspec.lock b/third-party/tool/move_to_background/pubspec.lock
new file mode 100644
index 00000000..9fe59906
--- /dev/null
+++ b/third-party/tool/move_to_background/pubspec.lock
@@ -0,0 +1,189 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/screen_capturer_lib/screen_capturer/pubspec.lock b/third-party/tool/screen_capturer_lib/screen_capturer/pubspec.lock
new file mode 100644
index 00000000..7b5e7d02
--- /dev/null
+++ b/third-party/tool/screen_capturer_lib/screen_capturer/pubspec.lock
@@ -0,0 +1,273 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mostly_reasonable_lints:
+ dependency: "direct dev"
+ description:
+ name: mostly_reasonable_lints
+ sha256: e19fec63536866ba307b3dfbc258b4bce9b3745129f038006b56b4067c6293d8
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: "direct dev"
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ screen_capturer_linux:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_linux"
+ relative: true
+ source: path
+ version: "0.2.2"
+ screen_capturer_macos:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_macos"
+ relative: true
+ source: path
+ version: "0.2.2"
+ screen_capturer_platform_interface:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_platform_interface"
+ relative: true
+ source: path
+ version: "0.2.2"
+ screen_capturer_windows:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_windows"
+ relative: true
+ source: path
+ version: "0.2.2"
+ shell_executor:
+ dependency: transitive
+ description:
+ name: shell_executor
+ sha256: "9c024546fc96470a6b96be9902f0bc05347a017a7638ed8d93c77e8d77eb3c3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.6"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.15.0"
+sdks:
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/screen_capturer_lib/screen_capturer_linux/pubspec.lock b/third-party/tool/screen_capturer_lib/screen_capturer_linux/pubspec.lock
new file mode 100644
index 00000000..f1346be1
--- /dev/null
+++ b/third-party/tool/screen_capturer_lib/screen_capturer_linux/pubspec.lock
@@ -0,0 +1,236 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mostly_reasonable_lints:
+ dependency: "direct dev"
+ description:
+ name: mostly_reasonable_lints
+ sha256: e19fec63536866ba307b3dfbc258b4bce9b3745129f038006b56b4067c6293d8
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ screen_capturer_platform_interface:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_platform_interface"
+ relative: true
+ source: path
+ version: "0.2.2"
+ shell_executor:
+ dependency: "direct main"
+ description:
+ name: shell_executor
+ sha256: "9c024546fc96470a6b96be9902f0bc05347a017a7638ed8d93c77e8d77eb3c3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.6"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/screen_capturer_lib/screen_capturer_macos/pubspec.lock b/third-party/tool/screen_capturer_lib/screen_capturer_macos/pubspec.lock
new file mode 100644
index 00000000..f1346be1
--- /dev/null
+++ b/third-party/tool/screen_capturer_lib/screen_capturer_macos/pubspec.lock
@@ -0,0 +1,236 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mostly_reasonable_lints:
+ dependency: "direct dev"
+ description:
+ name: mostly_reasonable_lints
+ sha256: e19fec63536866ba307b3dfbc258b4bce9b3745129f038006b56b4067c6293d8
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ screen_capturer_platform_interface:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_platform_interface"
+ relative: true
+ source: path
+ version: "0.2.2"
+ shell_executor:
+ dependency: "direct main"
+ description:
+ name: shell_executor
+ sha256: "9c024546fc96470a6b96be9902f0bc05347a017a7638ed8d93c77e8d77eb3c3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.6"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/screen_capturer_lib/screen_capturer_platform_interface/pubspec.lock b/third-party/tool/screen_capturer_lib/screen_capturer_platform_interface/pubspec.lock
new file mode 100644
index 00000000..dcca0999
--- /dev/null
+++ b/third-party/tool/screen_capturer_lib/screen_capturer_platform_interface/pubspec.lock
@@ -0,0 +1,525 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _fe_analyzer_shared:
+ dependency: transitive
+ description:
+ name: _fe_analyzer_shared
+ sha256: "8d7ff3948166b8ec5da0fbb5962000926b8e02f2ed9b3e51d1738905fbd4c98d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "93.0.0"
+ analyzer:
+ dependency: transitive
+ description:
+ name: analyzer
+ sha256: de7148ed2fcec579b19f122c1800933dfa028f6d9fd38a152b04b1516cec120b
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.1"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ build:
+ dependency: transitive
+ description:
+ name: build
+ sha256: a156715e7cd728130c592f30552575908aae5b100005fbc1f0fb16b3c03a3d10
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.6"
+ build_config:
+ dependency: transitive
+ description:
+ name: build_config
+ sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ build_daemon:
+ dependency: transitive
+ description:
+ name: build_daemon
+ sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.1"
+ build_runner:
+ dependency: "direct dev"
+ description:
+ name: build_runner
+ sha256: "1523ce62448ebac2c15a8ba5fbad8acac169788658a7dd2a1c2d9c2a9318b9a6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.15.0"
+ built_collection:
+ dependency: transitive
+ description:
+ name: built_collection
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ built_value:
+ dependency: transitive
+ description:
+ name: built_value
+ sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.12.6"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.4"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.2"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.7"
+ dart_style:
+ dependency: transitive
+ description:
+ name: dart_style
+ sha256: "29f7ecc274a86d32920b1d9cfc7502fa87220da41ec60b55f329559d5732e2b2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.7"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
+ graphs:
+ dependency: transitive
+ description:
+ name: graphs
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ http_multi_server:
+ dependency: transitive
+ description:
+ name: http_multi_server
+ sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.2"
+ io:
+ dependency: transitive
+ description:
+ name: io
+ sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.5"
+ json_annotation:
+ dependency: "direct main"
+ description:
+ name: json_annotation
+ sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ json_serializable:
+ dependency: "direct dev"
+ description:
+ name: json_serializable
+ sha256: "2c15e78e1cc6e62aadecf59f81566fd56829713d96a8c4177699e2b2e17f20db"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.13.2"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ mostly_reasonable_lints:
+ dependency: "direct dev"
+ description:
+ name: mostly_reasonable_lints
+ sha256: e19fec63536866ba307b3dfbc258b4bce9b3745129f038006b56b4067c6293d8
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: "direct main"
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ pool:
+ dependency: transitive
+ description:
+ name: pool
+ sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.2"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ shelf:
+ dependency: transitive
+ description:
+ name: shelf
+ sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.2"
+ shelf_web_socket:
+ dependency: transitive
+ description:
+ name: shelf_web_socket
+ sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.0"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_gen:
+ dependency: transitive
+ description:
+ name: source_gen
+ sha256: ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.3"
+ source_helper:
+ dependency: transitive
+ description:
+ name: source_helper
+ sha256: "4227d54ceefd0bb8ca4c8fcb96e1719dc53f1ee1b6e2ca9d7a6069da160e4eae"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.12"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ stream_transform:
+ dependency: transitive
+ description:
+ name: stream_transform
+ sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+ watcher:
+ dependency: transitive
+ description:
+ name: watcher
+ sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+sdks:
+ dart: ">=3.10.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/tool/screen_capturer_lib/screen_capturer_windows/pubspec.lock b/third-party/tool/screen_capturer_lib/screen_capturer_windows/pubspec.lock
new file mode 100644
index 00000000..571e55d6
--- /dev/null
+++ b/third-party/tool/screen_capturer_lib/screen_capturer_windows/pubspec.lock
@@ -0,0 +1,244 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ ffi:
+ dependency: "direct main"
+ description:
+ name: ffi
+ sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.11.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mostly_reasonable_lints:
+ dependency: "direct dev"
+ description:
+ name: mostly_reasonable_lints
+ sha256: e19fec63536866ba307b3dfbc258b4bce9b3745129f038006b56b4067c6293d8
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ plugin_platform_interface:
+ dependency: transitive
+ description:
+ name: plugin_platform_interface
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.8"
+ screen_capturer_platform_interface:
+ dependency: "direct main"
+ description:
+ path: "../screen_capturer_platform_interface"
+ relative: true
+ source: path
+ version: "0.2.2"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+ win32:
+ dependency: "direct main"
+ description:
+ name: win32
+ sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.15.0"
+sdks:
+ dart: ">=3.9.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/widget/desktop_multi_window/pubspec.lock b/third-party/widget/desktop_multi_window/pubspec.lock
index 91bbac3c..c01ef112 100644
--- a/third-party/widget/desktop_multi_window/pubspec.lock
+++ b/third-party/widget/desktop_multi_window/pubspec.lock
@@ -5,50 +5,50 @@ packages:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
- url: "https://pub.flutter-io.cn"
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
- url: "https://pub.flutter-io.cn"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
- url: "https://pub.flutter-io.cn"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
clock:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
- url: "https://pub.flutter-io.cn"
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
- url: "https://pub.flutter-io.cn"
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.flutter-io.cn"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
flutter:
dependency: "direct main"
description: flutter
@@ -58,10 +58,10 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
- sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
- url: "https://pub.flutter-io.cn"
+ sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
+ url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.0.3"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -71,135 +71,135 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
- url: "https://pub.flutter-io.cn"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
- url: "https://pub.flutter-io.cn"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.flutter-io.cn"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lints:
dependency: transitive
description:
name: lints
- sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
- url: "https://pub.flutter-io.cn"
+ sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
+ url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.1.1"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
- url: "https://pub.flutter-io.cn"
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.flutter-io.cn"
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
- url: "https://pub.flutter-io.cn"
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.17.0"
path:
dependency: transitive
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
- url: "https://pub.flutter-io.cn"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
sky_engine:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
- url: "https://pub.flutter-io.cn"
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
- url: "https://pub.flutter-io.cn"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
- url: "https://pub.flutter-io.cn"
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
- url: "https://pub.flutter-io.cn"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
- url: "https://pub.flutter-io.cn"
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
- url: "https://pub.flutter-io.cn"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.10"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.flutter-io.cn"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
- url: "https://pub.flutter-io.cn"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
source: hosted
- version: "14.2.4"
+ version: "15.2.0"
sdks:
- dart: ">=3.3.0 <4.0.0"
+ dart: ">=3.9.0-0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/widget/lucide_icons/pubspec.lock b/third-party/widget/lucide_icons/pubspec.lock
index 21d783fd..857bff92 100644
--- a/third-party/widget/lucide_icons/pubspec.lock
+++ b/third-party/widget/lucide_icons/pubspec.lock
@@ -5,32 +5,32 @@ packages:
dependency: transitive
description:
name: async
- sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
- url: "https://pub.flutter-io.cn"
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
source: hosted
- version: "2.12.0"
+ version: "2.13.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
- url: "https://pub.flutter-io.cn"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
source: hosted
- version: "1.4.0"
+ version: "1.4.1"
clock:
dependency: transitive
description:
name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.1.2"
collection:
@@ -38,7 +38,7 @@ packages:
description:
name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.19.1"
csslib:
@@ -46,17 +46,17 @@ packages:
description:
name: csslib
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.0.2"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
- url: "https://pub.flutter-io.cn"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.2"
+ version: "1.3.3"
flutter:
dependency: "direct main"
description: flutter
@@ -71,72 +71,72 @@ packages:
dependency: "direct dev"
description:
name: html
- sha256: "9475be233c437f0e3637af55e7702cbbe5c23a68bd56e8a5fa2d426297b7c6c8"
- url: "https://pub.flutter-io.cn"
+ sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602"
+ url: "https://pub.dev"
source: hosted
- version: "0.15.5+1"
+ version: "0.15.6"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
- sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
- url: "https://pub.flutter-io.cn"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
source: hosted
- version: "10.0.8"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
- url: "https://pub.flutter-io.cn"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.9"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.flutter-io.cn"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
lint:
dependency: "direct dev"
description:
name: lint
sha256: "4a539aa34ec5721a2c7574ae2ca0336738ea4adc2a34887d54b7596310b33c85"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.10.0"
matcher:
dependency: transitive
description:
name: matcher
- sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
- url: "https://pub.flutter-io.cn"
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
source: hosted
- version: "0.12.17"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.flutter-io.cn"
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
dependency: transitive
description:
name: meta
- sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
- url: "https://pub.flutter-io.cn"
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
source: hosted
- version: "1.16.0"
+ version: "1.17.0"
path:
dependency: transitive
description:
name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.9.1"
recase:
@@ -144,7 +144,7 @@ packages:
description:
name: recase
sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "4.1.0"
sky_engine:
@@ -156,16 +156,16 @@ packages:
dependency: transitive
description:
name: source_span
- sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
- url: "https://pub.flutter-io.cn"
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
source: hosted
- version: "1.10.1"
+ version: "1.10.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.12.1"
stream_channel:
@@ -173,7 +173,7 @@ packages:
description:
name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "2.1.4"
string_scanner:
@@ -181,7 +181,7 @@ packages:
description:
name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.4.1"
term_glyph:
@@ -189,33 +189,33 @@ packages:
description:
name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
- url: "https://pub.flutter-io.cn"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
source: hosted
- version: "0.7.4"
+ version: "0.7.10"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.flutter-io.cn"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
- url: "https://pub.flutter-io.cn"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
source: hosted
- version: "14.3.1"
+ version: "15.2.0"
sdks:
- dart: ">=3.7.0-0 <4.0.0"
+ dart: ">=3.9.0-0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/widget/pinput/pubspec.lock b/third-party/widget/pinput/pubspec.lock
index fa87fc76..6d421cd6 100644
--- a/third-party/widget/pinput/pubspec.lock
+++ b/third-party/widget/pinput/pubspec.lock
@@ -5,50 +5,50 @@ packages:
dependency: transitive
description:
name: async
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
- url: "https://pub.flutter-io.cn"
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
source: hosted
- version: "2.11.0"
+ version: "2.13.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
- url: "https://pub.flutter-io.cn"
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
- url: "https://pub.flutter-io.cn"
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.4.1"
clock:
dependency: transitive
description:
name: clock
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
- url: "https://pub.flutter-io.cn"
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
- sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
- url: "https://pub.flutter-io.cn"
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
source: hosted
- version: "1.18.0"
+ version: "1.19.1"
fake_async:
dependency: transitive
description:
name: fake_async
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
- url: "https://pub.flutter-io.cn"
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
source: hosted
- version: "1.3.1"
+ version: "1.3.3"
flutter:
dependency: "direct main"
description: flutter
@@ -63,135 +63,135 @@ packages:
dependency: transitive
description:
name: leak_tracker
- sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
- url: "https://pub.flutter-io.cn"
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
source: hosted
- version: "10.0.5"
+ version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
- sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
- url: "https://pub.flutter-io.cn"
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.5"
+ version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
- sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
- url: "https://pub.flutter-io.cn"
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
matcher:
dependency: transitive
description:
name: matcher
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
- url: "https://pub.flutter-io.cn"
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
source: hosted
- version: "0.12.16+1"
+ version: "0.12.19"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
- url: "https://pub.flutter-io.cn"
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
source: hosted
- version: "0.11.1"
+ version: "0.13.0"
meta:
dependency: transitive
description:
name: meta
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
- url: "https://pub.flutter-io.cn"
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
source: hosted
- version: "1.15.0"
+ version: "1.17.0"
path:
dependency: transitive
description:
name: path
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
- url: "https://pub.flutter-io.cn"
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
source: hosted
- version: "1.9.0"
+ version: "1.9.1"
sky_engine:
dependency: transitive
description: flutter
source: sdk
- version: "0.0.99"
+ version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
- url: "https://pub.flutter-io.cn"
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.10.2"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
- url: "https://pub.flutter-io.cn"
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
source: hosted
- version: "1.11.1"
+ version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
- url: "https://pub.flutter-io.cn"
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
- sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
- url: "https://pub.flutter-io.cn"
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
- url: "https://pub.flutter-io.cn"
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
source: hosted
- version: "1.2.1"
+ version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
- url: "https://pub.flutter-io.cn"
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
source: hosted
- version: "0.7.2"
+ version: "0.7.10"
universal_platform:
dependency: "direct main"
description:
name: universal_platform
sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec"
- url: "https://pub.flutter-io.cn"
+ url: "https://pub.dev"
source: hosted
version: "1.1.0"
vector_math:
dependency: transitive
description:
name: vector_math
- sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
- url: "https://pub.flutter-io.cn"
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
source: hosted
- version: "2.1.4"
+ version: "2.2.0"
vm_service:
dependency: transitive
description:
name: vm_service
- sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
- url: "https://pub.flutter-io.cn"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
source: hosted
- version: "14.2.4"
+ version: "15.2.0"
sdks:
- dart: ">=3.3.0 <4.0.0"
+ dart: ">=3.9.0-0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
diff --git a/third-party/widget/smart_snackbars/pubspec.lock b/third-party/widget/smart_snackbars/pubspec.lock
new file mode 100644
index 00000000..c01ef112
--- /dev/null
+++ b/third-party/widget/smart_snackbars/pubspec.lock
@@ -0,0 +1,205 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.1"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.3"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
+ url: "https://pub.dev"
+ source: hosted
+ version: "11.0.2"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.10"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.19"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.2"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
+ url: "https://pub.dev"
+ source: hosted
+ version: "15.2.0"
+sdks:
+ dart: ">=3.9.0-0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
From 2bc553bcf61abfcec81a5d4eba2fda5958eaa53f Mon Sep 17 00:00:00 2001
From: dd
Date: Sat, 16 May 2026 21:31:07 +0800
Subject: [PATCH 02/36] Fix several security bugs and update flutter version
---
.github/workflows/release.yml | 4 +-
lib/Database/database_manager.dart | 10 ++-
lib/Database/token_dao.dart | 10 ++-
lib/Screens/Lock/pin_change_screen.dart | 11 +--
lib/Screens/Lock/pin_verify_screen.dart | 76 ++++++++++++++++---
lib/Screens/Setting/select_theme_screen.dart | 2 +-
lib/Screens/Token/token_layout.dart | 25 +++---
lib/TokenUtils/Backup/backup_encrypt_old.dart | 12 ++-
lib/TokenUtils/Backup/backup_encrypt_v1.dart | 10 ++-
lib/Utils/app_provider.dart | 25 ++++++
lib/Utils/hive_util.dart | 28 +++++++
.../import_from_third_party_bottom_sheet.dart | 2 +-
lib/main.dart | 15 +++-
.../lib/src/Providers/chewie_provider.dart | 6 +-
.../chewie/lib/src/Resources/fonts.dart | 15 ++--
.../lib/src/Utils/System/hive_util.dart | 9 ++-
.../lib/src/Utils/System/locale_util.dart | 1 +
17 files changed, 200 insertions(+), 61 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3acca990..0e487e2f 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -63,7 +63,7 @@ jobs:
arch: ${{ steps.get_version.outputs.arch}}
runs-on: ${{ matrix.os }}
env:
- FLUTTER_VERSION: 3.27.2
+ FLUTTER_VERSION: 3.41.9
steps:
# Checkout branch
- name: Checkout
@@ -81,7 +81,7 @@ jobs:
uses: subosito/flutter-action@v2.21.0
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- channel: 'master'
+ channel: 'stable'
cache: true
# Setup JDK
diff --git a/lib/Database/database_manager.dart b/lib/Database/database_manager.dart
index 5f1ae129..b9f2872d 100644
--- a/lib/Database/database_manager.dart
+++ b/lib/Database/database_manager.dart
@@ -107,11 +107,14 @@ class DatabaseManager {
await ConfigDao.initConfig();
}
+ static String _escapeSql(String value) => value.replaceAll("'", "''");
+
static Future changePassword(String password) async {
if (_database != null) {
+ final escaped = _escapeSql(password);
if (isDatabaseEncrypted) {
List