diff --git a/ui/flutter/lib/app/modules/app/controllers/app_controller.dart b/ui/flutter/lib/app/modules/app/controllers/app_controller.dart index 2c3555f81..ecdfe1d4d 100644 --- a/ui/flutter/lib/app/modules/app/controllers/app_controller.dart +++ b/ui/flutter/lib/app/modules/app/controllers/app_controller.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:typed_data'; import 'dart:ui'; import 'package:app_links/app_links.dart'; @@ -80,6 +81,11 @@ class AppController extends GetxController with WindowListener, TrayListener { late AppLinks _appLinks; StreamSubscription? _linkSubscription; + //url controller turned *global* for usage in Multiple Views + final urlController = TextEditingController(); + + final fileDataUri = "".obs; + @override void onReady() { super.onReady(); @@ -274,7 +280,9 @@ class AppController extends GetxController with WindowListener, TrayListener { } Future _toCreate(Uri uri) async { - final path = (uri.scheme == "magnet" || uri.scheme == "http" || uri.scheme == "https") + final path = (uri.scheme == "magnet" || + uri.scheme == "http" || + uri.scheme == "https") ? uri.toString() : (await toFile(uri.toString())).path; await Get.rootDelegate.offAndToNamed(Routes.CREATE, arguments: path); @@ -434,4 +442,9 @@ class AppController extends GetxController with WindowListener, TrayListener { apiToken: startConfig.value.apiToken)); await putConfig(downloaderConfig.value); } + + void setFileDataUri(Uint8List bytes) { + fileDataUri.value = + "data:application/x-bittorrent;base64,${base64.encode(bytes)}"; + } } diff --git a/ui/flutter/lib/app/modules/create/controllers/create_controller.dart b/ui/flutter/lib/app/modules/create/controllers/create_controller.dart index f3594de43..08462bcb9 100644 --- a/ui/flutter/lib/app/modules/create/controllers/create_controller.dart +++ b/ui/flutter/lib/app/modules/create/controllers/create_controller.dart @@ -29,11 +29,6 @@ class CreateController extends GetxController super.onClose(); } - void setFileDataUri(Uint8List bytes) { - fileDataUri.value = - "data:application/x-bittorrent;base64,${base64.encode(bytes)}"; - } - void clearFileDataUri() { fileDataUri.value = ""; } diff --git a/ui/flutter/lib/app/modules/create/views/create_view.dart b/ui/flutter/lib/app/modules/create/views/create_view.dart index bd3e4bdbc..ded7ce82b 100644 --- a/ui/flutter/lib/app/modules/create/views/create_view.dart +++ b/ui/flutter/lib/app/modules/create/views/create_view.dart @@ -26,7 +26,6 @@ import '../controllers/create_controller.dart'; class CreateView extends GetView { final _confirmFormKey = GlobalKey(); - final _urlController = TextEditingController(); final _renameController = TextEditingController(); final _connectionsController = TextEditingController(); final _pathController = TextEditingController(); @@ -54,12 +53,12 @@ class CreateView extends GetView { } final String? filePath = Get.rootDelegate.arguments(); - if (_urlController.text.isEmpty) { + if (appController.urlController.text.isEmpty) { if (filePath?.isNotEmpty ?? false) { // get file path from route arguments - _urlController.text = filePath!; - _urlController.selection = TextSelection.fromPosition( - TextPosition(offset: _urlController.text.length)); + appController.urlController.text = filePath!; + appController.urlController.selection = TextSelection.fromPosition( + TextPosition(offset: appController.urlController.text.length)); } else { // read clipboard Clipboard.getData('text/plain').then((value) { @@ -69,13 +68,14 @@ class CreateView extends GetView { value!.text!.startsWith(e) || value.text!.startsWith(e.toUpperCase())) .isNotEmpty) { - _urlController.text = value!.text!; - _urlController.selection = TextSelection.fromPosition( - TextPosition(offset: _urlController.text.length)); + appController.urlController.text = value!.text!; + appController.urlController.selection = + TextSelection.fromPosition(TextPosition( + offset: appController.urlController.text.length)); return; } - recognizeMagnetUri(value!.text!); + recognizeMagnetUri(value!.text!, appController.urlController); } }); } @@ -92,12 +92,12 @@ class CreateView extends GetView { body: DropTarget( onDragDone: (details) async { if (!Util.isWeb()) { - _urlController.text = details.files[0].path; + appController.urlController.text = details.files[0].path; return; } - _urlController.text = details.files[0].name; + appController.urlController.text = details.files[0].name; final bytes = await details.files[0].readAsBytes(); - controller.setFileDataUri(bytes); + appController.setFileDataUri(bytes); }, child: GestureDetector( behavior: HitTestBehavior.opaque, @@ -117,7 +117,7 @@ class CreateView extends GetView { Expanded( child: TextFormField( autofocus: !Util.isMobile(), - controller: _urlController, + controller: appController.urlController, minLines: 1, maxLines: 5, decoration: InputDecoration( @@ -127,7 +127,7 @@ class CreateView extends GetView { icon: const Icon(Icons.link), suffixIcon: IconButton( onPressed: () { - _urlController.clear(); + appController.urlController.clear(); controller.clearFileDataUri(); }, icon: const Icon(Icons.clear), @@ -141,7 +141,8 @@ class CreateView extends GetView { onChanged: (v) async { controller.clearFileDataUri(); if (controller.oldUrl.value.isEmpty) { - recognizeMagnetUri(v); + recognizeMagnetUri( + v, appController.urlController); } controller.oldUrl.value = v; }, @@ -155,11 +156,12 @@ class CreateView extends GetView { allowedExtensions: ["torrent"]); if (pr != null) { if (!Util.isWeb()) { - _urlController.text = pr.files[0].path ?? ""; + appController.urlController.text = + pr.files[0].path ?? ""; return; } - _urlController.text = pr.files[0].name; - controller.setFileDataUri(pr.files[0].bytes!); + appController.urlController.text = pr.files[0].name; + appController.setFileDataUri(pr.files[0].bytes!); } }, ), @@ -185,7 +187,7 @@ class CreateView extends GetView { itemBuilder: (context, index) { return GestureDetector( onTap: () { - _urlController.text = + appController.urlController.text = resultOfHistories[index]; Navigator.pop(context); }, @@ -360,7 +362,8 @@ class CreateView extends GetView { width: 150, child: RoundedLoadingButton( color: Get.theme.colorScheme.secondary, - onPressed: _doConfirm, + onPressed: futureToVoidConfirm( + appController.urlController), controller: _confirmController, child: Text('confirm'.tr), ), @@ -380,20 +383,24 @@ class CreateView extends GetView { } // recognize magnet uri, if length == 40, auto add magnet prefix - recognizeMagnetUri(String text) { + recognizeMagnetUri(String text, TextEditingController urlController) { if (text.length != 40) { return; } final exp = RegExp(r"[0-9a-fA-F]+"); if (exp.hasMatch(text)) { final uri = "magnet:?xt=urn:btih:$text"; - _urlController.text = uri; - _urlController.selection = TextSelection.fromPosition( - TextPosition(offset: _urlController.text.length)); + urlController.text = uri; + urlController.selection = TextSelection.fromPosition( + TextPosition(offset: urlController.text.length)); } } - Future _doConfirm() async { + futureToVoidConfirm(TextEditingController urlController) { + _doConfirm(urlController); + } + + Future _doConfirm(TextEditingController urlController) async { if (controller.isConfirming.value) { return; } @@ -403,9 +410,8 @@ class CreateView extends GetView { if (_confirmFormKey.currentState!.validate()) { final isWebFileChosen = Util.isWeb() && controller.fileDataUri.isNotEmpty; - final submitUrl = isWebFileChosen - ? controller.fileDataUri.value - : _urlController.text; + final submitUrl = + isWebFileChosen ? controller.fileDataUri.value : urlController.text; final urls = Util.textToLines(submitUrl); // Add url to the history @@ -425,7 +431,8 @@ class CreateView extends GetView { if (isDirect) { await Future.wait(urls.map((url) { return createTask(CreateTask( - req: Request(url: url, extra: parseReqExtra(url)), + req: + Request(url: url, extra: parseReqExtra(url, urlController)), opt: Options( name: isMultiLine ? "" : _renameController.text, path: _pathController.text, @@ -436,7 +443,7 @@ class CreateView extends GetView { } else { final rr = await resolve(Request( url: submitUrl, - extra: parseReqExtra(_urlController.text), + extra: parseReqExtra(urlController.text, urlController), )); await _showResolveDialog(rr); } @@ -449,10 +456,10 @@ class CreateView extends GetView { } } - Object? parseReqExtra(String url) { + Object? parseReqExtra(String url, TextEditingController urlController) { Object? reqExtra; if (controller.showAdvanced.value) { - final u = Uri.parse(_urlController.text); + final u = Uri.parse(urlController.text); if (u.scheme.startsWith("http")) { reqExtra = ReqExtraHttp() ..header = { diff --git a/ui/flutter/lib/app/modules/task/views/task_view.dart b/ui/flutter/lib/app/modules/task/views/task_view.dart index d99f2fc9e..ef42f98ec 100644 --- a/ui/flutter/lib/app/modules/task/views/task_view.dart +++ b/ui/flutter/lib/app/modules/task/views/task_view.dart @@ -1,6 +1,10 @@ +import 'package:desktop_drop/desktop_drop.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:gopeed/util/util.dart'; +import '../../../routes/app_pages.dart'; +import '../../app/controllers/app_controller.dart'; import '../controllers/task_controller.dart'; import '../controllers/task_downloaded_controller.dart'; import '../controllers/task_downloading_controller.dart'; @@ -12,49 +16,68 @@ class TaskView extends GetView { @override Widget build(BuildContext context) { + final appController = Get.find(); + return DefaultTabController( - length: 2, - child: Scaffold( - appBar: PreferredSize( - preferredSize: const Size.fromHeight(56), - child: AppBar( - bottom: TabBar( - tabs: const [ - Tab( - icon: Icon(Icons.file_download), - ), - Tab( - icon: Icon(Icons.done), + length: 2, + child: Scaffold( + appBar: PreferredSize( + preferredSize: const Size.fromHeight(56), + child: AppBar( + bottom: TabBar( + tabs: const [ + Tab( + icon: Icon(Icons.file_download), + ), + Tab( + icon: Icon(Icons.done), + ), + ], + onTap: (index) { + if (controller.tabIndex.value != index) { + controller.tabIndex.value = index; + final downloadingController = + Get.find(); + final downloadedController = + Get.find(); + switch (index) { + case 0: + downloadingController.start(); + downloadedController.stop(); + break; + case 1: + downloadingController.stop(); + downloadedController.start(); + break; + } + } + }, ), - ], - onTap: (index) { - if (controller.tabIndex.value != index) { - controller.tabIndex.value = index; - final downloadingController = - Get.find(); - final downloadedController = - Get.find(); - switch (index) { - case 0: - downloadingController.start(); - downloadedController.stop(); - break; - case 1: - downloadingController.stop(); - downloadedController.start(); - break; - } - } + )), + body: DropTarget( + onDragDone: (details) async { + if (!Util.isWeb()) { + appController.urlController.text = details.files[0].path; + Get.rootDelegate.toNamed(Routes.CREATE); + return; + } + appController.urlController.text = details.files[0].name; + final bytes = await details.files[0].readAsBytes(); + appController.setFileDataUri(bytes); + Get.rootDelegate.toNamed(Routes.CREATE); + }, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + FocusScope.of(context).requestFocus(FocusNode()); }, + child: const TabBarView( + children: [ + TaskDownloadingView(), + TaskDownloadedView(), + ], + ), ), - )), - body: const TabBarView( - children: [ - TaskDownloadingView(), - TaskDownloadedView(), - ], - ), - ), - ); + ))); } } diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock index b207dd567..9cb0e2855 100644 --- a/ui/flutter/pubspec.lock +++ b/ui/flutter/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "67.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.4.1" app_links: dependency: "direct main" description: @@ -29,18 +29,18 @@ packages: dependency: transitive description: name: archive - sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" + sha256: ecf4273855368121b1caed0d10d4513c7241dfc813f7d3c8933b36622ae9b265 url: "https://pub.dev" source: hosted - version: "3.4.10" + version: "3.5.1" args: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.5.0" async: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: built_value - sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.9.1" + version: "8.9.2" characters: dependency: transitive description: @@ -205,10 +205,10 @@ packages: dependency: transitive description: name: cross_file - sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" url: "https://pub.dev" source: hosted - version: "0.3.3+8" + version: "0.3.4+1" crypto: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: "direct main" description: name: cupertino_icons - sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" dart_style: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "0978e9a3e45305a80a7210dbeaf79d6ee8bee33f70c8e542dc654c952070217f" + sha256: "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5" url: "https://pub.dev" source: hosted - version: "5.4.2+1" + version: "5.4.3+1" fake_async: dependency: transitive description: @@ -261,10 +261,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" ffigen: dependency: "direct dev" description: @@ -301,10 +301,10 @@ packages: dependency: "direct main" description: name: fluent_ui - sha256: "432615c5b0cff4c3a162c94efc7f563ba783de447f6c6fbcaf7546dfab2fcb0a" + sha256: a8c76cb501303d108cb9bd33e516da7cfd078031ff427d68eab6069bf4492a2c url: "https://pub.dev" source: hosted - version: "4.8.6" + version: "4.8.7" flutter: dependency: "direct main" description: flutter @@ -314,10 +314,10 @@ packages: dependency: "direct main" description: name: flutter_foreground_task - sha256: "9bcfcb43bba4a5446a056e723d21118ff6e184926b5557365c32c13caca157c2" + sha256: d40a1ddd5f275450d2e32055e7f884796c028a02ac26c751c20916576f79e132 url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.2.0" flutter_form_builder: dependency: "direct main" description: @@ -351,10 +351,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.0.19" flutter_test: dependency: "direct dev" description: flutter @@ -425,10 +425,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -481,18 +481,42 @@ packages: dependency: "direct main" description: name: json_annotation - sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.1" + version: "4.9.0" json_serializable: dependency: "direct dev" description: name: json_serializable - sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969 + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b + url: "https://pub.dev" + source: hosted + version: "6.8.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" url: "https://pub.dev" source: hosted - version: "6.7.1" + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lecle_downloads_path_provider: dependency: "direct main" description: @@ -561,26 +585,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" math_expressions: dependency: transitive description: name: math_expressions - sha256: "3576593617c3870d75728a751f6ec6e606706d44e363f088ac394b5a28a98064" + sha256: db0b72d867491c4e53a1c773e2708d5d6e94bbe06be07080fc9f896766b9cd3d url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.5.0" menu_base: dependency: transitive description: @@ -593,10 +617,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -641,26 +665,26 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" + sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.4" path_provider_foundation: dependency: transitive description: @@ -717,14 +741,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" - url: "https://pub.dev" - source: hosted - version: "3.7.4" pool: dependency: transitive description: @@ -817,18 +833,18 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_foundation: dependency: transitive description: @@ -857,10 +873,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.0" shared_preferences_windows: dependency: transitive description: @@ -998,10 +1014,10 @@ packages: dependency: "direct main" description: name: tray_manager - sha256: "4ab709d70a4374af172f8c39e018db33a4271265549c6fc9d269a65e5f4b0225" + sha256: e0ac9a88b2700f366b8629b97e8663b6ef450a2f169560a685dc167bfe9c9c29 url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.2" typed_data: dependency: transitive description: @@ -1022,26 +1038,26 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e" + sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e" url: "https://pub.dev" source: hosted - version: "6.2.5" + version: "6.2.6" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745 + sha256: "360a6ed2027f18b73c8d98e159dda67a61b7f2e0f6ec26e86c3ada33b0621775" url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.3.1" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" + sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" url: "https://pub.dev" source: hosted - version: "6.2.4" + version: "6.2.5" url_launcher_linux: dependency: transitive description: @@ -1070,10 +1086,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.1" url_launcher_windows: dependency: transitive description: @@ -1086,10 +1102,10 @@ packages: dependency: transitive description: name: uuid - sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8 + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" url: "https://pub.dev" source: hosted - version: "4.3.3" + version: "4.4.0" vector_math: dependency: transitive description: @@ -1098,6 +1114,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" watcher: dependency: transitive description: @@ -1110,18 +1134,18 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" win32: dependency: transitive description: @@ -1166,10 +1190,10 @@ packages: dependency: transitive description: name: yaml_edit - sha256: c566f4f804215d84a7a2c377667f546c6033d5b34b4f9e60dfb09d17c4e97826 + sha256: e9c1a3543d2da0db3e90270dbb1e4eebc985ee5e3ffe468d83224472b2194a5f url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0"