fix(server): Add boundary check for editing host name (#1018)

* feat(localization): Add validation prompt for invalid host formats

Add validation for host formats, allowing only IPv4, IPv6, and domain name formats

Add regular expression validation for host format on the server editing page

Update multilingual files to add the invalidHostFormat field

* chore: Update dependent package versions to the latest

* fix(server edit): Update the hostname regular expression to support IPv6 zone identifiers

Modify the regular expression for hostname validation to add support for IPv6 zone identifiers (such as %en0)
This commit is contained in:
GT610
2026-01-22 12:03:08 +08:00
committed by GitHub
parent d14e97485f
commit f47d1e7141
20 changed files with 176 additions and 78 deletions

View File

@@ -854,6 +854,12 @@ abstract class AppLocalizations {
/// **'Invalid'**
String get invalid;
/// No description provided for @invalidHostFormat.
///
/// In en, this message translates to:
/// **'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.'**
String get invalidHostFormat;
/// No description provided for @jumpServer.
///
/// In en, this message translates to:

View File

@@ -420,6 +420,10 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get invalid => 'Ungültig';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Server springen';

View File

@@ -418,6 +418,10 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get invalid => 'Invalid';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Jump server';

View File

@@ -419,6 +419,10 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get invalid => 'Inválido';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Servidor de salto';

View File

@@ -420,6 +420,10 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get invalid => 'Invalide';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Aller au serveur';

View File

@@ -418,6 +418,10 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get invalid => 'Tidak valid';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Lompat server';

View File

@@ -407,6 +407,10 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get invalid => '無効';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'ジャンプサーバー';

View File

@@ -419,6 +419,10 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get invalid => 'Ongeldig';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Spring naar server';

View File

@@ -418,6 +418,10 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get invalid => 'Inválido';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Servidor de salto';

View File

@@ -419,6 +419,10 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get invalid => 'Недействительный';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'прыжковый сервер';

View File

@@ -418,6 +418,10 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get invalid => 'Geçersiz';
@override
String get invalidHostFormat =>
'Invalid host format. Only IPv4, IPv6, and domain characters are allowed.';
@override
String get jumpServer => 'Atlama sunucusu';

View File

@@ -420,6 +420,10 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get invalid => 'Недійсний';
@override
String get invalidHostFormat =>
'Недійсний формат хоста. Дозволено лише символи IPv4, IPv6 та домену.';
@override
String get jumpServer => 'Стрибковий Сервер';

View File

@@ -401,6 +401,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get invalid => '无效';
@override
String get invalidHostFormat => '主机格式无效,仅支持 IPv4、IPv6 和域名字符。';
@override
String get jumpServer => '跳板服务器';
@@ -1380,6 +1383,9 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
@override
String get invalid => '無效';
@override
String get invalidHostFormat => '主機格式無效,僅支援 IPv4、IPv6 和網域字元。';
@override
String get jumpServer => '跳板伺服器';

View File

@@ -122,6 +122,7 @@
"install": "install",
"installDockerWithUrl": "Please https://docs.docker.com/engine/install docker first.",
"invalid": "Invalid",
"invalidHostFormat": "Invalid host format. Only IPv4, IPv6, and domain characters are allowed.",
"jumpServer": "Jump server",
"keepForeground": "Keep app foreground!",
"keepStatusWhenErr": "Preserve the last server state",

View File

@@ -122,6 +122,7 @@
"install": "Встановити",
"installDockerWithUrl": "Будь ласка, спочатку встановіть Docker. (https://docs.docker.com/engine/install)",
"invalid": "Недійсний",
"invalidHostFormat": "Недійсний формат хоста. Дозволено лише символи IPv4, IPv6 та домену.",
"jumpServer": "Стрибковий Сервер",
"keepForeground": "Тримати застосунок на передньому плані!",
"keepStatusWhenErr": "Зберегати останній стан сервера",

View File

@@ -122,6 +122,7 @@
"install": "安装",
"installDockerWithUrl": "请先前往 https://docs.docker.com/engine/install 安装 Docker",
"invalid": "无效",
"invalidHostFormat": "主机格式无效,仅支持 IPv4、IPv6 和域名字符。",
"jumpServer": "跳板服务器",
"keepForeground": "请将应用保持在前台运行",
"keepStatusWhenErr": "保留上次的服务器状态",

View File

@@ -122,6 +122,7 @@
"install": "安裝",
"installDockerWithUrl": "請先前往 https://docs.docker.com/engine/install 安裝 Docker",
"invalid": "無效",
"invalidHostFormat": "主機格式無效,僅支援 IPv4、IPv6 和網域字元。",
"jumpServer": "跳板伺服器",
"keepForeground": "請讓 App 保持在前景執行",
"keepStatusWhenErr": "保留上次的伺服器狀態",

View File

@@ -1,5 +1,8 @@
part of 'edit.dart';
/// Only permit ipv4 / ipv6 / domain chars (including IPv6 zone identifier like %en0)
final _hostReg = RegExp(r'^[a-zA-Z0-9\.\-_:%;]+$');
extension _Actions on _ServerEditPageState {
Future<void> _onTapSSHDiscovery() async {
try {
@@ -222,6 +225,11 @@ extension _Actions on _ServerEditPageState {
return;
}
if (!_hostReg.hasMatch(_ipController.text)) {
context.showSnackBar(l10n.invalidHostFormat);
return;
}
if (_keyIdx.value == null && _passwordController.text.isEmpty) {
final ok = await context.showRoundDialog<bool>(
title: libL10n.attention,

View File

@@ -12,7 +12,6 @@ import flutter_secure_storage_macos
import icloud_storage
import local_auth_darwin
import package_info_plus
import path_provider_foundation
import screen_retriever_macos
import share_plus
import shared_preferences_foundation
@@ -28,7 +27,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
IcloudStoragePlugin.register(with: registry.registrar(forPlugin: "IcloudStoragePlugin"))
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))

View File

@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: f0bb5d1648339c8308cc0b9838d8456b3cfe5c91f9dc1a735b4d003269e5da9a
sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
version: "88.0.0"
version: "91.0.0"
analyzer:
dependency: "direct dev"
description:
name: analyzer
sha256: "0b7b9c329d2879f8f05d6c05b32ee9ec025f39b077864bdb5ac9a7b63418a98f"
sha256: a40a0cee526a7e1f387c6847bd8a5ccbf510a75952ef8a28338e989558072cb0
url: "https://pub.dev"
source: hosted
version: "8.1.1"
version: "8.4.0"
analyzer_buffer:
dependency: transitive
description:
@@ -29,18 +29,18 @@ packages:
dependency: transitive
description:
name: analyzer_plugin
sha256: dd574a0ab77de88b7d9c12bc4b626109a5ca9078216a79041a5c24c3a1bd103c
sha256: "08cfefa90b4f4dd3b447bda831cecf644029f9f8e22820f6ee310213ebe2dd53"
url: "https://pub.dev"
source: hosted
version: "0.13.7"
version: "0.13.10"
animations:
dependency: transitive
description:
name: animations
sha256: a8031b276f0a7986ac907195f10ca7cd04ecf2a8a566bd6dbe03018a9b02b427
sha256: "18938cefd7dcc04e1ecac0db78973761a01e4bc2d6bfae0cfa596bfeac9e96ab"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
ansicolor:
dependency: transitive
description:
@@ -125,10 +125,10 @@ packages:
dependency: transitive
description:
name: build
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.0.4"
build_config:
dependency: transitive
description:
@@ -149,10 +149,10 @@ packages:
dependency: "direct dev"
description:
name: build_runner
sha256: "04f69b1502f66e22ae7990bbd01eb552b7f12793c4d3ea6e715d0ac5e98bcdac"
sha256: b4d854962a32fd9f8efc0b76f98214790b833af8b2e9b2df6bfc927c0415a072
url: "https://pub.dev"
source: hosted
version: "2.10.2"
version: "2.10.5"
built_collection:
dependency: transitive
description:
@@ -165,10 +165,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
sha256: "7931c90b84bc573fef103548e354258ae4c9d28d140e41961df6843c5d60d4d8"
url: "https://pub.dev"
source: hosted
version: "8.12.0"
version: "8.12.3"
camera:
dependency: transitive
description:
@@ -181,18 +181,18 @@ packages:
dependency: transitive
description:
name: camera_android_camerax
sha256: d5256612833f9169c1698599a87370490622a188c5a7fb601169bb7b2f41f22b
sha256: bc7a96998258adddd0b653dd693b0874537707d58b0489708f2a646e4f124246
url: "https://pub.dev"
source: hosted
version: "0.6.24+1"
version: "0.6.27"
camera_avfoundation:
dependency: transitive
description:
name: camera_avfoundation
sha256: "34bcd5db30e52414f1f0783c5e3f566909fab14141a21b3b576c78bd35382bf6"
sha256: "087a9fadef20325cb246b4c13344a3ce8e408acfc3e0c665ebff0ec3144d7163"
url: "https://pub.dev"
source: hosted
version: "0.9.22+4"
version: "0.9.22+8"
camera_platform_interface:
dependency: transitive
description:
@@ -266,14 +266,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_assets:
dependency: transitive
description:
name: code_assets
sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
code_builder:
dependency: transitive
description:
name: code_builder
sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d"
url: "https://pub.dev"
source: hosted
version: "4.11.0"
version: "4.11.1"
collection:
dependency: transitive
description:
@@ -311,10 +319,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608"
url: "https://pub.dev"
source: hosted
version: "0.3.5"
version: "0.3.5+1"
crypto:
dependency: "direct main"
description:
@@ -343,18 +351,18 @@ packages:
dependency: transitive
description:
name: custom_lint_visitor
sha256: "446d68322747ec1c36797090de776aa72228818d3d80685a91ff524d163fee6d"
sha256: "91f2a81e9f0abb4b9f3bb529f78b6227ce6050300d1ae5b1e2c69c66c7a566d8"
url: "https://pub.dev"
source: hosted
version: "1.0.0+8.1.1"
version: "1.0.0+8.4.0"
dart_style:
dependency: transitive
description:
name: dart_style
sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
dartssh2:
dependency: "direct main"
description:
@@ -408,10 +416,10 @@ packages:
dependency: transitive
description:
name: equatable
sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b"
url: "https://pub.dev"
source: hosted
version: "2.0.7"
version: "2.0.8"
extended_image:
dependency: "direct main"
description:
@@ -456,10 +464,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: f8f4ea435f791ab1f817b4e338ed958cb3d04ba43d6736ffc39958d950754967
sha256: d974b6ba2606371ac71dd94254beefb6fa81185bde0b59bdc1df09885da85fde
url: "https://pub.dev"
source: hosted
version: "10.3.6"
version: "10.3.8"
fixnum:
dependency: transitive
description:
@@ -572,10 +580,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
url: "https://pub.dev"
source: hosted
version: "2.0.32"
version: "2.0.33"
flutter_riverpod:
dependency: "direct main"
description:
@@ -644,10 +652,10 @@ packages:
dependency: transitive
description:
name: flutter_svg
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
version: "2.2.3"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -686,10 +694,10 @@ packages:
dependency: "direct main"
description:
name: get_it
sha256: "84792561b731b6463d053e9761a5236da967c369da10b134b8585a5e18429956"
sha256: "1d648d2dd2047d7f7450d5727ca24ee435f240385753d90b49650e3cdff32e56"
url: "https://pub.dev"
source: hosted
version: "9.0.5"
version: "9.2.0"
glob:
dependency: transitive
description:
@@ -727,10 +735,10 @@ packages:
dependency: transitive
description:
name: hive_ce
sha256: "29f8791bf13fa6cf7435a58f1f82a7c9706973c867affa77c34d91e105762664"
sha256: b844955c89f61f479170632b971dcf6fbb8e7233d2a5c2e3c7b89e1b2986bdb5
url: "https://pub.dev"
source: hosted
version: "2.17.0"
version: "2.19.1"
hive_ce_flutter:
dependency: "direct main"
description:
@@ -747,6 +755,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.0"
hooks:
dependency: transitive
description:
name: hooks
sha256: "5d309c86e7ce34cd8e37aa71cb30cb652d3829b900ab145e4d9da564b31d59f7"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
html:
dependency: transitive
description:
@@ -807,10 +823,10 @@ packages:
dependency: transitive
description:
name: image
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c"
url: "https://pub.dev"
source: hosted
version: "4.5.4"
version: "4.7.2"
intl:
dependency: "direct main"
description:
@@ -831,10 +847,10 @@ packages:
dependency: transitive
description:
name: isolate_channel
sha256: "68191008e3a219bc87cc8cddbcd1e29810bd9f3a0fdc2108b574ccbd9aafda08"
sha256: "000d617d021a608186b468584bbc6df2509ecba048f08510f832fdb9cf7aafbe"
url: "https://pub.dev"
source: hosted
version: "0.3.0"
version: "0.4.1"
isolate_contactor:
dependency: transitive
description:
@@ -871,10 +887,10 @@ packages:
dependency: "direct dev"
description:
name: json_serializable
sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe"
sha256: c5b2ee75210a0f263c6c7b9eeea80553dbae96ea1bf57f02484e806a3ffdffa3
url: "https://pub.dev"
source: hosted
version: "6.11.1"
version: "6.11.2"
leak_tracker:
dependency: transitive
description:
@@ -1007,10 +1023,10 @@ packages:
dependency: transitive
description:
name: mockito
sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6"
sha256: a45d1aa065b796922db7b9e7e7e45f921aed17adf3a8318a1f47097e7e695566
url: "https://pub.dev"
source: hosted
version: "5.5.1"
version: "5.6.3"
multi_split_view:
dependency: transitive
description:
@@ -1019,6 +1035,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.6.1"
native_toolchain_c:
dependency: transitive
description:
name: native_toolchain_c
sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac"
url: "https://pub.dev"
source: hosted
version: "0.17.4"
nested:
dependency: transitive
description:
@@ -1035,6 +1059,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.2"
objective_c:
dependency: transitive
description:
name: objective_c
sha256: "9922a1ad59ac5afb154cc948aa6ded01987a75003651d0a2866afc23f4da624e"
url: "https://pub.dev"
source: hosted
version: "9.2.3"
package_config:
dependency: transitive
description:
@@ -1087,18 +1119,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16
sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e
url: "https://pub.dev"
source: hosted
version: "2.2.20"
version: "2.2.22"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
url: "https://pub.dev"
source: hosted
version: "2.4.3"
version: "2.6.0"
path_provider_linux:
dependency: transitive
description:
@@ -1376,26 +1408,26 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
version: "2.5.4"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713"
sha256: "83af5c682796c0f7719c2bbf74792d113e40ae97981b8f266fa84574573556bc"
url: "https://pub.dev"
source: hosted
version: "2.4.15"
version: "2.4.18"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "1c33a907142607c40a7542768ec9badfd16293bac51da3a4482623d15845f88b"
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.dev"
source: hosted
version: "2.5.5"
version: "2.5.6"
shared_preferences_linux:
dependency: transitive
description:
@@ -1469,10 +1501,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.2.0"
source_helper:
dependency: transitive
description:
@@ -1597,10 +1629,10 @@ packages:
dependency: transitive
description:
name: universal_io
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2
url: "https://pub.dev"
source: hosted
version: "2.2.2"
version: "2.3.1"
url_launcher:
dependency: "direct main"
description:
@@ -1613,34 +1645,34 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "5c8b6c2d89a78f5a1cca70a73d9d5f86c701b36b42f9c9dac7bad592113c28e9"
sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611"
url: "https://pub.dev"
source: hosted
version: "6.3.24"
version: "6.3.28"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "6b63f1441e4f653ae799166a72b50b1767321ecc263a57aadf825a7a2a5477d9"
sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad
url: "https://pub.dev"
source: hosted
version: "6.3.5"
version: "6.3.6"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
url: "https://pub.dev"
source: hosted
version: "3.2.1"
version: "3.2.2"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "8262208506252a3ed4ff5c0dc1e973d2c0e0ef337d0a074d35634da5d44397c9"
sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
url: "https://pub.dev"
source: hosted
version: "3.2.4"
version: "3.2.5"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -1653,18 +1685,18 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
version: "3.1.5"
uuid:
dependency: transitive
description:
@@ -1693,10 +1725,10 @@ packages:
dependency: transitive
description:
name: vector_graphics_compiler
sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc
sha256: "201e876b5d52753626af64b6359cd13ac6011b80728731428fd34bc840f71c9b"
url: "https://pub.dev"
source: hosted
version: "1.1.19"
version: "1.1.20"
vector_math:
dependency: transitive
description:
@@ -1868,5 +1900,5 @@ packages:
source: hosted
version: "1.1.4"
sdks:
dart: ">=3.9.0 <4.0.0"
flutter: ">=3.38.0"
dart: ">=3.10.3 <4.0.0"
flutter: ">=3.38.4"