From 71db42492aeaa1970030a230384e9f8119e1f621 Mon Sep 17 00:00:00 2001 From: jalil Date: Fri, 10 Jul 2026 13:21:47 +0330 Subject: [PATCH 1/2] feat: add bulk profile import from mixed-text clipboard - Add BulkImportProfilesView widget with: - Multi-line text area for pasting arbitrary mixed text - URL extraction via regex (http/https/ftp + proxy schemes) - Interactive checklist to select/deselect detected URLs - Sequential profile add with per-item success/fail status - "Paste from clipboard" shortcut button - Supports http, https, ftp, vmess, vless, ss, trojan, hysteria, hysteria2, tuic, wg, wireguard schemes - Add 'Bulk Import' ListItem entry in AddProfileView - Add i18n keys to intl_en.arb: bulkImport, bulkImportDesc, bulkImportTitle, bulkImportPaste, bulkImportDetected, bulkImportNoUrls, bulkImportStart, bulkImportAdding, bulkImportDone, bulkImportResult --- arb/intl_en.arb | 26 +- lib/views/profiles/add_profile.dart | 22 ++ lib/views/profiles/bulk_import_profiles.dart | 277 +++++++++++++++++++ 3 files changed, 322 insertions(+), 3 deletions(-) create mode 100644 lib/views/profiles/bulk_import_profiles.dart diff --git a/arb/intl_en.arb b/arb/intl_en.arb index 58ffaafa5..545820262 100644 --- a/arb/intl_en.arb +++ b/arb/intl_en.arb @@ -120,7 +120,7 @@ "years": "{count, plural, one{year} other{years}}", "months": "{count, plural, one{month} other{months}}", "hours": "{count, plural, one{hour} other{hours}}", - "days": "{count, plural, one{day} other{days}}", + "days": "{count, plural, one{day} other{years}}", "minutes": "{count, plural, one{minute} other{minutes}}", "seconds": "Seconds", "ago": " ago", @@ -650,6 +650,26 @@ "agePublicKeyLabel": "Age Public Key", "generateFromPrivateKey": "Generate from Age private key", "ageKeyPairGeneratedSuccess": "X25519 Key pair generated, please keep it safe", - "agePrivateKeyRequired": "Please enter a correct Age private key first" + "agePrivateKeyRequired": "Please enter a correct Age private key first", + "bulkImport": "Bulk Import", + "bulkImportDesc": "Paste any text containing URLs to import multiple profiles at once", + "bulkImportTitle": "Bulk Import Profiles", + "bulkImportPaste": "Paste text here — any URLs will be auto-detected...", + "bulkImportDetected": "{count} URL(s) detected", + "@bulkImportDetected": { + "placeholders": { + "count": { "type": "String" } + } + }, + "bulkImportNoUrls": "No valid URLs found in the text", + "bulkImportStart": "Import Selected", + "bulkImportAdding": "Importing...", + "bulkImportDone": "Done", + "bulkImportResult": "{success} imported, {fail} failed", + "@bulkImportResult": { + "placeholders": { + "success": { "type": "String" }, + "fail": { "type": "String" } + } + } } - diff --git a/lib/views/profiles/add_profile.dart b/lib/views/profiles/add_profile.dart index 26757147f..4ebfa0700 100644 --- a/lib/views/profiles/add_profile.dart +++ b/lib/views/profiles/add_profile.dart @@ -5,6 +5,7 @@ import 'package:bett_box/state.dart'; import 'package:bett_box/widgets/widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'bulk_import_profiles.dart'; import 'edit_profile.dart'; class AddProfileView extends StatelessWidget { @@ -95,6 +96,21 @@ class AddProfileView extends StatelessWidget { _handleAddProfileFormURL(''); } + void _handleBulkImport() { + showExtend( + context, + builder: (_, type) { + return AdaptiveSheetScaffold( + type: type, + body: SingleChildScrollView( + child: BulkImportProfilesView(parentContext: context), + ), + title: appLocalizations.bulkImportTitle, + ); + }, + ); + } + @override Widget build(context) { return ListView( @@ -123,6 +139,12 @@ class AddProfileView extends StatelessWidget { subtitle: Text(appLocalizations.urlDesc), onTap: _toAdd, ), + ListItem( + leading: const Icon(Icons.playlist_add_rounded), + title: Text(appLocalizations.bulkImport), + subtitle: Text(appLocalizations.bulkImportDesc), + onTap: _handleBulkImport, + ), ], ); } diff --git a/lib/views/profiles/bulk_import_profiles.dart b/lib/views/profiles/bulk_import_profiles.dart new file mode 100644 index 000000000..702c5c162 --- /dev/null +++ b/lib/views/profiles/bulk_import_profiles.dart @@ -0,0 +1,277 @@ +import 'package:bett_box/common/common.dart'; +import 'package:bett_box/models/models.dart'; +import 'package:bett_box/state.dart'; +import 'package:bett_box/widgets/widgets.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'edit_profile.dart'; + +/// Extracts all subscription-like URLs from arbitrary mixed text. +/// Matches http(s)/ftp as well as common proxy URI schemes. +List extractProfileUrls(String text) { + final pattern = RegExp( + r'(?:https?|ftp|vmess|vless|ss|trojan|hysteria2?|tuic|wg|wireguard)://[^\s"\'>\]\)]+', + caseSensitive: false, + ); + return pattern + .allMatches(text) + .map((m) => m.group(0)!.trim()) + .where((u) => u.isNotEmpty) + .toSet() + .toList(); +} + +class BulkImportProfilesView extends StatefulWidget { + final BuildContext parentContext; + + const BulkImportProfilesView({super.key, required this.parentContext}); + + @override + State createState() => + _BulkImportProfilesViewState(); +} + +class _BulkImportProfilesViewState extends State { + final TextEditingController _textController = TextEditingController(); + List _detectedUrls = []; + final Set _selectedIndices = {}; + + // null = not started, true = success, false = fail + final Map _importStatus = {}; + bool _isImporting = false; + bool _isDone = false; + + @override + void dispose() { + _textController.dispose(); + super.dispose(); + } + + void _analyze() { + final urls = extractProfileUrls(_textController.text); + setState(() { + _detectedUrls = urls; + _selectedIndices + ..clear() + ..addAll(List.generate(urls.length, (i) => i)); + _importStatus.clear(); + _isDone = false; + }); + } + + Future _pasteFromClipboard() async { + final data = await Clipboard.getData(Clipboard.kTextPlain); + final text = data?.text ?? ''; + if (text.isNotEmpty) { + _textController.text = text; + _analyze(); + } + } + + Future _startImport() async { + if (_selectedIndices.isEmpty) return; + setState(() { + _isImporting = true; + _isDone = false; + _importStatus.clear(); + }); + + for (final idx in _selectedIndices.toList()..sort()) { + final url = _detectedUrls[idx]; + try { + final profile = Profile.normal(url: url); + await globalState.appController.addProfile(profile); + if (mounted) setState(() => _importStatus[idx] = true); + } catch (_) { + if (mounted) setState(() => _importStatus[idx] = false); + } + } + + if (mounted) setState(() { + _isImporting = false; + _isDone = true; + }); + } + + void _openEditForUrl(String url) { + final editKey = GlobalKey(); + final profile = Profile.normal(url: url); + showExtend( + widget.parentContext, + builder: (_, type) { + return AdaptiveSheetScaffold( + type: type, + actions: [ + IconButton( + icon: const Icon(Icons.security), + onPressed: () => editKey.currentState?.showAgeKeyGenerator(), + ), + ], + body: EditProfileView( + key: editKey, + profile: profile, + context: widget.parentContext, + isNew: true, + ), + title: appLocalizations.importFromURL, + ); + }, + ); + } + + Widget _buildStatusIcon(int idx) { + final status = _importStatus[idx]; + if (_isImporting && !_importStatus.containsKey(idx)) { + return const SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ); + } + if (status == true) { + return const Icon(Icons.check_circle, color: Colors.green, size: 20); + } + if (status == false) { + return const Icon(Icons.error, color: Colors.red, size: 20); + } + return const SizedBox.shrink(); + } + + @override + Widget build(BuildContext context) { + final hasUrls = _detectedUrls.isNotEmpty; + final canImport = + hasUrls && _selectedIndices.isNotEmpty && !_isImporting; + final successCount = + _importStatus.values.where((v) => v == true).length; + final failCount = _importStatus.values.where((v) => v == false).length; + + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // ── Input area ────────────────────────────────────────────── + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: TextField( + controller: _textController, + maxLines: 6, + minLines: 4, + onChanged: (_) => _analyze(), + decoration: InputDecoration( + hintText: appLocalizations.bulkImportPaste, + border: const OutlineInputBorder(), + isDense: true, + ), + ), + ), + + // ── Action row ────────────────────────────────────────────── + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Row( + children: [ + OutlinedButton.icon( + onPressed: _isImporting ? null : _pasteFromClipboard, + icon: const Icon(Icons.content_paste, size: 18), + label: Text(appLocalizations.clipboard), + ), + const Spacer(), + FilledButton.icon( + onPressed: canImport ? _startImport : null, + icon: const Icon(Icons.download_for_offline_outlined, size: 18), + label: Text( + _isImporting + ? appLocalizations.bulkImportAdding + : appLocalizations.bulkImportStart, + ), + ), + ], + ), + ), + + const SizedBox(height: 8), + + // ── Result summary ─────────────────────────────────────────── + if (_isDone) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + child: Text( + appLocalizations.bulkImportResult( + successCount.toString(), + failCount.toString(), + ), + style: context.textTheme.bodySmall?.copyWith( + color: context.colorScheme.primary, + ), + ), + ), + + // ── URL list ──────────────────────────────────────────────── + if (!hasUrls) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Text( + _textController.text.isEmpty + ? appLocalizations.bulkImportDesc + : appLocalizations.bulkImportNoUrls, + style: context.textTheme.bodySmall?.copyWith( + color: context.colorScheme.onSurfaceVariant, + ), + textAlign: TextAlign.center, + ), + ) + else + ListView.builder( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + itemCount: _detectedUrls.length, + itemBuilder: (_, idx) { + final url = _detectedUrls[idx]; + final isSelected = _selectedIndices.contains(idx); + return CheckboxListTile( + value: isSelected, + onChanged: _isImporting + ? null + : (v) { + setState(() { + if (v == true) { + _selectedIndices.add(idx); + } else { + _selectedIndices.remove(idx); + } + }); + }, + title: Text( + url, + style: context.textTheme.bodySmall, + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + secondary: Row( + mainAxisSize: MainAxisSize.min, + children: [ + _buildStatusIcon(idx), + if (_importStatus[idx] != true) + IconButton( + icon: const Icon(Icons.edit_outlined, size: 18), + tooltip: appLocalizations.edit, + onPressed: _isImporting + ? null + : () => _openEditForUrl(url), + ), + ], + ), + dense: true, + controlAffinity: ListTileControlAffinity.leading, + ); + }, + ), + + const SizedBox(height: 16), + ], + ); + } +} From f9a69e0780dbe66ddcb080d9472efb3f1180d476 Mon Sep 17 00:00:00 2001 From: jalil Date: Fri, 10 Jul 2026 17:57:54 +0330 Subject: [PATCH 2/2] feat(profiles): add bulk import UI with multi-language support - Add bulk import UI component with URL detection from mixed text - Support multiple proxy URI schemes (vmess, vless, ss, trojan, etc.) - Add localization for English, Russian, Simplified Chinese, and Traditional Chinese - Update message indices across all locale files to accommodate new bulk import strings - Fix regex pattern in bulk_import_profiles.dart to use raw string for better readability - Remove unused path_provider_foundation plugin from macOS GeneratedPluginRegistrant - Add pubspec.lock to .gitignore for Flutter version management --- .gitignore | 3 +- arb/intl_ru.arb | 23 +- arb/intl_zh_CN.arb | 23 +- arb/intl_zh_TC.arb | 23 +- lib/l10n/intl/messages_en.dart | 83 +-- lib/l10n/intl/messages_ru.dart | 85 +-- lib/l10n/intl/messages_zh_CN.dart | 78 +-- lib/l10n/intl/messages_zh_TC.dart | 78 +-- lib/l10n/l10n.dart | 94 +++- lib/views/profiles/bulk_import_profiles.dart | 2 +- macos/Flutter/GeneratedPluginRegistrant.swift | 2 - pubspec.lock | 496 +++++++++--------- 12 files changed, 617 insertions(+), 373 deletions(-) diff --git a/.gitignore b/.gitignore index 24920e626..5ed3ec817 100644 --- a/.gitignore +++ b/.gitignore @@ -73,4 +73,5 @@ app.*.map.json # FVM Version Cache .fvm/ -.fvmrc \ No newline at end of file +.fvmrc +pubspec.lock diff --git a/arb/intl_ru.arb b/arb/intl_ru.arb index 9eebe3396..39278fdcb 100644 --- a/arb/intl_ru.arb +++ b/arb/intl_ru.arb @@ -653,6 +653,27 @@ "agePublicKeyLabel": "Открытый ключ", "generateFromPrivateKey": "Создать из закрытого ключа", "ageKeyPairGeneratedSuccess": "Пара ключей X25519 создана, сохраните её в надёжном месте", - "agePrivateKeyRequired": "Пожалуйста, сначала введите корректный закрытый ключ Age" + "agePrivateKeyRequired": "Пожалуйста, сначала введите корректный закрытый ключ Age", + "bulkImport": "Массовый импорт", + "bulkImportDesc": "Вставьте текст с URL для массового импорта профилей", + "bulkImportTitle": "Массовый импорт профилей", + "bulkImportPaste": "Вставьте текст сюда — все URL будут автоматически обнаружены...", + "bulkImportDetected": "Обнаружено {count} URL", + "@bulkImportDetected": { + "placeholders": { + "count": { "type": "String" } + } + }, + "bulkImportNoUrls": "В тексте не найдено действительных URL", + "bulkImportStart": "Импортировать выбранные", + "bulkImportAdding": "Импорт...", + "bulkImportDone": "Готово", + "bulkImportResult": "Импортировано: {success}, ошибок: {fail}", + "@bulkImportResult": { + "placeholders": { + "success": { "type": "String" }, + "fail": { "type": "String" } + } + } } diff --git a/arb/intl_zh_CN.arb b/arb/intl_zh_CN.arb index 838aa2a11..e3b458cf2 100644 --- a/arb/intl_zh_CN.arb +++ b/arb/intl_zh_CN.arb @@ -651,6 +651,27 @@ "agePublicKeyLabel": "Age 公钥", "generateFromPrivateKey": "从Age私钥生成", "ageKeyPairGeneratedSuccess": "已生成X25519密钥对, 请妥善保存", - "agePrivateKeyRequired": "请先输入正确的Age 私钥" + "agePrivateKeyRequired": "请先输入正确的Age 私钥", + "bulkImport": "批量导入", + "bulkImportDesc": "粘贴包含URL的文本,一次性导入多个配置", + "bulkImportTitle": "批量导入配置", + "bulkImportPaste": "在此粘贴文本 — 任何URL将被自动检测...", + "bulkImportDetected": "检测到 {count} 个URL", + "@bulkImportDetected": { + "placeholders": { + "count": { "type": "String" } + } + }, + "bulkImportNoUrls": "文本中未找到有效的URL", + "bulkImportStart": "导入选中项", + "bulkImportAdding": "导入中...", + "bulkImportDone": "完成", + "bulkImportResult": "成功导入 {success} 个,失败 {fail} 个", + "@bulkImportResult": { + "placeholders": { + "success": { "type": "String" }, + "fail": { "type": "String" } + } + } } diff --git a/arb/intl_zh_TC.arb b/arb/intl_zh_TC.arb index 9ba549a1a..27a10e41b 100644 --- a/arb/intl_zh_TC.arb +++ b/arb/intl_zh_TC.arb @@ -651,6 +651,27 @@ "agePublicKeyLabel": "Age 公鑰", "generateFromPrivateKey": "從Age私鑰生成", "ageKeyPairGeneratedSuccess": "已生成X25519密鑰對, 請妥善保存", - "agePrivateKeyRequired": "請先輸入正確的Age 私鑰" + "agePrivateKeyRequired": "請先輸入正確的Age 私鑰", + "bulkImport": "批次匯入", + "bulkImportDesc": "貼上包含URL的文本,一次匯入多個設定檔", + "bulkImportTitle": "批次匯入設定檔", + "bulkImportPaste": "在此貼上文本 — 任何URL將被自動偵測...", + "bulkImportDetected": "偵測到 {count} 個URL", + "@bulkImportDetected": { + "placeholders": { + "count": { "type": "String" } + } + }, + "bulkImportNoUrls": "文本中未找到有效的URL", + "bulkImportStart": "匯入選取項目", + "bulkImportAdding": "匯入中...", + "bulkImportDone": "完成", + "bulkImportResult": "成功匯入 {success} 個,失敗 {fail} 個", + "@bulkImportResult": { + "placeholders": { + "success": { "type": "String" }, + "fail": { "type": "String" } + } + } } diff --git a/lib/l10n/intl/messages_en.dart b/lib/l10n/intl/messages_en.dart index 289c3ff05..504f107db 100644 --- a/lib/l10n/intl/messages_en.dart +++ b/lib/l10n/intl/messages_en.dart @@ -20,40 +20,45 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'en'; - static String m0(count) => "${Intl.plural(count, one: 'day', other: 'days')}"; + static String m0(count) => "${count} URL(s) detected"; - static String m1(label) => "Delete selected ${label}?"; + static String m1(success, fail) => "${success} imported, ${fail} failed"; - static String m2(label) => "Delete current ${label}?"; + static String m2(count) => + "${Intl.plural(count, one: 'day', other: 'years')}"; - static String m3(label) => "${label} cannot be empty"; + static String m3(label) => "Delete selected ${label}?"; - static String m4(label) => "${label} already exists"; + static String m4(label) => "Delete current ${label}?"; - static String m5(count) => + static String m5(label) => "${label} cannot be empty"; + + static String m6(label) => "${label} already exists"; + + static String m7(count) => "${Intl.plural(count, one: 'hour', other: 'hours')}"; - static String m6(count) => + static String m8(count) => "${Intl.plural(count, one: 'minute', other: 'minutes')}"; - static String m7(count) => + static String m9(count) => "${Intl.plural(count, one: 'month', other: 'months')}"; - static String m8(label) => "No ${label}"; + static String m10(label) => "No ${label}"; - static String m9(label) => "${label} must be a number"; + static String m11(label) => "${label} must be a number"; - static String m10(label) => + static String m12(label) => "${label} must be between 1024 and 49151, 0 to disable"; - static String m11(statusCode) => + static String m13(statusCode) => "Failed to import profile. Please check your network status or try resetting the subscription link ( HTTP error code: ${statusCode} )"; - static String m12(count) => "${count} items selected"; + static String m14(count) => "${count} items selected"; - static String m13(label) => "${label} must be a URL"; + static String m15(label) => "${label} must be a URL"; - static String m14(count) => + static String m16(count) => "${Intl.plural(count, one: 'year', other: 'years')}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -195,6 +200,24 @@ class MessageLookup extends MessageLookupByLibrary { "bind": MessageLookupByLibrary.simpleMessage("Bind"), "blacklist": MessageLookupByLibrary.simpleMessage("Blacklist"), "blacklistMode": MessageLookupByLibrary.simpleMessage("Blacklist Mode"), + "bulkImport": MessageLookupByLibrary.simpleMessage("Bulk Import"), + "bulkImportAdding": MessageLookupByLibrary.simpleMessage("Importing..."), + "bulkImportDesc": MessageLookupByLibrary.simpleMessage( + "Paste any text containing URLs to import multiple profiles at once", + ), + "bulkImportDetected": m0, + "bulkImportDone": MessageLookupByLibrary.simpleMessage("Done"), + "bulkImportNoUrls": MessageLookupByLibrary.simpleMessage( + "No valid URLs found in the text", + ), + "bulkImportPaste": MessageLookupByLibrary.simpleMessage( + "Paste text here — any URLs will be auto-detected...", + ), + "bulkImportResult": m1, + "bulkImportStart": MessageLookupByLibrary.simpleMessage("Import Selected"), + "bulkImportTitle": MessageLookupByLibrary.simpleMessage( + "Bulk Import Profiles", + ), "bypassDomain": MessageLookupByLibrary.simpleMessage("Bypass Domain"), "bypassDomainDesc": MessageLookupByLibrary.simpleMessage( "Active only when System Proxy is on", @@ -301,7 +324,7 @@ class MessageLookup extends MessageLookupByLibrary { "cut": MessageLookupByLibrary.simpleMessage("Cut"), "dark": MessageLookupByLibrary.simpleMessage("Dark"), "dashboard": MessageLookupByLibrary.simpleMessage("Dash"), - "days": m0, + "days": m2, "defaultNameserver": MessageLookupByLibrary.simpleMessage( "Default Nameserver", ), @@ -317,8 +340,8 @@ class MessageLookup extends MessageLookupByLibrary { ), "delaySort": MessageLookupByLibrary.simpleMessage("Sort by Delay"), "delete": MessageLookupByLibrary.simpleMessage("Delete"), - "deleteMultipTip": m1, - "deleteTip": m2, + "deleteMultipTip": m3, + "deleteTip": m4, "deleteTunnel": MessageLookupByLibrary.simpleMessage("Delete Forwarding"), "desc": MessageLookupByLibrary.simpleMessage( "Bettbox is based on the powerful and flexible Mihomo (Clash.Meta) proxy kernel, dedicated to a superior user experience. Forked from FlClash: Better Experience, Out of the box", @@ -384,7 +407,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "edit": MessageLookupByLibrary.simpleMessage("Edit"), "editTunnel": MessageLookupByLibrary.simpleMessage("Edit Forwarding"), - "emptyTip": m3, + "emptyTip": m5, "en": MessageLookupByLibrary.simpleMessage("English"), "enableCrashReport": MessageLookupByLibrary.simpleMessage( "Crash Analytics", @@ -411,7 +434,7 @@ class MessageLookup extends MessageLookupByLibrary { "excludeDesc": MessageLookupByLibrary.simpleMessage( "Hide app from recent tasks list", ), - "existsTip": m4, + "existsTip": m6, "exit": MessageLookupByLibrary.simpleMessage("Exit"), "expand": MessageLookupByLibrary.simpleMessage("Standard"), "experimental": MessageLookupByLibrary.simpleMessage("Experimental"), @@ -545,7 +568,7 @@ class MessageLookup extends MessageLookupByLibrary { "hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage( "Control app via keyboard", ), - "hours": m5, + "hours": m7, "httpPortSniffer": MessageLookupByLibrary.simpleMessage( "HTTP Port Sniffing", ), @@ -637,11 +660,11 @@ class MessageLookup extends MessageLookupByLibrary { "minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage( "Override default exit behavior", ), - "minutes": m6, + "minutes": m8, "mixedPort": MessageLookupByLibrary.simpleMessage("Mixed Port"), "mode": MessageLookupByLibrary.simpleMessage("Mode"), "monochromeScheme": MessageLookupByLibrary.simpleMessage("Monochrome"), - "months": m7, + "months": m9, "more": MessageLookupByLibrary.simpleMessage("More"), "name": MessageLookupByLibrary.simpleMessage("Name"), "nameSort": MessageLookupByLibrary.simpleMessage("Sort by Name"), @@ -723,8 +746,8 @@ class MessageLookup extends MessageLookupByLibrary { "nullProfileDesc": MessageLookupByLibrary.simpleMessage( "No profile. Please add one.", ), - "nullTip": m8, - "numberTip": m9, + "nullTip": m10, + "numberTip": m11, "oneColumn": MessageLookupByLibrary.simpleMessage("1 Column"), "onlinePanel": MessageLookupByLibrary.simpleMessage("Online Panel"), "onlyIcon": MessageLookupByLibrary.simpleMessage("Icon Only"), @@ -826,7 +849,7 @@ class MessageLookup extends MessageLookupByLibrary { "portConflictTip": MessageLookupByLibrary.simpleMessage( "Please enter a different port", ), - "portTip": m10, + "portTip": m12, "powerSwitch": MessageLookupByLibrary.simpleMessage("Power"), "preferH3Desc": MessageLookupByLibrary.simpleMessage( "Prioritize DoH HTTP/3", @@ -841,7 +864,7 @@ class MessageLookup extends MessageLookupByLibrary { "profileHasUpdate": MessageLookupByLibrary.simpleMessage( "Profile modified. Disable auto-update?", ), - "profileImportFailed": m11, + "profileImportFailed": m13, "profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage( "Please enter a profile name", ), @@ -986,7 +1009,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "selectAll": MessageLookupByLibrary.simpleMessage("Select All"), "selected": MessageLookupByLibrary.simpleMessage("Selected"), - "selectedCountTitle": m12, + "selectedCountTitle": m14, "serviceReady": MessageLookupByLibrary.simpleMessage("Service Ready"), "serviceRunning": MessageLookupByLibrary.simpleMessage("Service Running"), "settings": MessageLookupByLibrary.simpleMessage("Settings"), @@ -1160,7 +1183,7 @@ class MessageLookup extends MessageLookupByLibrary { "upload": MessageLookupByLibrary.simpleMessage("Upload"), "url": MessageLookupByLibrary.simpleMessage("URL"), "urlDesc": MessageLookupByLibrary.simpleMessage("Get profile via URL"), - "urlTip": m13, + "urlTip": m15, "useGlobalScriptOverride": MessageLookupByLibrary.simpleMessage( "Use Global Script Override", ), @@ -1193,7 +1216,7 @@ class MessageLookup extends MessageLookupByLibrary { "writeToSystemDesc": MessageLookupByLibrary.simpleMessage( "Requires administrator privileges", ), - "years": m14, + "years": m16, "zh_CN": MessageLookupByLibrary.simpleMessage("Simplified Chinese"), "zh_TC": MessageLookupByLibrary.simpleMessage("Traditional Chinese"), }; diff --git a/lib/l10n/intl/messages_ru.dart b/lib/l10n/intl/messages_ru.dart index 6c4310998..923e1dc83 100644 --- a/lib/l10n/intl/messages_ru.dart +++ b/lib/l10n/intl/messages_ru.dart @@ -20,41 +20,46 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'ru'; - static String m0(count) => + static String m0(count) => "Обнаружено ${count} URL"; + + static String m1(success, fail) => + "Импортировано: ${success}, ошибок: ${fail}"; + + static String m2(count) => "${Intl.plural(count, one: 'день', few: 'дня', many: 'дней', other: 'дней')}"; - static String m1(label) => "Удалить выбранные ${label}?"; + static String m3(label) => "Удалить выбранные ${label}?"; - static String m2(label) => "Удалить текущий ${label}?"; + static String m4(label) => "Удалить текущий ${label}?"; - static String m3(label) => "${label} не может быть пустым"; + static String m5(label) => "${label} не может быть пустым"; - static String m4(label) => "${label} уже существует"; + static String m6(label) => "${label} уже существует"; - static String m5(count) => + static String m7(count) => "${Intl.plural(count, one: 'час', few: 'часа', many: 'часов', other: 'часов')}"; - static String m6(count) => + static String m8(count) => "${Intl.plural(count, one: 'минуту', few: 'минуты', many: 'минут', other: 'минут')}"; - static String m7(count) => + static String m9(count) => "${Intl.plural(count, one: 'месяц', few: 'месяца', many: 'месяцев', other: 'месяцев')}"; - static String m8(label) => "${label} отсутствует"; + static String m10(label) => "${label} отсутствует"; - static String m9(label) => "${label} должен быть числом"; + static String m11(label) => "${label} должен быть числом"; - static String m10(label) => + static String m12(label) => "${label} должен быть от 1024 до 49151, 0 для отключения"; - static String m11(statusCode) => + static String m13(statusCode) => "Не удалось импортировать профиль. Проверьте состояние сети или попробуйте сбросить ссылку подписки ( код ошибки HTTP: ${statusCode} )"; - static String m12(count) => "Выбрано: ${count}"; + static String m14(count) => "Выбрано: ${count}"; - static String m13(label) => "${label} должен быть URL"; + static String m15(label) => "${label} должен быть URL"; - static String m14(count) => + static String m16(count) => "${Intl.plural(count, one: 'год', few: 'года', many: 'лет', other: 'лет')}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -198,6 +203,26 @@ class MessageLookup extends MessageLookupByLibrary { "blacklistMode": MessageLookupByLibrary.simpleMessage( "Режим чёрного списка", ), + "bulkImport": MessageLookupByLibrary.simpleMessage("Массовый импорт"), + "bulkImportAdding": MessageLookupByLibrary.simpleMessage("Импорт..."), + "bulkImportDesc": MessageLookupByLibrary.simpleMessage( + "Вставьте текст с URL для массового импорта профилей", + ), + "bulkImportDetected": m0, + "bulkImportDone": MessageLookupByLibrary.simpleMessage("Готово"), + "bulkImportNoUrls": MessageLookupByLibrary.simpleMessage( + "В тексте не найдено действительных URL", + ), + "bulkImportPaste": MessageLookupByLibrary.simpleMessage( + "Вставьте текст сюда — все URL будут автоматически обнаружены...", + ), + "bulkImportResult": m1, + "bulkImportStart": MessageLookupByLibrary.simpleMessage( + "Импортировать выбранные", + ), + "bulkImportTitle": MessageLookupByLibrary.simpleMessage( + "Массовый импорт профилей", + ), "bypassDomain": MessageLookupByLibrary.simpleMessage("Исключить домены"), "bypassDomainDesc": MessageLookupByLibrary.simpleMessage( "Работает только при включённом системном прокси", @@ -302,7 +327,7 @@ class MessageLookup extends MessageLookupByLibrary { "cut": MessageLookupByLibrary.simpleMessage("Вырезать"), "dark": MessageLookupByLibrary.simpleMessage("Тёмная"), "dashboard": MessageLookupByLibrary.simpleMessage("Обзор"), - "days": m0, + "days": m2, "defaultNameserver": MessageLookupByLibrary.simpleMessage( "DNS по умолчанию", ), @@ -318,8 +343,8 @@ class MessageLookup extends MessageLookupByLibrary { ), "delaySort": MessageLookupByLibrary.simpleMessage("По задержке"), "delete": MessageLookupByLibrary.simpleMessage("Удалить"), - "deleteMultipTip": m1, - "deleteTip": m2, + "deleteMultipTip": m3, + "deleteTip": m4, "deleteTunnel": MessageLookupByLibrary.simpleMessage( "Удалить перенаправление", ), @@ -387,7 +412,7 @@ class MessageLookup extends MessageLookupByLibrary { "editTunnel": MessageLookupByLibrary.simpleMessage( "Изменить перенаправление", ), - "emptyTip": m3, + "emptyTip": m5, "en": MessageLookupByLibrary.simpleMessage("Английский"), "enableCrashReport": MessageLookupByLibrary.simpleMessage("Анализ сбоев"), "enableCrashReportDesc": MessageLookupByLibrary.simpleMessage( @@ -414,7 +439,7 @@ class MessageLookup extends MessageLookupByLibrary { "excludeDesc": MessageLookupByLibrary.simpleMessage( "Скрыть приложение из недавних задач", ), - "existsTip": m4, + "existsTip": m6, "exit": MessageLookupByLibrary.simpleMessage("Выход"), "expand": MessageLookupByLibrary.simpleMessage("Максимальная"), "experimental": MessageLookupByLibrary.simpleMessage("Экспериментальное"), @@ -558,7 +583,7 @@ class MessageLookup extends MessageLookupByLibrary { "hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage( "Управление приложением с клавиатуры", ), - "hours": m5, + "hours": m7, "httpPortSniffer": MessageLookupByLibrary.simpleMessage( "HTTP порты сниффера", ), @@ -648,11 +673,11 @@ class MessageLookup extends MessageLookupByLibrary { "minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage( "Изменить поведение при выходе", ), - "minutes": m6, + "minutes": m8, "mixedPort": MessageLookupByLibrary.simpleMessage("Смешанный порт"), "mode": MessageLookupByLibrary.simpleMessage("Режим"), "monochromeScheme": MessageLookupByLibrary.simpleMessage("Монохром"), - "months": m7, + "months": m9, "more": MessageLookupByLibrary.simpleMessage("Подробности"), "name": MessageLookupByLibrary.simpleMessage("Имя"), "nameSort": MessageLookupByLibrary.simpleMessage("По имени"), @@ -736,8 +761,8 @@ class MessageLookup extends MessageLookupByLibrary { "nullProfileDesc": MessageLookupByLibrary.simpleMessage( "Нет профиля, добавьте его", ), - "nullTip": m8, - "numberTip": m9, + "nullTip": m10, + "numberTip": m11, "oneColumn": MessageLookupByLibrary.simpleMessage("1 колонка"), "onlinePanel": MessageLookupByLibrary.simpleMessage("Онлайн-панель"), "onlyIcon": MessageLookupByLibrary.simpleMessage("Только иконки"), @@ -843,7 +868,7 @@ class MessageLookup extends MessageLookupByLibrary { "portConflictTip": MessageLookupByLibrary.simpleMessage( "Введите разные порты", ), - "portTip": m10, + "portTip": m12, "powerSwitch": MessageLookupByLibrary.simpleMessage("Запуск"), "preferH3Desc": MessageLookupByLibrary.simpleMessage( "Приоритет HTTP/3 для DoH", @@ -860,7 +885,7 @@ class MessageLookup extends MessageLookupByLibrary { "profileHasUpdate": MessageLookupByLibrary.simpleMessage( "Конфигурация изменена. Отключить автообновление?", ), - "profileImportFailed": m11, + "profileImportFailed": m13, "profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage( "Введите имя профиля", ), @@ -1001,7 +1026,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "selectAll": MessageLookupByLibrary.simpleMessage("Выбрать все"), "selected": MessageLookupByLibrary.simpleMessage("Выбрано"), - "selectedCountTitle": m12, + "selectedCountTitle": m14, "serviceReady": MessageLookupByLibrary.simpleMessage("Служба готова"), "serviceRunning": MessageLookupByLibrary.simpleMessage("Служба запущена"), "settings": MessageLookupByLibrary.simpleMessage("Настройки"), @@ -1193,7 +1218,7 @@ class MessageLookup extends MessageLookupByLibrary { "upload": MessageLookupByLibrary.simpleMessage("Отправка"), "url": MessageLookupByLibrary.simpleMessage("URL"), "urlDesc": MessageLookupByLibrary.simpleMessage("Получить профиль по URL"), - "urlTip": m13, + "urlTip": m15, "useGlobalScriptOverride": MessageLookupByLibrary.simpleMessage( "Глобальное переопределение", ), @@ -1230,7 +1255,7 @@ class MessageLookup extends MessageLookupByLibrary { "writeToSystemDesc": MessageLookupByLibrary.simpleMessage( "Требуются права администратора", ), - "years": m14, + "years": m16, "zh_CN": MessageLookupByLibrary.simpleMessage("Китайский (упрощённый)"), "zh_TC": MessageLookupByLibrary.simpleMessage("Китайский (традиционный)"), }; diff --git a/lib/l10n/intl/messages_zh_CN.dart b/lib/l10n/intl/messages_zh_CN.dart index bc85dd22e..ab1fc07ab 100644 --- a/lib/l10n/intl/messages_zh_CN.dart +++ b/lib/l10n/intl/messages_zh_CN.dart @@ -20,36 +20,40 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'zh_CN'; - static String m0(count) => "${Intl.plural(count, other: '天')}"; + static String m0(count) => "检测到 ${count} 个URL"; - static String m1(label) => "确定删除选中的${label}吗?"; + static String m1(success, fail) => "成功导入 ${success} 个,失败 ${fail} 个"; - static String m2(label) => "确定删除当前${label}吗?"; + static String m2(count) => "${Intl.plural(count, other: '天')}"; - static String m3(label) => "${label}不能为空"; + static String m3(label) => "确定删除选中的${label}吗?"; - static String m4(label) => "${label}当前已存在"; + static String m4(label) => "确定删除当前${label}吗?"; - static String m5(count) => "${Intl.plural(count, other: '小时')}"; + static String m5(label) => "${label}不能为空"; - static String m6(count) => "${Intl.plural(count, other: '分钟')}"; + static String m6(label) => "${label}当前已存在"; - static String m7(count) => "${Intl.plural(count, other: '月')}"; + static String m7(count) => "${Intl.plural(count, other: '小时')}"; - static String m8(label) => "暂无${label}"; + static String m8(count) => "${Intl.plural(count, other: '分钟')}"; - static String m9(label) => "${label}必须为数字"; + static String m9(count) => "${Intl.plural(count, other: '月')}"; - static String m10(label) => "${label} 必须在 1024 到 49151 之间, 0为关闭"; + static String m10(label) => "暂无${label}"; - static String m11(statusCode) => + static String m11(label) => "${label}必须为数字"; + + static String m12(label) => "${label} 必须在 1024 到 49151 之间, 0为关闭"; + + static String m13(statusCode) => "配置导入失败,请检查网络状况或尝试重置订阅链接( HTTP错误代码: ${statusCode} )"; - static String m12(count) => "已选择 ${count} 项"; + static String m14(count) => "已选择 ${count} 项"; - static String m13(label) => "${label}必须为URL"; + static String m15(label) => "${label}必须为URL"; - static String m14(count) => "${Intl.plural(count, other: '年')}"; + static String m16(count) => "${Intl.plural(count, other: '年')}"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -140,6 +144,20 @@ class MessageLookup extends MessageLookupByLibrary { "bind": MessageLookupByLibrary.simpleMessage("绑定"), "blacklist": MessageLookupByLibrary.simpleMessage("黑名单"), "blacklistMode": MessageLookupByLibrary.simpleMessage("黑名单模式"), + "bulkImport": MessageLookupByLibrary.simpleMessage("批量导入"), + "bulkImportAdding": MessageLookupByLibrary.simpleMessage("导入中..."), + "bulkImportDesc": MessageLookupByLibrary.simpleMessage( + "粘贴包含URL的文本,一次性导入多个配置", + ), + "bulkImportDetected": m0, + "bulkImportDone": MessageLookupByLibrary.simpleMessage("完成"), + "bulkImportNoUrls": MessageLookupByLibrary.simpleMessage("文本中未找到有效的URL"), + "bulkImportPaste": MessageLookupByLibrary.simpleMessage( + "在此粘贴文本 — 任何URL将被自动检测...", + ), + "bulkImportResult": m1, + "bulkImportStart": MessageLookupByLibrary.simpleMessage("导入选中项"), + "bulkImportTitle": MessageLookupByLibrary.simpleMessage("批量导入配置"), "bypassDomain": MessageLookupByLibrary.simpleMessage("排除域名"), "bypassDomainDesc": MessageLookupByLibrary.simpleMessage("仅在系统代理启用时生效"), "bypassPrivateRoute": MessageLookupByLibrary.simpleMessage("绕过私有网络"), @@ -214,7 +232,7 @@ class MessageLookup extends MessageLookupByLibrary { "cut": MessageLookupByLibrary.simpleMessage("剪切"), "dark": MessageLookupByLibrary.simpleMessage("深色"), "dashboard": MessageLookupByLibrary.simpleMessage("首页"), - "days": m0, + "days": m2, "defaultNameserver": MessageLookupByLibrary.simpleMessage("默认域名服务器"), "defaultNameserverDesc": MessageLookupByLibrary.simpleMessage("用于解析DNS服务器"), "defaultSort": MessageLookupByLibrary.simpleMessage("按默认排序"), @@ -224,8 +242,8 @@ class MessageLookup extends MessageLookupByLibrary { "delayAnimationDesc": MessageLookupByLibrary.simpleMessage("自定义测试过程中的动画显示"), "delaySort": MessageLookupByLibrary.simpleMessage("按延迟排序"), "delete": MessageLookupByLibrary.simpleMessage("删除"), - "deleteMultipTip": m1, - "deleteTip": m2, + "deleteMultipTip": m3, + "deleteTip": m4, "deleteTunnel": MessageLookupByLibrary.simpleMessage("删除转发"), "desc": MessageLookupByLibrary.simpleMessage( "Bettbox基于强大灵活的Mihomo(Clash.Meta)代理内核,致力于更好的体验,Forked form FlClash,Better Experience, Out of the box", @@ -267,7 +285,7 @@ class MessageLookup extends MessageLookupByLibrary { "dozeSuspendDesc": MessageLookupByLibrary.simpleMessage("开启后同步系统Doze休眠模式"), "edit": MessageLookupByLibrary.simpleMessage("编辑"), "editTunnel": MessageLookupByLibrary.simpleMessage("编辑转发"), - "emptyTip": m3, + "emptyTip": m5, "en": MessageLookupByLibrary.simpleMessage("英语"), "enableCrashReport": MessageLookupByLibrary.simpleMessage("应用崩溃分析"), "enableCrashReportDesc": MessageLookupByLibrary.simpleMessage( @@ -288,7 +306,7 @@ class MessageLookup extends MessageLookupByLibrary { "放行中国QUIC流量而非全部禁用", ), "excludeDesc": MessageLookupByLibrary.simpleMessage("从最近任务中隐藏应用"), - "existsTip": m4, + "existsTip": m6, "exit": MessageLookupByLibrary.simpleMessage("退出"), "expand": MessageLookupByLibrary.simpleMessage("标准"), "experimental": MessageLookupByLibrary.simpleMessage("Experimental"), @@ -376,7 +394,7 @@ class MessageLookup extends MessageLookupByLibrary { "hotkeyConflict": MessageLookupByLibrary.simpleMessage("快捷键冲突"), "hotkeyManagement": MessageLookupByLibrary.simpleMessage("快捷键管理"), "hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage("使用键盘控制应用程序"), - "hours": m5, + "hours": m7, "httpPortSniffer": MessageLookupByLibrary.simpleMessage("HTTP 端口嗅探"), "icmpForwarding": MessageLookupByLibrary.simpleMessage("ICMP转发"), "icmpForwardingDesc": MessageLookupByLibrary.simpleMessage( @@ -438,11 +456,11 @@ class MessageLookup extends MessageLookupByLibrary { "min": MessageLookupByLibrary.simpleMessage("最小"), "minimizeOnExit": MessageLookupByLibrary.simpleMessage("退出最小化"), "minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage("修改系统默认退出事件"), - "minutes": m6, + "minutes": m8, "mixedPort": MessageLookupByLibrary.simpleMessage("混合端口"), "mode": MessageLookupByLibrary.simpleMessage("模式"), "monochromeScheme": MessageLookupByLibrary.simpleMessage("单色"), - "months": m7, + "months": m9, "more": MessageLookupByLibrary.simpleMessage("查看"), "name": MessageLookupByLibrary.simpleMessage("名称"), "nameSort": MessageLookupByLibrary.simpleMessage("按名称排序"), @@ -500,8 +518,8 @@ class MessageLookup extends MessageLookupByLibrary { "ntpStatus": MessageLookupByLibrary.simpleMessage("状态"), "ntpStatusDesc": MessageLookupByLibrary.simpleMessage("开启NTP时间服务"), "nullProfileDesc": MessageLookupByLibrary.simpleMessage("没有配置文件,请先添加配置文件"), - "nullTip": m8, - "numberTip": m9, + "nullTip": m10, + "numberTip": m11, "oneColumn": MessageLookupByLibrary.simpleMessage("一列"), "onlinePanel": MessageLookupByLibrary.simpleMessage("在线面板"), "onlyIcon": MessageLookupByLibrary.simpleMessage("仅图标"), @@ -571,7 +589,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "port": MessageLookupByLibrary.simpleMessage("端口"), "portConflictTip": MessageLookupByLibrary.simpleMessage("请输入不同的端口"), - "portTip": m10, + "portTip": m12, "powerSwitch": MessageLookupByLibrary.simpleMessage("启动开关"), "preferH3Desc": MessageLookupByLibrary.simpleMessage("优先使用DOH的http/3"), "pressKeyboard": MessageLookupByLibrary.simpleMessage("请按下按键"), @@ -584,7 +602,7 @@ class MessageLookup extends MessageLookupByLibrary { "profileHasUpdate": MessageLookupByLibrary.simpleMessage( "配置文件已经修改,是否关闭自动更新 ", ), - "profileImportFailed": m11, + "profileImportFailed": m13, "profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage( "请输入配置名称", ), @@ -677,7 +695,7 @@ class MessageLookup extends MessageLookupByLibrary { "secretCopied": MessageLookupByLibrary.simpleMessage("密码已复制到剪贴板"), "selectAll": MessageLookupByLibrary.simpleMessage("全选"), "selected": MessageLookupByLibrary.simpleMessage("已选择"), - "selectedCountTitle": m12, + "selectedCountTitle": m14, "serviceReady": MessageLookupByLibrary.simpleMessage("服务已就绪"), "serviceRunning": MessageLookupByLibrary.simpleMessage("服务正在运行中"), "settings": MessageLookupByLibrary.simpleMessage("设置"), @@ -811,7 +829,7 @@ class MessageLookup extends MessageLookupByLibrary { "upload": MessageLookupByLibrary.simpleMessage("上传"), "url": MessageLookupByLibrary.simpleMessage("URL"), "urlDesc": MessageLookupByLibrary.simpleMessage("通过URL获取配置文件"), - "urlTip": m13, + "urlTip": m15, "useGlobalScriptOverride": MessageLookupByLibrary.simpleMessage("使用全局脚本覆写"), "useHosts": MessageLookupByLibrary.simpleMessage("使用Hosts"), "useSystemHosts": MessageLookupByLibrary.simpleMessage("使用系统Hosts"), @@ -836,7 +854,7 @@ class MessageLookup extends MessageLookupByLibrary { "whitelistMode": MessageLookupByLibrary.simpleMessage("白名单模式"), "writeToSystem": MessageLookupByLibrary.simpleMessage("写入系统"), "writeToSystemDesc": MessageLookupByLibrary.simpleMessage("需要管理员权限"), - "years": m14, + "years": m16, "zh_CN": MessageLookupByLibrary.simpleMessage("简体中文"), "zh_TC": MessageLookupByLibrary.simpleMessage("繁体中文"), }; diff --git a/lib/l10n/intl/messages_zh_TC.dart b/lib/l10n/intl/messages_zh_TC.dart index 368de2564..442925f62 100644 --- a/lib/l10n/intl/messages_zh_TC.dart +++ b/lib/l10n/intl/messages_zh_TC.dart @@ -20,36 +20,40 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'zh_TC'; - static String m0(count) => "${Intl.plural(count, other: '天')}"; + static String m0(count) => "偵測到 ${count} 個URL"; - static String m1(label) => "確定刪除選取的 ${label} 嗎?"; + static String m1(success, fail) => "成功匯入 ${success} 個,失敗 ${fail} 個"; - static String m2(label) => "確定刪除目前的 ${label} 嗎?"; + static String m2(count) => "${Intl.plural(count, other: '天')}"; - static String m3(label) => "${label}不能為空"; + static String m3(label) => "確定刪除選取的 ${label} 嗎?"; - static String m4(label) => "${label}目前已存在"; + static String m4(label) => "確定刪除目前的 ${label} 嗎?"; - static String m5(count) => "${Intl.plural(count, other: '小時')}"; + static String m5(label) => "${label}不能為空"; - static String m6(count) => "${Intl.plural(count, other: '分鐘')}"; + static String m6(label) => "${label}目前已存在"; - static String m7(count) => "${Intl.plural(count, other: '月')}"; + static String m7(count) => "${Intl.plural(count, other: '小時')}"; - static String m8(label) => "暫無 ${label}"; + static String m8(count) => "${Intl.plural(count, other: '分鐘')}"; - static String m9(label) => "${label}必須為數字"; + static String m9(count) => "${Intl.plural(count, other: '月')}"; - static String m10(label) => "${label} 必須在 1024 到 49151 之間, 0為關閉"; + static String m10(label) => "暫無 ${label}"; - static String m11(statusCode) => + static String m11(label) => "${label}必須為數字"; + + static String m12(label) => "${label} 必須在 1024 到 49151 之間, 0為關閉"; + + static String m13(statusCode) => "配置導入失敗,請檢查網路狀況或嘗試重置訂閱連結( HTTP錯誤代碼: ${statusCode} )"; - static String m12(count) => "已選擇 ${count} 項"; + static String m14(count) => "已選擇 ${count} 項"; - static String m13(label) => "${label}必須為 URL"; + static String m15(label) => "${label}必須為 URL"; - static String m14(count) => "${Intl.plural(count, other: '年')}"; + static String m16(count) => "${Intl.plural(count, other: '年')}"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -142,6 +146,20 @@ class MessageLookup extends MessageLookupByLibrary { "bind": MessageLookupByLibrary.simpleMessage("綁定"), "blacklist": MessageLookupByLibrary.simpleMessage("黑名單"), "blacklistMode": MessageLookupByLibrary.simpleMessage("黑名單模式"), + "bulkImport": MessageLookupByLibrary.simpleMessage("批次匯入"), + "bulkImportAdding": MessageLookupByLibrary.simpleMessage("匯入中..."), + "bulkImportDesc": MessageLookupByLibrary.simpleMessage( + "貼上包含URL的文本,一次匯入多個設定檔", + ), + "bulkImportDetected": m0, + "bulkImportDone": MessageLookupByLibrary.simpleMessage("完成"), + "bulkImportNoUrls": MessageLookupByLibrary.simpleMessage("文本中未找到有效的URL"), + "bulkImportPaste": MessageLookupByLibrary.simpleMessage( + "在此貼上文本 — 任何URL將被自動偵測...", + ), + "bulkImportResult": m1, + "bulkImportStart": MessageLookupByLibrary.simpleMessage("匯入選取項目"), + "bulkImportTitle": MessageLookupByLibrary.simpleMessage("批次匯入設定檔"), "bypassDomain": MessageLookupByLibrary.simpleMessage("排除網域"), "bypassDomainDesc": MessageLookupByLibrary.simpleMessage("僅在系統代理啟用時生效"), "bypassPrivateRoute": MessageLookupByLibrary.simpleMessage("繞過私有網路"), @@ -216,7 +234,7 @@ class MessageLookup extends MessageLookupByLibrary { "cut": MessageLookupByLibrary.simpleMessage("剪下"), "dark": MessageLookupByLibrary.simpleMessage("深色"), "dashboard": MessageLookupByLibrary.simpleMessage("首頁"), - "days": m0, + "days": m2, "defaultNameserver": MessageLookupByLibrary.simpleMessage("預設網域名稱伺服器"), "defaultNameserverDesc": MessageLookupByLibrary.simpleMessage( "用於解析 DNS 伺服器", @@ -228,8 +246,8 @@ class MessageLookup extends MessageLookupByLibrary { "delayAnimationDesc": MessageLookupByLibrary.simpleMessage("自訂測試過程中的動畫顯示"), "delaySort": MessageLookupByLibrary.simpleMessage("按延遲排序"), "delete": MessageLookupByLibrary.simpleMessage("刪除"), - "deleteMultipTip": m1, - "deleteTip": m2, + "deleteMultipTip": m3, + "deleteTip": m4, "deleteTunnel": MessageLookupByLibrary.simpleMessage("刪除轉發"), "desc": MessageLookupByLibrary.simpleMessage( "Bettbox 基於強大靈活的 Mihomo (Clash.Meta) 代理內核,致力於提供更好的體驗,Forked from FlClash,Better Experience, Out of the box", @@ -273,7 +291,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "edit": MessageLookupByLibrary.simpleMessage("編輯"), "editTunnel": MessageLookupByLibrary.simpleMessage("編輯轉發"), - "emptyTip": m3, + "emptyTip": m5, "en": MessageLookupByLibrary.simpleMessage("英語"), "enableCrashReport": MessageLookupByLibrary.simpleMessage("應用崩潰分析"), "enableCrashReportDesc": MessageLookupByLibrary.simpleMessage( @@ -294,7 +312,7 @@ class MessageLookup extends MessageLookupByLibrary { "放行中國QUIC流量而非全部禁用", ), "excludeDesc": MessageLookupByLibrary.simpleMessage("從最近任務中隱藏應用程式"), - "existsTip": m4, + "existsTip": m6, "exit": MessageLookupByLibrary.simpleMessage("退出"), "expand": MessageLookupByLibrary.simpleMessage("標準"), "experimental": MessageLookupByLibrary.simpleMessage("Experimental"), @@ -388,7 +406,7 @@ class MessageLookup extends MessageLookupByLibrary { "hotkeyConflict": MessageLookupByLibrary.simpleMessage("快捷鍵衝突"), "hotkeyManagement": MessageLookupByLibrary.simpleMessage("快捷鍵管理"), "hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage("使用鍵盤控制應用程式"), - "hours": m5, + "hours": m7, "httpPortSniffer": MessageLookupByLibrary.simpleMessage("HTTP 連接埠嗅探"), "icmpForwarding": MessageLookupByLibrary.simpleMessage("ICMP 轉發"), "icmpForwardingDesc": MessageLookupByLibrary.simpleMessage( @@ -450,11 +468,11 @@ class MessageLookup extends MessageLookupByLibrary { "min": MessageLookupByLibrary.simpleMessage("最小"), "minimizeOnExit": MessageLookupByLibrary.simpleMessage("退出最小化"), "minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage("修改系統預設退出事件"), - "minutes": m6, + "minutes": m8, "mixedPort": MessageLookupByLibrary.simpleMessage("混合連接埠"), "mode": MessageLookupByLibrary.simpleMessage("模式"), "monochromeScheme": MessageLookupByLibrary.simpleMessage("單色"), - "months": m7, + "months": m9, "more": MessageLookupByLibrary.simpleMessage("查看"), "name": MessageLookupByLibrary.simpleMessage("名稱"), "nameSort": MessageLookupByLibrary.simpleMessage("按名稱排序"), @@ -514,8 +532,8 @@ class MessageLookup extends MessageLookupByLibrary { "ntpStatus": MessageLookupByLibrary.simpleMessage("狀態"), "ntpStatusDesc": MessageLookupByLibrary.simpleMessage("開啟 NTP 時間服務"), "nullProfileDesc": MessageLookupByLibrary.simpleMessage("沒有設定檔,請先新增設定檔"), - "nullTip": m8, - "numberTip": m9, + "nullTip": m10, + "numberTip": m11, "oneColumn": MessageLookupByLibrary.simpleMessage("一列"), "onlinePanel": MessageLookupByLibrary.simpleMessage("線上面板"), "onlyIcon": MessageLookupByLibrary.simpleMessage("僅圖示"), @@ -589,7 +607,7 @@ class MessageLookup extends MessageLookupByLibrary { ), "port": MessageLookupByLibrary.simpleMessage("連接埠"), "portConflictTip": MessageLookupByLibrary.simpleMessage("請輸入不同的連接埠"), - "portTip": m10, + "portTip": m12, "powerSwitch": MessageLookupByLibrary.simpleMessage("啟動開關"), "preferH3Desc": MessageLookupByLibrary.simpleMessage("優先使用 DOH 的 http/3"), "pressKeyboard": MessageLookupByLibrary.simpleMessage("請按下按鍵"), @@ -602,7 +620,7 @@ class MessageLookup extends MessageLookupByLibrary { "profileHasUpdate": MessageLookupByLibrary.simpleMessage( "設定檔已經修改,是否關閉自動更新 ", ), - "profileImportFailed": m11, + "profileImportFailed": m13, "profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage( "請輸入配置名稱", ), @@ -699,7 +717,7 @@ class MessageLookup extends MessageLookupByLibrary { "secretCopied": MessageLookupByLibrary.simpleMessage("密碼已複製到剪貼簿"), "selectAll": MessageLookupByLibrary.simpleMessage("全選"), "selected": MessageLookupByLibrary.simpleMessage("已選擇"), - "selectedCountTitle": m12, + "selectedCountTitle": m14, "serviceReady": MessageLookupByLibrary.simpleMessage("服務已就緒"), "serviceRunning": MessageLookupByLibrary.simpleMessage("服務正在執行中"), "settings": MessageLookupByLibrary.simpleMessage("設定"), @@ -835,7 +853,7 @@ class MessageLookup extends MessageLookupByLibrary { "upload": MessageLookupByLibrary.simpleMessage("上傳"), "url": MessageLookupByLibrary.simpleMessage("URL"), "urlDesc": MessageLookupByLibrary.simpleMessage("透過 URL 獲取設定檔"), - "urlTip": m13, + "urlTip": m15, "useGlobalScriptOverride": MessageLookupByLibrary.simpleMessage( "使用全域指令碼覆寫", ), @@ -862,7 +880,7 @@ class MessageLookup extends MessageLookupByLibrary { "whitelistMode": MessageLookupByLibrary.simpleMessage("白名單模式"), "writeToSystem": MessageLookupByLibrary.simpleMessage("寫入系統"), "writeToSystemDesc": MessageLookupByLibrary.simpleMessage("需要管理員權限"), - "years": m14, + "years": m16, "zh_CN": MessageLookupByLibrary.simpleMessage("簡體中文"), "zh_TC": MessageLookupByLibrary.simpleMessage("繁體中文"), }; diff --git a/lib/l10n/l10n.dart b/lib/l10n/l10n.dart index 6732cd713..295ec2b0d 100644 --- a/lib/l10n/l10n.dart +++ b/lib/l10n/l10n.dart @@ -1050,12 +1050,12 @@ class AppLocalizations { ); } - /// `{count, plural, one{day} other{days}}` + /// `{count, plural, one{day} other{years}}` String days(num count) { return Intl.plural( count, one: 'day', - other: 'days', + other: 'years', name: 'days', desc: '', args: [count], @@ -5338,6 +5338,96 @@ class AppLocalizations { args: [], ); } + + /// `Bulk Import` + String get bulkImport { + return Intl.message('Bulk Import', name: 'bulkImport', desc: '', args: []); + } + + /// `Paste any text containing URLs to import multiple profiles at once` + String get bulkImportDesc { + return Intl.message( + 'Paste any text containing URLs to import multiple profiles at once', + name: 'bulkImportDesc', + desc: '', + args: [], + ); + } + + /// `Bulk Import Profiles` + String get bulkImportTitle { + return Intl.message( + 'Bulk Import Profiles', + name: 'bulkImportTitle', + desc: '', + args: [], + ); + } + + /// `Paste text here — any URLs will be auto-detected...` + String get bulkImportPaste { + return Intl.message( + 'Paste text here — any URLs will be auto-detected...', + name: 'bulkImportPaste', + desc: '', + args: [], + ); + } + + /// `{count} URL(s) detected` + String bulkImportDetected(String count) { + return Intl.message( + '$count URL(s) detected', + name: 'bulkImportDetected', + desc: '', + args: [count], + ); + } + + /// `No valid URLs found in the text` + String get bulkImportNoUrls { + return Intl.message( + 'No valid URLs found in the text', + name: 'bulkImportNoUrls', + desc: '', + args: [], + ); + } + + /// `Import Selected` + String get bulkImportStart { + return Intl.message( + 'Import Selected', + name: 'bulkImportStart', + desc: '', + args: [], + ); + } + + /// `Importing...` + String get bulkImportAdding { + return Intl.message( + 'Importing...', + name: 'bulkImportAdding', + desc: '', + args: [], + ); + } + + /// `Done` + String get bulkImportDone { + return Intl.message('Done', name: 'bulkImportDone', desc: '', args: []); + } + + /// `{success} imported, {fail} failed` + String bulkImportResult(String success, String fail) { + return Intl.message( + '$success imported, $fail failed', + name: 'bulkImportResult', + desc: '', + args: [success, fail], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/views/profiles/bulk_import_profiles.dart b/lib/views/profiles/bulk_import_profiles.dart index 702c5c162..ae0557fc3 100644 --- a/lib/views/profiles/bulk_import_profiles.dart +++ b/lib/views/profiles/bulk_import_profiles.dart @@ -11,7 +11,7 @@ import 'edit_profile.dart'; /// Matches http(s)/ftp as well as common proxy URI schemes. List extractProfileUrls(String text) { final pattern = RegExp( - r'(?:https?|ftp|vmess|vless|ss|trojan|hysteria2?|tuic|wg|wireguard)://[^\s"\'>\]\)]+', + r"""(?:https?|ftp|vmess|vless|ss|trojan|hysteria2?|tuic|wg|wireguard)://[^\s"'<>\]\)]+""", caseSensitive: false, ); return pattern diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 162425788..f11989f5d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -15,7 +15,6 @@ import flutter_qjs import hotkey_manager_macos import mobile_scanner import package_info_plus -import path_provider_foundation import restart_app import screen_retriever_macos import shared_preferences_foundation @@ -37,7 +36,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { HotkeyManagerMacosPlugin.register(with: registry.registrar(forPlugin: "HotkeyManagerMacosPlugin")) MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) - PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) RestartAppPlugin.register(with: registry.registrar(forPlugin: "RestartAppPlugin")) ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) diff --git a/pubspec.lock b/pubspec.lock index be0a63f97..57b3923d5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -6,7 +6,7 @@ packages: description: name: _fe_analyzer_shared sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "85.0.0" analyzer: @@ -14,7 +14,7 @@ packages: description: name: analyzer sha256: f4ad0fea5f102201015c9aae9d93bc02f75dd9491529a8c21f88d17a8523d44c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.6.0" analyzer_plugin: @@ -22,7 +22,7 @@ packages: description: name: analyzer_plugin sha256: a5ab7590c27b779f3d4de67f31c4109dbe13dd7339f86461a6f2a8ab2594d8ce - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.13.4" animations: @@ -30,7 +30,7 @@ packages: description: name: animations sha256: "9cb469212ea51be27097f23b519d594c01171721347b55df9334fff653659e7f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" app_links: @@ -38,7 +38,7 @@ packages: description: name: app_links sha256: "5f88447519add627fe1cbcab4fd1da3d4fed15b9baf29f28b22535c95ecee3e8" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.4.1" app_links_linux: @@ -46,23 +46,23 @@ packages: description: name: app_links_linux sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" app_links_platform_interface: dependency: transitive description: name: app_links_platform_interface - sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f" - url: "https://pub.dev" + sha256: "7546f09a6e93f4a2df2fe2bd40a5c6c64310ac461b036d82b43033be7a59f809" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.2" + version: "2.0.4" app_links_web: dependency: transitive description: name: app_links_web sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" archive: @@ -70,7 +70,7 @@ packages: description: name: archive sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.9" args: @@ -78,7 +78,7 @@ packages: description: name: args sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.7.0" async: @@ -86,7 +86,7 @@ packages: description: name: async sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.13.1" boolean_selector: @@ -94,7 +94,7 @@ packages: description: name: boolean_selector sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" build: @@ -102,7 +102,7 @@ packages: description: name: build sha256: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.4" build_config: @@ -110,23 +110,23 @@ packages: description: name: build_config sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" build_daemon: dependency: transitive description: name: build_daemon - sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 - url: "https://pub.dev" + sha256: fd754058c342243718d5171a95f352cfc9fcf0cba8cfa26df67cb13a5836db78 + url: "https://pub.flutter-io.cn" source: hosted - version: "4.1.1" + version: "4.1.2" build_resolvers: dependency: transitive description: name: build_resolvers sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.4" build_runner: @@ -134,7 +134,7 @@ packages: description: name: build_runner sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.4" build_runner_core: @@ -142,7 +142,7 @@ packages: description: name: build_runner_core sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "9.1.2" built_collection: @@ -150,7 +150,7 @@ packages: description: name: built_collection sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" built_value: @@ -158,7 +158,7 @@ packages: description: name: built_value sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.12.6" characters: @@ -166,7 +166,7 @@ packages: description: name: characters sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" checked_yaml: @@ -174,7 +174,7 @@ packages: description: name: checked_yaml sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" ci: @@ -182,7 +182,7 @@ packages: description: name: ci sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.0" cli_util: @@ -190,7 +190,7 @@ packages: description: name: cli_util sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.2" clock: @@ -198,7 +198,7 @@ packages: description: name: clock sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" code_assets: @@ -206,7 +206,7 @@ packages: description: name: code_assets sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" code_builder: @@ -214,7 +214,7 @@ packages: description: name: code_builder sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.11.1" collection: @@ -222,7 +222,7 @@ packages: description: name: collection sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.19.1" connectivity_plus: @@ -230,7 +230,7 @@ packages: description: name: connectivity_plus sha256: "33bae12a398f841c6cda09d1064212957265869104c478e5ad51e2fb26c3973c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.0" connectivity_plus_platform_interface: @@ -238,7 +238,7 @@ packages: description: name: connectivity_plus_platform_interface sha256: "3c09627c536d22fd24691a905cdd8b14520de69da52c7a97499c8be5284a32ed" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" convert: @@ -246,23 +246,23 @@ packages: description: name: convert sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.2" cross_file: dependency: transitive description: name: cross_file - sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" - url: "https://pub.dev" + sha256: "92c9c43c383bfa1c32079d3bc492d55d6d4318044b7b47edaff8971cbb555c51" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.3.5+2" + version: "0.3.5+4" crypto: dependency: "direct main" description: name: crypto sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.7" custom_lint: @@ -270,7 +270,7 @@ packages: description: name: custom_lint sha256: "9656925637516c5cf0f5da018b33df94025af2088fe09c8ae2ca54c53f2d9a84" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.6" custom_lint_core: @@ -278,7 +278,7 @@ packages: description: name: custom_lint_core sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.5" custom_lint_visitor: @@ -286,7 +286,7 @@ packages: description: name: custom_lint_visitor sha256: "4a86a0d8415a91fbb8298d6ef03e9034dc8e323a599ddc4120a0e36c433983a2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0+7.7.0" dart_style: @@ -294,23 +294,23 @@ packages: description: name: dart_style sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.1" dbus: dependency: transitive description: name: dbus - sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 - url: "https://pub.dev" + sha256: "0ce9b0a839e6dee59a37a623d2fc26a35bbbe6404213e419b0d6411023d62645" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.12" + version: "0.7.14" defer_pointer: dependency: "direct main" description: name: defer_pointer sha256: d69e6f8c1d0f052d2616cc1db3782e0ea73f42e4c6f6122fd1a548dfe79faf02 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.2" device_info_plus: @@ -318,7 +318,7 @@ packages: description: name: device_info_plus sha256: b4fed1b2835da9d670d7bed7db79ae2a94b0f5ad6312268158a9b5479abbacdd - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "12.4.0" device_info_plus_platform_interface: @@ -326,7 +326,7 @@ packages: description: name: device_info_plus_platform_interface sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.3" dio: @@ -334,23 +334,23 @@ packages: description: name: dio sha256: ea2bad3c89a27635ce2d85cce4d6b199da49a5a48ec77b03e45b65a3b90922b0 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.10.0" dio_web_adapter: dependency: transitive description: name: dio_web_adapter - sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340" - url: "https://pub.dev" + sha256: dd58dc3861eb36edb13b217efc006a1c21e5bbc341de8c229b85634fa5e362e4 + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.2" + version: "2.2.0" dynamic_color: dependency: "direct main" description: name: dynamic_color sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" emoji_regex: @@ -358,23 +358,23 @@ packages: description: name: emoji_regex sha256: "3a25dd4d16f98b6f76dc37cc9ae49b8511891ac4b87beac9443a1e9f4634b6c7" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.5" equatable: dependency: transitive description: name: equatable - sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b" - url: "https://pub.dev" + sha256: "3bce007a596ff8b3119c45d68aaef631272537c03d30e5d4534dd24bf4c5eaa2" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.8" + version: "2.1.0" fake_async: dependency: transitive description: name: fake_async sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.3" ffi: @@ -382,7 +382,7 @@ packages: description: name: ffi sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" ffigen: @@ -390,7 +390,7 @@ packages: description: name: ffigen sha256: b7803707faeec4ce3c1b0c2274906504b796e3b70ad573577e72333bd1c9b3ba - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "20.1.1" file: @@ -398,7 +398,7 @@ packages: description: name: file sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" file_picker: @@ -406,7 +406,7 @@ packages: description: name: file_picker sha256: ab13ae8ef5580a411c458d6207b6774a6c237d77ac37011b13994879f68a8810 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "8.3.7" file_selector_linux: @@ -414,7 +414,7 @@ packages: description: name: file_selector_linux sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.4" file_selector_macos: @@ -422,7 +422,7 @@ packages: description: name: file_selector_macos sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.5" file_selector_platform_interface: @@ -430,7 +430,7 @@ packages: description: name: file_selector_platform_interface sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.7.0" file_selector_windows: @@ -438,7 +438,7 @@ packages: description: name: file_selector_windows sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.3+5" fixnum: @@ -446,7 +446,7 @@ packages: description: name: fixnum sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" flutter: @@ -459,7 +459,7 @@ packages: description: name: flutter_cache_manager sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.4.1" flutter_displaymode: @@ -467,7 +467,7 @@ packages: description: name: flutter_displaymode sha256: ecd44b1e902b0073b42ff5b55bf283f38e088270724cdbb7f7065ccf54aa60a8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.0" flutter_lints: @@ -475,7 +475,7 @@ packages: description: name: flutter_lints sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.0" flutter_localizations: @@ -487,10 +487,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0" - url: "https://pub.dev" + sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.0.34" + version: "2.0.35" flutter_qjs: dependency: "direct main" description: @@ -503,7 +503,7 @@ packages: description: name: flutter_riverpod sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" flutter_spinkit: @@ -511,7 +511,7 @@ packages: description: name: flutter_spinkit sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.2.2" flutter_svg: @@ -519,7 +519,7 @@ packages: description: name: flutter_svg sha256: "35882981abcbfb8c15b286f0cd690ff25bac12d95eff3e25ee207f37d4c42e7f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" flutter_test: @@ -537,7 +537,7 @@ packages: description: name: freezed sha256: "2d399f823b8849663744d2a9ddcce01c49268fb4170d0442a655bf6a2f47be22" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" freezed_annotation: @@ -545,7 +545,7 @@ packages: description: name: freezed_annotation sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" frontend_server_client: @@ -553,7 +553,7 @@ packages: description: name: frontend_server_client sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" glob: @@ -561,7 +561,7 @@ packages: description: name: glob sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" google_nav_bar: @@ -569,7 +569,7 @@ packages: description: name: google_nav_bar sha256: bb12dd21514ee1b041ab3127673e2fd85e693337df308f7f2b75cd1e8e92eaf4 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.7" graphs: @@ -577,7 +577,7 @@ packages: description: name: graphs sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.2" gtk: @@ -585,7 +585,7 @@ packages: description: name: gtk sha256: "4ff85b2a16724029dd9e5bbb5a94b6918f9973f74ba571c949d2002801879cf5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" hooks: @@ -593,7 +593,7 @@ packages: description: name: hooks sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" hotkey_manager: @@ -601,7 +601,7 @@ packages: description: name: hotkey_manager sha256: "06f0655b76c8dd322fb7101dc615afbdbf39c3d3414df9e059c33892104479cd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.3" hotkey_manager_linux: @@ -618,7 +618,7 @@ packages: description: name: hotkey_manager_macos sha256: "03b5967e64357b9ac05188ea4a5df6fe4ed4205762cb80aaccf8916ee1713c96" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" hotkey_manager_platform_interface: @@ -626,7 +626,7 @@ packages: description: name: hotkey_manager_platform_interface sha256: "98ffca25b8cc9081552902747b2942e3bc37855389a4218c9d50ca316b653b13" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" hotkey_manager_windows: @@ -634,7 +634,7 @@ packages: description: name: hotkey_manager_windows sha256: "0d03ced9fe563ed0b68f0a0e1b22c9ffe26eb8053cb960e401f68a4f070e0117" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0" http: @@ -642,7 +642,7 @@ packages: description: name: http sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.6.0" http_multi_server: @@ -650,7 +650,7 @@ packages: description: name: http_multi_server sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" http_parser: @@ -658,7 +658,7 @@ packages: description: name: http_parser sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.2" image_picker: @@ -666,39 +666,39 @@ packages: description: name: image_picker sha256: d8402284df184bc05f4a2210c6c23983b0720f4cd87cbd05c5390a78af602667 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.3" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: d5b3e1774af29c9ab00103afb0d4614070f924d2e0057ac867ec98800114793f - url: "https://pub.dev" + sha256: "6f3a1995eafb000333174fae92202622033b0ee7fd917a6cd3730295264df84a" + url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.13+17" + version: "0.8.13+19" image_picker_for_web: dependency: transitive description: name: image_picker_for_web sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.1" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: "956c16a42c0c708f914021666ffcd8265dde36e673c9fa68c81f7d085d9774ad" - url: "https://pub.dev" + sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 + url: "https://pub.flutter-io.cn" source: hosted - version: "0.8.13+3" + version: "0.8.13+6" image_picker_linux: dependency: transitive description: name: image_picker_linux sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" image_picker_macos: @@ -706,7 +706,7 @@ packages: description: name: image_picker_macos sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2+1" image_picker_platform_interface: @@ -714,7 +714,7 @@ packages: description: name: image_picker_platform_interface sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.11.1" image_picker_windows: @@ -722,7 +722,7 @@ packages: description: name: image_picker_windows sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" intl: @@ -730,7 +730,7 @@ packages: description: name: intl sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.20.2" intl_utils: @@ -738,7 +738,7 @@ packages: description: name: intl_utils sha256: da67ac187b521445d745f7c68e7254c2090f6c3c9081c93cd515480af9e59569 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.11" io: @@ -746,7 +746,7 @@ packages: description: name: io sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" isolate_contactor: @@ -754,7 +754,7 @@ packages: description: name: isolate_contactor sha256: "6ba8434ceb58238a1389d6365111a3efe7baa1c68a66f4db6d63d351cf6c3a0f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" isolate_manager: @@ -762,7 +762,7 @@ packages: description: name: isolate_manager sha256: "22ed0c25f80ec3b5f21e3a55d060f4650afff33f27c2dff34c0f9409d5759ae5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.5+1" jni: @@ -770,7 +770,7 @@ packages: description: name: jni sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" jni_flutter: @@ -778,7 +778,7 @@ packages: description: name: jni_flutter sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" js: @@ -786,7 +786,7 @@ packages: description: name: js sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.2" json_annotation: @@ -794,7 +794,7 @@ packages: description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.9.0" json_serializable: @@ -802,7 +802,7 @@ packages: description: name: json_serializable sha256: c50ef5fc083d5b5e12eef489503ba3bf5ccc899e487d691584699b4bdefeea8c - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.9.5" launch_at_startup: @@ -810,7 +810,7 @@ packages: description: name: launch_at_startup sha256: "7db33398b76ec0ed9e27f9f4640553e239977437564046625e215be89c91f084" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.1" leak_tracker: @@ -818,7 +818,7 @@ packages: description: name: leak_tracker sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "11.0.2" leak_tracker_flutter_testing: @@ -826,7 +826,7 @@ packages: description: name: leak_tracker_flutter_testing sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.10" leak_tracker_testing: @@ -834,7 +834,7 @@ packages: description: name: leak_tracker_testing sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" lints: @@ -842,7 +842,7 @@ packages: description: name: lints sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.0" logging: @@ -850,7 +850,7 @@ packages: description: name: logging sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" lpinyin: @@ -858,7 +858,7 @@ packages: description: name: lpinyin sha256: "0bb843363f1f65170efd09fbdfc760c7ec34fc6354f9fcb2f89e74866a0d814a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" matcher: @@ -866,7 +866,7 @@ packages: description: name: matcher sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.19" material_color_utilities: @@ -874,7 +874,7 @@ packages: description: name: material_color_utilities sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.13.0" menu_base: @@ -882,7 +882,7 @@ packages: description: name: menu_base sha256: "820368014a171bd1241030278e6c2617354f492f5c703d7b7d4570a6b8b84405" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.1" meta: @@ -890,7 +890,7 @@ packages: description: name: meta sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.18.0" mime: @@ -898,7 +898,7 @@ packages: description: name: mime sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" mobile_scanner: @@ -906,7 +906,7 @@ packages: description: name: mobile_scanner sha256: c92c26bf2231695b6d3477c8dcf435f51e28f87b1745966b1fe4c47a286171ce - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.2.0" native_toolchain_c: @@ -914,7 +914,7 @@ packages: description: name: native_toolchain_c sha256: f9c168717100ae6d9fee9ffb0be379bf1f8b26b0f6bcbd4fdddcd931993a6a72 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.19.2" nm: @@ -922,15 +922,23 @@ packages: description: name: nm sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.0" + objective_c: + dependency: transitive + description: + name: objective_c + sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed" + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.4.1" package_config: dependency: transitive description: name: package_config sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" package_info_plus: @@ -938,7 +946,7 @@ packages: description: name: package_info_plus sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "9.0.1" package_info_plus_platform_interface: @@ -946,7 +954,7 @@ packages: description: name: package_info_plus_platform_interface sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.1" path: @@ -954,7 +962,7 @@ packages: description: name: path sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.9.1" path_parsing: @@ -962,7 +970,7 @@ packages: description: name: path_parsing sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" path_provider: @@ -970,7 +978,7 @@ packages: description: name: path_provider sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.6" path_provider_android: @@ -978,39 +986,39 @@ packages: description: name: path_provider_android sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4" - url: "https://pub.dev" + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.5.1" + version: "2.6.0" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" + sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.2.1" + version: "2.2.2" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" + sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_windows: dependency: transitive description: name: path_provider_windows sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" petitparser: @@ -1018,7 +1026,7 @@ packages: description: name: petitparser sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "7.0.2" platform: @@ -1026,7 +1034,7 @@ packages: description: name: platform sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.6" plugin_platform_interface: @@ -1034,7 +1042,7 @@ packages: description: name: plugin_platform_interface sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" pool: @@ -1042,7 +1050,7 @@ packages: description: name: pool sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.2" posix: @@ -1050,7 +1058,7 @@ packages: description: name: posix sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.5.0" proxy: @@ -1065,7 +1073,7 @@ packages: description: name: pub_semver sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" pubspec_parse: @@ -1073,7 +1081,7 @@ packages: description: name: pubspec_parse sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" quiver: @@ -1081,7 +1089,7 @@ packages: description: name: quiver sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" re_editor: @@ -1089,7 +1097,7 @@ packages: description: name: re_editor sha256: "66671c4774a6b4c5254c9a53ab35a083e7e7da9ae371c519bcf491c70a2a4e56" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.10.0" re_highlight: @@ -1097,7 +1105,7 @@ packages: description: name: re_highlight sha256: "6c4ac3f76f939fb7ca9df013df98526634e17d8f7460e028bd23a035870024f2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.0.3" record_use: @@ -1105,7 +1113,7 @@ packages: description: name: record_use sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.0" restart_app: @@ -1113,7 +1121,7 @@ packages: description: name: restart_app sha256: "400dd401b77b599e2defef55fd4c22af3ff80af48616a82f01c2a07070e3e368" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.3" riverpod: @@ -1121,7 +1129,7 @@ packages: description: name: riverpod sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" riverpod_analyzer_utils: @@ -1129,7 +1137,7 @@ packages: description: name: riverpod_analyzer_utils sha256: "03a17170088c63aab6c54c44456f5ab78876a1ddb6032ffde1662ddab4959611" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.10" riverpod_annotation: @@ -1137,7 +1145,7 @@ packages: description: name: riverpod_annotation sha256: e14b0bf45b71326654e2705d462f21b958f987087be850afd60578fcd502d1b8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" riverpod_generator: @@ -1145,7 +1153,7 @@ packages: description: name: riverpod_generator sha256: "44a0992d54473eb199ede00e2260bd3c262a86560e3c6f6374503d86d0580e36" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.6.5" rxdart: @@ -1153,7 +1161,7 @@ packages: description: name: rxdart sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.28.0" screen_retriever: @@ -1161,7 +1169,7 @@ packages: description: name: screen_retriever sha256: ace919117a7520c13a50a6259e60c4a0d4cbe98809468792a91b5c5adada2aa6 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" screen_retriever_linux: @@ -1169,7 +1177,7 @@ packages: description: name: screen_retriever_linux sha256: "7b52006a5ceae1f3d5af7f77188c3290d6e7d8ded16d99809bea84967c65c257" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" screen_retriever_macos: @@ -1177,7 +1185,7 @@ packages: description: name: screen_retriever_macos sha256: a1489b99cce597c45a54b9aae1cd94c8d4705353b7e0bb2457a6e4de44e0ad8a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" screen_retriever_platform_interface: @@ -1185,7 +1193,7 @@ packages: description: name: screen_retriever_platform_interface sha256: "94a5535277510a63184ca178ce12a1449bc0b38618879aa1c18bf57369c5064a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" screen_retriever_windows: @@ -1193,7 +1201,7 @@ packages: description: name: screen_retriever_windows sha256: dafc6922b0bfbf1d48cf3ccbf519b4fff47bdcb820da1728ea6db675fecc9324 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.2" shared_preferences: @@ -1201,23 +1209,23 @@ packages: description: name: shared_preferences sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.5" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 - url: "https://pub.dev" + sha256: "93ae5884a9df5d3bb696825bceb3a17590754548b5d740eba51500afc8d088f5" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.4.23" + version: "2.4.26" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.6" shared_preferences_linux: @@ -1225,7 +1233,7 @@ packages: description: name: shared_preferences_linux sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" shared_preferences_platform_interface: @@ -1233,7 +1241,7 @@ packages: description: name: shared_preferences_platform_interface sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.2" shared_preferences_web: @@ -1241,7 +1249,7 @@ packages: description: name: shared_preferences_web sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3" shared_preferences_windows: @@ -1249,7 +1257,7 @@ packages: description: name: shared_preferences_windows sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" shelf: @@ -1257,7 +1265,7 @@ packages: description: name: shelf sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.2" shelf_web_socket: @@ -1265,7 +1273,7 @@ packages: description: name: shelf_web_socket sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" shortid: @@ -1273,7 +1281,7 @@ packages: description: name: shortid sha256: d0b40e3dbb50497dad107e19c54ca7de0d1a274eb9b4404991e443dadb9ebedb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.2" sky_engine: @@ -1286,7 +1294,7 @@ packages: description: name: source_gen sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" source_helper: @@ -1294,7 +1302,7 @@ packages: description: name: source_helper sha256: a447acb083d3a5ef17f983dd36201aeea33fedadb3228fa831f2f0c92f0f3aca - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.7" source_span: @@ -1302,7 +1310,7 @@ packages: description: name: source_span sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.2" sqflite: @@ -1310,7 +1318,7 @@ packages: description: name: sqflite sha256: "58a799e6ac17dd32fbab93813d39ed835a75ccc0f8f85b8955fe318c6712b082" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3" sqflite_android: @@ -1318,7 +1326,7 @@ packages: description: name: sqflite_android sha256: d0548f9d7422a2dae99ec6f8b0a3074463b132d216fa5ba0d230eeefc901983b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3" sqflite_common: @@ -1326,7 +1334,7 @@ packages: description: name: sqflite_common sha256: "5bf6a55c166e73bf651ba7ec3ed486e577620e3dc8f3a9c6a258a8031b624590" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.11" sqflite_common_ffi: @@ -1334,7 +1342,7 @@ packages: description: name: sqflite_common_ffi sha256: "5ccd38136edb9beb3213f6927775d52db70dfdadcdb28dad1f625ca9f2b9824f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.2" sqflite_darwin: @@ -1342,7 +1350,7 @@ packages: description: name: sqflite_darwin sha256: c86ca18b8f666bbf903924687fe21cc16fc385d086005067e26619ca530bef9f - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.3+1" sqflite_platform_interface: @@ -1350,7 +1358,7 @@ packages: description: name: sqflite_platform_interface sha256: f84939f84350d92d04416f8bc4dc52d3896aec7716cc9e80cf0146342139dc50 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.1" sqlite3: @@ -1358,7 +1366,7 @@ packages: description: name: sqlite3 sha256: "752d9d746052359a2022f588bb979f2e7c4e0f9e4b6a1c3121f7626a1574974b" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.4" stack_trace: @@ -1366,7 +1374,7 @@ packages: description: name: stack_trace sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.12.1" state_notifier: @@ -1374,7 +1382,7 @@ packages: description: name: state_notifier sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" stream_channel: @@ -1382,7 +1390,7 @@ packages: description: name: stream_channel sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.4" stream_transform: @@ -1390,7 +1398,7 @@ packages: description: name: stream_transform sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" string_scanner: @@ -1398,7 +1406,7 @@ packages: description: name: string_scanner sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" synchronized: @@ -1406,7 +1414,7 @@ packages: description: name: synchronized sha256: "93b153dcb6a26dcddee6ca087dd634b53e38c10b5aa163e8e49501a776456153" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.4.1" term_glyph: @@ -1414,7 +1422,7 @@ packages: description: name: term_glyph sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.2" test_api: @@ -1422,7 +1430,7 @@ packages: description: name: test_api sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.11" timing: @@ -1430,7 +1438,7 @@ packages: description: name: timing sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" tray_manager: @@ -1445,7 +1453,7 @@ packages: description: name: typed_data sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" uni_platform: @@ -1453,7 +1461,7 @@ packages: description: name: uni_platform sha256: e02213a7ee5352212412ca026afd41d269eb00d982faa552f419ffc2debfad84 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.3" url_launcher: @@ -1461,31 +1469,31 @@ packages: description: name: url_launcher sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572" - url: "https://pub.dev" + sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32 + url: "https://pub.flutter-io.cn" source: hosted - version: "6.3.29" + version: "6.3.32" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad - url: "https://pub.dev" + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" + url: "https://pub.flutter-io.cn" source: hosted - version: "6.3.6" + version: "6.4.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" url_launcher_macos: @@ -1493,7 +1501,7 @@ packages: description: name: url_launcher_macos sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.5" url_launcher_platform_interface: @@ -1501,23 +1509,23 @@ packages: description: name: url_launcher_platform_interface sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" - url: "https://pub.dev" + sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34" + url: "https://pub.flutter-io.cn" source: hosted - version: "2.4.1" + version: "2.4.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.5" uuid: @@ -1525,7 +1533,7 @@ packages: description: name: uuid sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "4.5.3" vclibs: @@ -1533,39 +1541,39 @@ packages: description: name: vclibs sha256: "5dc5de54fabe27ad276898b7c04a56a4a3dd9834e479b9db5e04a9f3eb36790e" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.3" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "6409a25046024f0f8c5d8a59fec314081e81f9d436b66ca4015a8b49772bf445" - url: "https://pub.dev" + sha256: "2306c03da2ba81724afeb589c351ebbc0aa7d86005925be8f8735856dbe5e42d" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.2.0" + version: "1.2.2" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.13" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "06f0c50f88a1a020f95138dcc14ef4d5a039ced3f89b386209e6763dfa2cefa0" - url: "https://pub.dev" + sha256: "142a9146f447d15b10bdc00e21d5f4d83e5b32bb5f8f8f5a04c75311344923a3" + url: "https://pub.flutter-io.cn" source: hosted - version: "1.2.1" + version: "1.2.6" vector_math: dependency: transitive description: name: vector_math sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" vm_service: @@ -1573,31 +1581,31 @@ packages: description: name: vm_service sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "15.2.0" wakelock_plus: dependency: "direct main" description: name: wakelock_plus - sha256: "9296d40c9adbedaba95d1e704f4e0b434be446e2792948d0e4aa977048104228" - url: "https://pub.dev" + sha256: ddf3db70eaa10c37558ff817519b85d527dbd21034fd5d8e1c2e85f31588f1c1 + url: "https://pub.flutter-io.cn" source: hosted - version: "1.4.0" + version: "1.5.2" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2" - url: "https://pub.dev" + sha256: b13f99e992e7ae6a152e16c5559d3c07ff445b13330192662494e614ca3e7d7b + url: "https://pub.flutter-io.cn" source: hosted - version: "1.3.0" + version: "1.5.1" watcher: dependency: transitive description: name: watcher sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" web: @@ -1605,7 +1613,7 @@ packages: description: name: web sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" web_socket: @@ -1613,7 +1621,7 @@ packages: description: name: web_socket sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" web_socket_channel: @@ -1621,7 +1629,7 @@ packages: description: name: web_socket_channel sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.3" webdav_client: @@ -1629,7 +1637,7 @@ packages: description: name: webdav_client sha256: "682fffc50b61dc0e8f46717171db03bf9caaa17347be41c0c91e297553bf86b2" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.2" win32: @@ -1637,7 +1645,7 @@ packages: description: name: win32 sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "5.15.0" win32_registry: @@ -1645,7 +1653,7 @@ packages: description: name: win32_registry sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" window_ext: @@ -1660,7 +1668,7 @@ packages: description: name: window_manager sha256: "05c231fd7b23d2380f14c5cc10b7b93d60d4fa4a2fb4e0f032de27e44b5560e9" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "0.5.2" xdg_directories: @@ -1668,7 +1676,7 @@ packages: description: name: xdg_directories sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" xml: @@ -1676,7 +1684,7 @@ packages: description: name: xml sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "6.6.1" yaml: @@ -1684,7 +1692,7 @@ packages: description: name: yaml sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.3" yaml_edit: @@ -1692,7 +1700,7 @@ packages: description: name: yaml_edit sha256: "07c9e63ba42519745182b88ca12264a7ba2484d8239958778dfe4d44fe760488" - url: "https://pub.dev" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.4" sdks: