diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 760788ebe..e6206b45c 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,41 +17,35 @@ jobs: steps: - name: 代码迁出 - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - name: 构建Java环境 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: "zulu" java-version: "17" - - - name: 检查缓存 - uses: actions/cache@v4 - id: cache-flutter - with: - path: /root/flutter-sdk # Flutter SDK 的路径 - key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }} + cache: 'gradle' + cache-dependency-path: | + android/*.gradle* + android/**/gradle-wrapper.properties - name: 安装Flutter - if: steps.cache-flutter.outputs.cache-hit != 'true' uses: subosito/flutter-action@v2 + id: flutter-action with: channel: stable flutter-version-file: pubspec.yaml + cache: true - name: apply bottom sheet patch + if: steps.flutter-action.outputs.CACHE-HIT != 'true' working-directory: ${{ env.FLUTTER_ROOT }} - run: | - git apply $GITHUB_WORKSPACE/lib/scripts/bottom_sheet_patch.diff - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add . - git commit -m "bottom sheet patch" + run: git apply $GITHUB_WORKSPACE/lib/scripts/bottom_sheet_patch.diff - - name: 下载项目依赖 - run: flutter pub get + # - name: 下载项目依赖 + # run: flutter pub get - name: Write key if: github.event_name != 'pull_request' @@ -66,9 +60,8 @@ jobs: - name: flutter build apk run: | - chmod +x lib/scripts/build.dart dart lib/scripts/build.dart "android" - flutter build apk --release --split-per-abi + flutter build apk --release --split-per-abi --pub - name: 上传 uses: actions/upload-artifact@v4 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1dd9328cc..36599fb7c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: ${{ github.event.inputs.branch }} fetch-depth: 0 @@ -51,10 +51,7 @@ jobs: with: channel: stable flutter-version-file: pubspec.yaml - - - name: Get Flutter dependencies - run: flutter pub get - shell: bash + cache: true - name: Set and Extract version run: | @@ -65,7 +62,7 @@ jobs: #TODO: deb and rpm packages need to be build - name: Build Linux - run: flutter build linux --release -v + run: flutter build linux --release -v --pub - name: Package .tar.gz run: tar -zcvf PiliPlus_linux_${{ env.version }}_amd64.tar.gz -C build/linux/x64/release/bundle . @@ -124,4 +121,4 @@ jobs: with: name: Linux_deb_package path: PiliPlus_linux_*.deb - + diff --git a/lib/common/widgets/cached_network_svg_image.dart b/lib/common/widgets/cached_network_svg_image.dart new file mode 100644 index 000000000..efc38df26 --- /dev/null +++ b/lib/common/widgets/cached_network_svg_image.dart @@ -0,0 +1,226 @@ +// code from cached_network_svg_image; + +import 'dart:developer'; + +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter_cache_manager/flutter_cache_manager.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CachedNetworkSVGImage extends StatefulWidget { + CachedNetworkSVGImage( + String url, { + Key? key, + String? cacheKey, + Widget? placeholder, + Widget? errorWidget, + double? width, + double? height, + Map? headers, + BoxFit fit = BoxFit.contain, + AlignmentGeometry alignment = Alignment.center, + bool matchTextDirection = false, + bool allowDrawingOutsideViewBox = false, + String? semanticsLabel, + bool excludeFromSemantics = false, + SvgTheme theme = const SvgTheme(), + ColorFilter? colorFilter, + WidgetBuilder? placeholderBuilder, + BaseCacheManager? cacheManager, + }) : _url = url, + _cacheKey = cacheKey, + _placeholder = placeholder, + _errorWidget = errorWidget, + _width = width, + _height = height, + _headers = headers, + _fit = fit, + _alignment = alignment, + _matchTextDirection = matchTextDirection, + _allowDrawingOutsideViewBox = allowDrawingOutsideViewBox, + _semanticsLabel = semanticsLabel, + _excludeFromSemantics = excludeFromSemantics, + _theme = theme, + _colorFilter = colorFilter, + _placeholderBuilder = placeholderBuilder, + _cacheManager = cacheManager ?? DefaultCacheManager(), + super(key: key ?? ValueKey(cacheKey ?? url)); + + final String _url; + final String? _cacheKey; + final Widget? _placeholder; + final Widget? _errorWidget; + final double? _width; + final double? _height; + final Map? _headers; + final BoxFit _fit; + final AlignmentGeometry _alignment; + final bool _matchTextDirection; + final bool _allowDrawingOutsideViewBox; + final String? _semanticsLabel; + final bool _excludeFromSemantics; + final SvgTheme _theme; + final ColorFilter? _colorFilter; + final WidgetBuilder? _placeholderBuilder; + final BaseCacheManager _cacheManager; + + @override + State createState() => _CachedNetworkSVGImageState(); + + static Future preCache( + String imageUrl, { + String? cacheKey, + BaseCacheManager? cacheManager, + }) { + final key = cacheKey ?? _generateKeyFromUrl(imageUrl); + cacheManager ??= DefaultCacheManager(); + return cacheManager.downloadFile(key); + } + + static Future clearCacheForUrl( + String imageUrl, { + String? cacheKey, + BaseCacheManager? cacheManager, + }) { + final key = cacheKey ?? _generateKeyFromUrl(imageUrl); + cacheManager ??= DefaultCacheManager(); + return cacheManager.removeFile(key); + } + + static Future clearCache({BaseCacheManager? cacheManager}) { + cacheManager ??= DefaultCacheManager(); + return cacheManager.emptyCache(); + } + + static String _generateKeyFromUrl(String url) => url.split('?').first; +} + +class _CachedNetworkSVGImageState extends State { + bool _isLoading = false; + bool _isError = false; + String? _svgString; + late final String _cacheKey; + double? height; + late TextScaler textScaler; + + static final _sizeRegExp = RegExp( + r'height="([\d\.]+)([c-x]{2})?"', + ); + + @override + void initState() { + super.initState(); + _cacheKey = + widget._cacheKey ?? + CachedNetworkSVGImage._generateKeyFromUrl(widget._url); + _loadImage(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + textScaler = MediaQuery.textScalerOf(context); + } + + Future _loadImage() async { + try { + var file = (await widget._cacheManager.getFileFromMemory( + _cacheKey, + ))?.file; + + file ??= await widget._cacheManager.getSingleFile( + widget._url, + key: _cacheKey, + headers: widget._headers ?? {}, + ); + final svg = await file.readAsString(); + _svgString = svg; + if (widget._width == null && widget._height == null) { + final match = _sizeRegExp.firstMatch(svg); + if (match != null) { + double h = double.parse(match.group(1)!); + final suffix = match.group(2); + if (suffix != null) { + h *= switch (suffix) { + 'em' => textScaler.scale(widget._theme.fontSize), + 'ex' => textScaler.scale(widget._theme.xHeight), + 'pt' => 1.25, + 'pc' => 15.0, + 'mm' => 3.543307, + 'cm' => 35.43307, + 'in' => 90.0, + _ => 1.0, + }; + } + height = h; + } + } + + _isLoading = false; + + _setState(); + } catch (e) { + log('CachedNetworkSVGImage: $e'); + + _isError = true; + _isLoading = false; + + _setState(); + } + } + + void _setState() { + if (mounted) { + setState(() {}); + } else { + SchedulerBinding.instance.addPostFrameCallback((_) => setState(() {})); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + width: widget._width, + height: widget._height, + child: _buildImage(), + ); + } + + Widget? _buildImage() { + if (_isLoading) return _buildPlaceholderWidget(); + + if (_isError) return _buildErrorWidget(); + + return _buildSVGImage(); + } + + Widget _buildPlaceholderWidget() => Center(child: widget._placeholder); + + Widget _buildErrorWidget() => Center(child: widget._errorWidget); + + Widget? _buildSVGImage() { + if (_svgString == null) { + return Center(child: widget._placeholderBuilder?.call(context)); + } + + return SvgPicture.string( + _svgString!, + fit: widget._fit, + width: widget._width, + height: widget._height ?? height, + alignment: widget._alignment, + matchTextDirection: widget._matchTextDirection, + allowDrawingOutsideViewBox: widget._allowDrawingOutsideViewBox, + semanticsLabel: widget._semanticsLabel, + excludeFromSemantics: widget._excludeFromSemantics, + colorFilter: widget._colorFilter, + placeholderBuilder: widget._placeholderBuilder, + theme: widget._theme, + ); + } +} diff --git a/lib/http/init.dart b/lib/http/init.dart index 7e3953d18..6eb072eb2 100644 --- a/lib/http/init.dart +++ b/lib/http/init.dart @@ -106,32 +106,31 @@ class Request { persistentConnection: true, ); - bool enableSystemProxy = Pref.enableSystemProxy; + final bool enableSystemProxy; late final String systemProxyHost; late final int? systemProxyPort; - if (enableSystemProxy) { + if (Pref.enableSystemProxy) { systemProxyHost = Pref.systemProxyHost; systemProxyPort = int.tryParse(Pref.systemProxyPort); enableSystemProxy = systemProxyPort != null && systemProxyHost.isNotEmpty; + } else { + enableSystemProxy = false; } final http11Adapter = IOHttpClientAdapter( - createHttpClient: () { - final client = HttpClient() - ..idleTimeout = const Duration(seconds: 15) - ..autoUncompress = false; // Http2Adapter没有自动解压, 统一行为 - // 设置代理 - if (enableSystemProxy) { - client - ..findProxy = ((_) => 'PROXY $systemProxyHost:$systemProxyPort') - ..badCertificateCallback = - (X509Certificate cert, String host, int port) => true; - } - return client; - }, + createHttpClient: enableSystemProxy + ? () => HttpClient() + ..idleTimeout = const Duration(seconds: 15) + ..autoUncompress = false + ..findProxy = ((_) => 'PROXY $systemProxyHost:$systemProxyPort') + ..badCertificateCallback = + (X509Certificate cert, String host, int port) => true + : () => HttpClient() + ..idleTimeout = const Duration(seconds: 15) + ..autoUncompress = false, // Http2Adapter没有自动解压, 统一行为 ); - late Uri proxy; + late final Uri proxy; if (enableSystemProxy) { proxy = Uri( scheme: 'http', diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index d4f9b2a46..6e25d8b53 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:PiliPlus/common/widgets/cached_network_svg_image.dart'; import 'package:PiliPlus/common/widgets/image/custom_grid_view.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/http/constants.dart'; @@ -15,7 +16,6 @@ import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:cached_network_svg_image/cached_network_svg_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -88,7 +88,6 @@ class OpusContent extends StatelessWidget { child: CachedNetworkSVGImage( cacheKey: latex, semanticsLabel: latex, - height: 65, '${HttpString.apiBaseUrl}/x/web-frontend/mathjax/tex?formula=${Uri.encodeComponent(latex)}', colorFilter: ColorFilter.mode( colorScheme.onSurfaceVariant, @@ -96,6 +95,7 @@ class OpusContent extends StatelessWidget { ), alignment: Alignment.centerLeft, placeholderBuilder: (_) => Text(latex), + errorWidget: Text(latex), ), ); default: diff --git a/lib/pages/setting/models/extra_settings.dart b/lib/pages/setting/models/extra_settings.dart index c3d2ad624..f2dd9069d 100644 --- a/lib/pages/setting/models/extra_settings.dart +++ b/lib/pages/setting/models/extra_settings.dart @@ -984,7 +984,7 @@ List get extraSettings => [ TextField( decoration: InputDecoration( isDense: true, - labelText: systemProxyHost != '' + labelText: systemProxyHost.isNotEmpty ? systemProxyHost : '请输入Host,使用 . 分割', border: const OutlineInputBorder( @@ -992,16 +992,14 @@ List get extraSettings => [ ), hintText: systemProxyHost, ), - onChanged: (e) { - systemProxyHost = e; - }, + onChanged: (e) => systemProxyHost = e, ), const SizedBox(height: 10), TextField( keyboardType: TextInputType.number, decoration: InputDecoration( isDense: true, - labelText: systemProxyPort != '' + labelText: systemProxyPort.isNotEmpty ? systemProxyPort : '请输入Port', border: const OutlineInputBorder( @@ -1009,9 +1007,8 @@ List get extraSettings => [ ), hintText: systemProxyPort, ), - onChanged: (e) { - systemProxyPort = e; - }, + inputFormatters: [FilteringTextInputFormatter.digitsOnly], + onChanged: (e) => systemProxyPort = e, ), ], ), diff --git a/lib/utils/calc_window_position.dart b/lib/utils/calc_window_position.dart index 1ac9c8fc9..1544ce6e5 100644 --- a/lib/utils/calc_window_position.dart +++ b/lib/utils/calc_window_position.dart @@ -1,34 +1,37 @@ import 'package:PiliPlus/utils/storage_pref.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:screen_retriever/screen_retriever.dart'; Future calcWindowPosition(Size windowSize) async { - Display primaryDisplay = await screenRetriever.getPrimaryDisplay(); - List allDisplays = await screenRetriever.getAllDisplays(); - Offset cursorScreenPoint = await screenRetriever.getCursorScreenPoint(); + final allDisplays = screenRetriever.getAllDisplays(); + final cursorScreenPoint = await screenRetriever.getCursorScreenPoint(); - Display currentDisplay = allDisplays.firstWhere( - (display) => Rect.fromLTWH( - display.visiblePosition!.dx, - display.visiblePosition!.dy, - display.size.width, - display.size.height, - ).contains(cursorScreenPoint), - orElse: () => primaryDisplay, - ); + final currentDisplay = + (await allDisplays).firstWhereOrNull( + (display) => (display.visiblePosition! & display.size).contains( + cursorScreenPoint, + ), + ) ?? + await screenRetriever.getPrimaryDisplay(); - num visibleWidth = currentDisplay.size.width; - num visibleHeight = currentDisplay.size.height; - num visibleStartX = 0; - num visibleStartY = 0; - - if (currentDisplay.visibleSize != null) { - visibleWidth = currentDisplay.visibleSize!.width; - visibleHeight = currentDisplay.visibleSize!.height; + final double visibleWidth; + final double visibleHeight; + if (currentDisplay.visibleSize case final size?) { + visibleWidth = size.width; + visibleHeight = size.height; + } else { + visibleWidth = currentDisplay.size.width; + visibleHeight = currentDisplay.size.height; } - if (currentDisplay.visiblePosition != null) { - visibleStartX = currentDisplay.visiblePosition!.dx; - visibleStartY = currentDisplay.visiblePosition!.dy; + + final double visibleStartX; + final double visibleStartY; + if (currentDisplay.visiblePosition case final offset?) { + visibleStartX = offset.dx; + visibleStartY = offset.dy; + } else { + visibleStartX = visibleStartY = 0; } final windowPosition = Pref.windowPosition; diff --git a/pubspec.lock b/pubspec.lock index 5955d647f..43a92a050 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "85.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d" url: "https://pub.dev" source: hosted - version: "6.4.1" - animations: - dependency: "direct main" - description: - name: animations - sha256: d3d6dcfb218225bbe68e87ccf6378bbb2e32a94900722c5f81611dad089911cb - url: "https://pub.dev" - source: hosted - version: "2.0.11" + version: "7.7.1" ansicolor: dependency: transitive description: @@ -158,18 +150,18 @@ packages: dependency: transitive description: name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + sha256: "825fed4d63050252a0b6e74f2d75844c4a85b664814be6993bd3493fb5239779" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "4.0.1" build_config: dependency: transitive description: name: build_config - sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" + sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.0" build_daemon: dependency: transitive description: @@ -178,30 +170,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.4" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" + sha256: "4e54dbeefdc70691ba80b3bce3976af63b5425c8c07dface348dfee664a0edc1" url: "https://pub.dev" source: hosted - version: "2.4.13" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 - url: "https://pub.dev" - source: hosted - version: "7.3.2" + version: "2.9.0" built_collection: dependency: transitive description: @@ -242,14 +218,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" - cached_network_svg_image: - dependency: "direct main" - description: - name: cached_network_svg_image - sha256: fe9df0217c12e3903558dad14e1bb938c51296a1d96faa080415c6146bbd7a7d - url: "https://pub.dev" - source: hosted - version: "1.2.0" canvas_danmaku: dependency: "direct main" description: @@ -400,10 +368,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb" url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "3.1.1" dbus: dependency: transitive description: @@ -803,14 +771,6 @@ packages: url: "https://pub.dev" source: hosted version: "10.9.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" get: dependency: "direct main" description: @@ -867,14 +827,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - hive_generator: - dependency: "direct dev" - description: - name: hive_generator - sha256: "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4" - url: "https://pub.dev" - source: hosted - version: "2.0.1" html: dependency: "direct main" description: @@ -1187,8 +1139,8 @@ packages: description: path: "libs/universal/media_kit_libs_video" ref: "version_1.2.5" - resolved-ref: "4d68e69281b44f2c8e3c444cca3d8d8dc6dcff88" - url: "https://github.com/My-Responsitories/media-kit.git" + resolved-ref: "43aee19d9b2b0e33e0c9dd922b36ca6ace56de29" + url: "https://github.com/bggRGjQaUbCoE/media-kit.git" source: git version: "1.0.5" media_kit_libs_windows_video: @@ -1205,8 +1157,8 @@ packages: description: path: media_kit_native_event_loop ref: "version_1.2.5" - resolved-ref: "4d68e69281b44f2c8e3c444cca3d8d8dc6dcff88" - url: "https://github.com/My-Responsitories/media-kit.git" + resolved-ref: "43aee19d9b2b0e33e0c9dd922b36ca6ace56de29" + url: "https://github.com/bggRGjQaUbCoE/media-kit.git" source: git version: "1.0.9" media_kit_video: @@ -1663,22 +1615,6 @@ packages: description: flutter source: sdk version: "0.0.0" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c" - url: "https://pub.dev" - source: hosted - version: "1.3.5" source_span: dependency: transitive description: @@ -1800,14 +1736,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.6" - timing: - dependency: transitive - description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" - source: hosted - version: "1.0.2" tray_manager: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 9041b2a44..68fbc6f90 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8 # 动态取色 - dynamic_color: ^1.7.0 + dynamic_color: ^1.8.1 get: ^4.6.6 @@ -125,7 +125,7 @@ dependencies: url: https://github.com/bggRGjQaUbCoE/auto_orientation.git ref: master protobuf: ^5.0.0 - animations: ^2.0.11 + # animations: ^2.0.11 # 获取appx信息 package_info_plus: ^9.0.0 @@ -197,7 +197,6 @@ dependencies: url: https://github.com/wgh136/webdav_client.git ref: main re_highlight: ^0.0.3 - cached_network_svg_image: ^1.2.0 flutter_sortable_wrap: git: url: https://github.com/bggRGjQaUbCoE/flutter_sortable_wrap.git @@ -251,12 +250,12 @@ dependency_overrides: ref: version_1.2.5 media_kit_libs_video: git: - url: https://github.com/My-Responsitories/media-kit.git + url: https://github.com/bggRGjQaUbCoE/media-kit.git path: libs/universal/media_kit_libs_video ref: version_1.2.5 media_kit_native_event_loop: git: - url: https://github.com/My-Responsitories/media-kit.git + url: https://github.com/bggRGjQaUbCoE/media-kit.git path: media_kit_native_event_loop ref: version_1.2.5 media_kit_libs_android_video: @@ -281,10 +280,10 @@ dev_dependencies: # package. See that file for information about deactivating specific lint # rules and activating additional ones. flutter_lints: ^6.0.0 - flutter_launcher_icons: ^0.14.1 - hive_generator: ^2.0.1 - build_runner: ^2.4.13 - flutter_native_splash: ^2.4.3 + flutter_launcher_icons: ^0.14.4 + # hive_generator: ^2.0.1 + build_runner: ^2.9.0 + flutter_native_splash: ^2.4.6 flutter_launcher_icons: android: true