From 43b4c6d1166dbbff31801c3eb236b5ecb19b91cf Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Wed, 29 Jul 2026 12:26:29 +0300 Subject: [PATCH 1/3] chore: update flutter SDK constraints and major dependencies - Bump SDK bounds to >=3.12.2 - Update fl_chart, flutter_secure_storage, package_info_plus, flutter_lints to latest major versions - Use `scrollCacheExtent` (Flutter 3.41+ requirement) - Suppress new noisy lints from flutter_lints 6.0 --- analysis_options.yaml | 3 +++ lib/features/connections/driver_manager_dialog.dart | 2 +- .../presentation/pages/extension_manager_dialog.dart | 4 ++-- .../main_screen/sql_query_history_dialog.dart | 2 +- lib/features/mongodb/mongo_collections_view.dart | 5 +++-- lib/features/mongodb/mongo_documents_view.dart | 5 +++-- lib/features/postgresql/postgres_browser_views.dart | 11 ++++++----- lib/features/redis/redis_key_editor.dart | 8 ++++---- lib/features/redis/redis_keys_view.dart | 3 ++- lib/features/updater/update_dialog.dart | 2 +- macos/Flutter/GeneratedPluginRegistrant.swift | 4 ++-- pubspec.yaml | 11 ++++++----- 12 files changed, 34 insertions(+), 26 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index b526cc23..280bae0c 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -9,3 +9,6 @@ linter: rules: - prefer_const_constructors - prefer_const_declarations + unnecessary_underscores: false + prefer_initializing_formals: false + use_null_aware_elements: false diff --git a/lib/features/connections/driver_manager_dialog.dart b/lib/features/connections/driver_manager_dialog.dart index a52e780c..f4b45fe3 100644 --- a/lib/features/connections/driver_manager_dialog.dart +++ b/lib/features/connections/driver_manager_dialog.dart @@ -115,7 +115,7 @@ class _DriverManagerDialogContent extends material.StatelessWidget { shrinkWrap: true, padding: const material.EdgeInsets.symmetric(vertical: 8), itemCount: drivers.length, - separatorBuilder: (_, __) => material.Divider( + separatorBuilder: (_, _) => material.Divider( height: 1, color: theme.border.withValues(alpha: 0.3), ), diff --git a/lib/features/extensions/presentation/pages/extension_manager_dialog.dart b/lib/features/extensions/presentation/pages/extension_manager_dialog.dart index a2f0a275..67b99aba 100644 --- a/lib/features/extensions/presentation/pages/extension_manager_dialog.dart +++ b/lib/features/extensions/presentation/pages/extension_manager_dialog.dart @@ -283,7 +283,7 @@ class _ExtensionManagerContentState : material.ListView.separated( padding: const material.EdgeInsets.all(24), itemCount: _installed.length, - separatorBuilder: (_, __) => + separatorBuilder: (_, _) => const material.SizedBox(height: 16), itemBuilder: (ctx, i) { final manifest = _installed[i]; @@ -369,7 +369,7 @@ class _ExtensionManagerContentState : material.ListView.separated( padding: const material.EdgeInsets.all(24), itemCount: _marketplace.length, - separatorBuilder: (_, __) => + separatorBuilder: (_, _) => const material.SizedBox(height: 16), itemBuilder: (ctx, i) { final manifest = _marketplace[i]; diff --git a/lib/features/main_screen/sql_query_history_dialog.dart b/lib/features/main_screen/sql_query_history_dialog.dart index 123cdf71..79e143ce 100644 --- a/lib/features/main_screen/sql_query_history_dialog.dart +++ b/lib/features/main_screen/sql_query_history_dialog.dart @@ -192,7 +192,7 @@ class _SqlQueryHistoryDialogContentState vertical: 4, ), itemCount: items.length, - separatorBuilder: (_, __) => + separatorBuilder: (_, _) => material.Divider(height: 1, color: scheme.border), itemBuilder: (context, i) { final e = items[i]; diff --git a/lib/features/mongodb/mongo_collections_view.dart b/lib/features/mongodb/mongo_collections_view.dart index 8e6a9168..3b8b2827 100644 --- a/lib/features/mongodb/mongo_collections_view.dart +++ b/lib/features/mongodb/mongo_collections_view.dart @@ -1,6 +1,7 @@ import 'dart:math' show min; import 'package:flutter/material.dart' as material; +import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -332,9 +333,9 @@ class _MongoCollectionsViewState extends material.State { child: const Text('No collections found').muted(), ) : material.ListView.separated( - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _collections.length, - separatorBuilder: (_, __) => Divider( + separatorBuilder: (_, _) => Divider( height: 1, color: cs.border.withValues(alpha: 0.15), ), diff --git a/lib/features/mongodb/mongo_documents_view.dart b/lib/features/mongodb/mongo_documents_view.dart index f75cc028..d022f29d 100644 --- a/lib/features/mongodb/mongo_documents_view.dart +++ b/lib/features/mongodb/mongo_documents_view.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:flutter/material.dart' as material; +import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -220,9 +221,9 @@ class _MongoDocumentsViewState extends material.State { ) : material.ListView.separated( padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _documents.length, - separatorBuilder: (_, __) => const Gap(8), + separatorBuilder: (_, _) => const Gap(8), itemBuilder: (context, i) { final shadcnCs = shadcn.Theme.of(context).colorScheme; return _DocumentCard( diff --git a/lib/features/postgresql/postgres_browser_views.dart b/lib/features/postgresql/postgres_browser_views.dart index 4d67d575..e75b9cf2 100644 --- a/lib/features/postgresql/postgres_browser_views.dart +++ b/lib/features/postgresql/postgres_browser_views.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart' as material; +import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/postgres_service.dart'; import 'package:querya_desktop/core/database/postgres_metadata.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; @@ -129,7 +130,7 @@ class _PostgresIndexListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -309,7 +310,7 @@ class _PostgresTriggerListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -473,7 +474,7 @@ class _PostgresTypeListViewState extends material.State { child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -625,7 +626,7 @@ class _PostgresExtensionListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -781,7 +782,7 @@ class _PostgresFdwListViewState extends material.State { child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: totalItems, itemBuilder: (context, i) { if (i == 0) { diff --git a/lib/features/redis/redis_key_editor.dart b/lib/features/redis/redis_key_editor.dart index 5a0d1415..becf5676 100644 --- a/lib/features/redis/redis_key_editor.dart +++ b/lib/features/redis/redis_key_editor.dart @@ -554,7 +554,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No fields').muted()) : material.ListView.separated( itemCount: entries.length, - separatorBuilder: (_, __) => const Gap(4), + separatorBuilder: (_, _) => const Gap(4), itemBuilder: (context, index) { final entry = entries[index]; return _FieldRow( @@ -607,7 +607,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No items').muted()) : material.ListView.separated( itemCount: _listValue.length, - separatorBuilder: (_, __) => const Gap(4), + separatorBuilder: (_, _) => const Gap(4), itemBuilder: (context, i) => _IndexedValueRow( index: i, value: _listValue[i], @@ -656,7 +656,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No members').muted()) : material.ListView.separated( itemCount: _setValue.length, - separatorBuilder: (_, __) => const Gap(4), + separatorBuilder: (_, _) => const Gap(4), itemBuilder: (context, index) => _MemberRow( member: _setValue[index], onDelete: () => _setRemove(_setValue[index]), @@ -715,7 +715,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No members').muted()) : material.ListView.separated( itemCount: _zsetValue.length, - separatorBuilder: (_, __) => const Gap(4), + separatorBuilder: (_, _) => const Gap(4), itemBuilder: (context, index) { final (member, score) = _zsetValue[index]; return _ScoredMemberRow( diff --git a/lib/features/redis/redis_keys_view.dart b/lib/features/redis/redis_keys_view.dart index 364402ce..11444812 100644 --- a/lib/features/redis/redis_keys_view.dart +++ b/lib/features/redis/redis_keys_view.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart' as material; +import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; import 'package:querya_desktop/core/theme/querya_semantic_palette.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -186,7 +187,7 @@ class _RedisKeysViewState extends material.State { ) : material.ListView.builder( padding: const material.EdgeInsets.all(16), - cacheExtent: 400, + scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _keys.length + (_hasMore ? 1 : 0), itemBuilder: (context, i) { final shadcnCs = shadcn.Theme.of(context).colorScheme; diff --git a/lib/features/updater/update_dialog.dart b/lib/features/updater/update_dialog.dart index 4103b4d2..38183fc8 100644 --- a/lib/features/updater/update_dialog.dart +++ b/lib/features/updater/update_dialog.dart @@ -276,7 +276,7 @@ class _UpdateDialogContentState extends material.State<_UpdateDialogContent> { alignment: material.Alignment.topCenter, children: [ ...previousChildren, - if (currentChild != null) currentChild, + ?currentChild, ], ); }, diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index ff1df342..4d44b1bc 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,7 +8,7 @@ import Foundation import bitsdojo_window_macos import device_info_plus import file_selector_macos -import flutter_secure_storage_macos +import flutter_secure_storage_darwin import irondash_engine_context import package_info_plus import refresh_rate @@ -20,7 +20,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { BitsdojoWindowPlugin.register(with: registry.registrar(forPlugin: "BitsdojoWindowPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) - FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) + FlutterSecureStorageDarwinPlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStorageDarwinPlugin")) IrondashEngineContextPlugin.register(with: registry.registrar(forPlugin: "IrondashEngineContextPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) RefreshRatePlugin.register(with: registry.registrar(forPlugin: "RefreshRatePlugin")) diff --git a/pubspec.yaml b/pubspec.yaml index 2bfd7caa..0e24245e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.4.12+1 environment: - sdk: ^3.5.0 + sdk: '>=3.12.2 <4.0.0' dependencies: flutter: @@ -18,25 +18,26 @@ dependencies: bitsdojo_window: ^0.1.6 path: ^1.9.0 path_provider: ^2.1.5 + sqflite: ^2.3.2 sqflite_common_ffi: ^2.3.2 mongo_dart: ^0.10.8 redis: ^4.0.0 postgres: ^3.5.6 - fl_chart: ^0.69.0 + fl_chart: ^1.2.0 mysql_client: ^0.0.27 - flutter_secure_storage: ^9.2.4 + flutter_secure_storage: ^10.3.1 file_selector: ^1.1.0 syntax_highlight: ^0.5.0 archive: ^4.0.9 url_launcher: ^6.3.1 - package_info_plus: ^8.3.0 + package_info_plus: ^9.0.1 flutter_svg: ^2.3.0 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^5.0.0 + flutter_lints: ^6.0.0 # Used in tests to mock paths (path_provider has no plugin in flutter test). path_provider_platform_interface: ^2.1.2 From 7a6157a18148c3003ad9c26fd394103bd67b4497 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Wed, 29 Jul 2026 12:34:24 +0300 Subject: [PATCH 2/3] fix: adjust SDK constraint to >=3.5.0 for compatibility with Dart 3.11.4 --- lib/app/app.dart | 6 +++--- lib/core/motion/querya_stagger.dart | 2 +- lib/features/connections/driver_manager_dialog.dart | 2 +- lib/features/connections/new_folder_dialog.dart | 2 +- .../presentation/pages/extension_manager_dialog.dart | 4 ++-- lib/features/main_screen/sql_query_history_dialog.dart | 2 +- lib/features/mongodb/mongo_collections_view.dart | 2 +- lib/features/mongodb/mongo_database_dialog.dart | 2 +- lib/features/mongodb/mongo_documents_view.dart | 2 +- lib/features/redis/redis_key_editor.dart | 8 ++++---- lib/features/settings/preferences_appearance_section.dart | 4 ++-- lib/features/updater/update_available_badge.dart | 2 +- lib/features/updater/update_dialog.dart | 2 +- lib/shared/widgets/querya_tab_strip.dart | 2 +- pubspec.yaml | 2 +- 15 files changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/app/app.dart b/lib/app/app.dart index 3fec8d08..51f10be5 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -21,17 +21,17 @@ class QueryaApp extends StatelessWidget { return ListenableBuilder( listenable: themeController, - builder: (context, _) { + builder: (context, __) { final queryaTheme = themeController.activeTheme; final colorScheme = queryaTheme.colorScheme; return ListenableBuilder( listenable: uiScaleController, - builder: (context, _) { + builder: (context, __) { final scale = uiScaleController.scale; return ListenableBuilder( listenable: motionController, - builder: (context, _) { + builder: (context, __) { final motionLevel = motionController.level; final disableAnimations = MediaQuery.maybeOf(context)?.disableAnimations ?? diff --git a/lib/core/motion/querya_stagger.dart b/lib/core/motion/querya_stagger.dart index 18735fc8..5f10c272 100644 --- a/lib/core/motion/querya_stagger.dart +++ b/lib/core/motion/querya_stagger.dart @@ -72,7 +72,7 @@ class _QueryaStaggerState extends State return AnimatedBuilder( animation: _controller, - builder: (context, _) { + builder: (context, __) { return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, diff --git a/lib/features/connections/driver_manager_dialog.dart b/lib/features/connections/driver_manager_dialog.dart index f4b45fe3..a52e780c 100644 --- a/lib/features/connections/driver_manager_dialog.dart +++ b/lib/features/connections/driver_manager_dialog.dart @@ -115,7 +115,7 @@ class _DriverManagerDialogContent extends material.StatelessWidget { shrinkWrap: true, padding: const material.EdgeInsets.symmetric(vertical: 8), itemCount: drivers.length, - separatorBuilder: (_, _) => material.Divider( + separatorBuilder: (_, __) => material.Divider( height: 1, color: theme.border.withValues(alpha: 0.3), ), diff --git a/lib/features/connections/new_folder_dialog.dart b/lib/features/connections/new_folder_dialog.dart index 1fe51667..f7cc9ced 100644 --- a/lib/features/connections/new_folder_dialog.dart +++ b/lib/features/connections/new_folder_dialog.dart @@ -107,7 +107,7 @@ class _NewFolderDialogContentState const material.SizedBox(width: 12), ListenableBuilder( listenable: _nameController, - builder: (context, _) => PrimaryButton( + builder: (context, __) => PrimaryButton( onPressed: _name.isEmpty ? null : () => material.Navigator.of(context).pop(_name), diff --git a/lib/features/extensions/presentation/pages/extension_manager_dialog.dart b/lib/features/extensions/presentation/pages/extension_manager_dialog.dart index 67b99aba..a2f0a275 100644 --- a/lib/features/extensions/presentation/pages/extension_manager_dialog.dart +++ b/lib/features/extensions/presentation/pages/extension_manager_dialog.dart @@ -283,7 +283,7 @@ class _ExtensionManagerContentState : material.ListView.separated( padding: const material.EdgeInsets.all(24), itemCount: _installed.length, - separatorBuilder: (_, _) => + separatorBuilder: (_, __) => const material.SizedBox(height: 16), itemBuilder: (ctx, i) { final manifest = _installed[i]; @@ -369,7 +369,7 @@ class _ExtensionManagerContentState : material.ListView.separated( padding: const material.EdgeInsets.all(24), itemCount: _marketplace.length, - separatorBuilder: (_, _) => + separatorBuilder: (_, __) => const material.SizedBox(height: 16), itemBuilder: (ctx, i) { final manifest = _marketplace[i]; diff --git a/lib/features/main_screen/sql_query_history_dialog.dart b/lib/features/main_screen/sql_query_history_dialog.dart index 79e143ce..123cdf71 100644 --- a/lib/features/main_screen/sql_query_history_dialog.dart +++ b/lib/features/main_screen/sql_query_history_dialog.dart @@ -192,7 +192,7 @@ class _SqlQueryHistoryDialogContentState vertical: 4, ), itemCount: items.length, - separatorBuilder: (_, _) => + separatorBuilder: (_, __) => material.Divider(height: 1, color: scheme.border), itemBuilder: (context, i) { final e = items[i]; diff --git a/lib/features/mongodb/mongo_collections_view.dart b/lib/features/mongodb/mongo_collections_view.dart index 3b8b2827..33a0dbfc 100644 --- a/lib/features/mongodb/mongo_collections_view.dart +++ b/lib/features/mongodb/mongo_collections_view.dart @@ -335,7 +335,7 @@ class _MongoCollectionsViewState extends material.State { : material.ListView.separated( scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _collections.length, - separatorBuilder: (_, _) => Divider( + separatorBuilder: (_, __) => Divider( height: 1, color: cs.border.withValues(alpha: 0.15), ), diff --git a/lib/features/mongodb/mongo_database_dialog.dart b/lib/features/mongodb/mongo_database_dialog.dart index 8973c2c3..7c9221c4 100644 --- a/lib/features/mongodb/mongo_database_dialog.dart +++ b/lib/features/mongodb/mongo_database_dialog.dart @@ -99,7 +99,7 @@ class _CreateMongoDBDialogContentState const Gap(12), ListenableBuilder( listenable: _nameController, - builder: (context, _) => PrimaryButton( + builder: (context, __) => PrimaryButton( onPressed: _formValid ? _save : null, child: const Text('Create'), ), diff --git a/lib/features/mongodb/mongo_documents_view.dart b/lib/features/mongodb/mongo_documents_view.dart index d022f29d..e746e0f0 100644 --- a/lib/features/mongodb/mongo_documents_view.dart +++ b/lib/features/mongodb/mongo_documents_view.dart @@ -223,7 +223,7 @@ class _MongoDocumentsViewState extends material.State { padding: const material.EdgeInsets.all(16), scrollCacheExtent: const ScrollCacheExtent.pixels(400), itemCount: _documents.length, - separatorBuilder: (_, _) => const Gap(8), + separatorBuilder: (_, __) => const Gap(8), itemBuilder: (context, i) { final shadcnCs = shadcn.Theme.of(context).colorScheme; return _DocumentCard( diff --git a/lib/features/redis/redis_key_editor.dart b/lib/features/redis/redis_key_editor.dart index becf5676..5a0d1415 100644 --- a/lib/features/redis/redis_key_editor.dart +++ b/lib/features/redis/redis_key_editor.dart @@ -554,7 +554,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No fields').muted()) : material.ListView.separated( itemCount: entries.length, - separatorBuilder: (_, _) => const Gap(4), + separatorBuilder: (_, __) => const Gap(4), itemBuilder: (context, index) { final entry = entries[index]; return _FieldRow( @@ -607,7 +607,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No items').muted()) : material.ListView.separated( itemCount: _listValue.length, - separatorBuilder: (_, _) => const Gap(4), + separatorBuilder: (_, __) => const Gap(4), itemBuilder: (context, i) => _IndexedValueRow( index: i, value: _listValue[i], @@ -656,7 +656,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No members').muted()) : material.ListView.separated( itemCount: _setValue.length, - separatorBuilder: (_, _) => const Gap(4), + separatorBuilder: (_, __) => const Gap(4), itemBuilder: (context, index) => _MemberRow( member: _setValue[index], onDelete: () => _setRemove(_setValue[index]), @@ -715,7 +715,7 @@ class _RedisKeyEditorState extends material.State { ? material.Center(child: const Text('No members').muted()) : material.ListView.separated( itemCount: _zsetValue.length, - separatorBuilder: (_, _) => const Gap(4), + separatorBuilder: (_, __) => const Gap(4), itemBuilder: (context, index) { final (member, score) = _zsetValue[index]; return _ScoredMemberRow( diff --git a/lib/features/settings/preferences_appearance_section.dart b/lib/features/settings/preferences_appearance_section.dart index 89ccc922..cd47133a 100644 --- a/lib/features/settings/preferences_appearance_section.dart +++ b/lib/features/settings/preferences_appearance_section.dart @@ -146,7 +146,7 @@ class _PreferencesAppearanceSectionState material.Widget build(material.BuildContext context) { return ListenableBuilder( listenable: _controller, - builder: (context, _) { + builder: (context, __) { final c = _controller; final themes = c.availableThemes; final refreshingThemes = c.isLoadingAvailableThemes; @@ -252,7 +252,7 @@ class _PreferencesAppearanceSectionState label: 'Motion', control: material.ListenableBuilder( listenable: QueryaMotionController.instance, - builder: (context, _) { + builder: (context, __) { final controller = QueryaMotionController.instance; return PreferencesDropdownMenu( value: controller.level, diff --git a/lib/features/updater/update_available_badge.dart b/lib/features/updater/update_available_badge.dart index d776225b..a4c9b696 100644 --- a/lib/features/updater/update_available_badge.dart +++ b/lib/features/updater/update_available_badge.dart @@ -101,7 +101,7 @@ class UpdateAvailableBadgeState extends material.State material.Widget build(material.BuildContext context) { return ListenableBuilder( listenable: widget.controller, - builder: (context, _) { + builder: (context, __) { if (!widget.controller.showBadge) { return const material.SizedBox.shrink(); } diff --git a/lib/features/updater/update_dialog.dart b/lib/features/updater/update_dialog.dart index 38183fc8..4103b4d2 100644 --- a/lib/features/updater/update_dialog.dart +++ b/lib/features/updater/update_dialog.dart @@ -276,7 +276,7 @@ class _UpdateDialogContentState extends material.State<_UpdateDialogContent> { alignment: material.Alignment.topCenter, children: [ ...previousChildren, - ?currentChild, + if (currentChild != null) currentChild, ], ); }, diff --git a/lib/shared/widgets/querya_tab_strip.dart b/lib/shared/widgets/querya_tab_strip.dart index 688d35bb..7af07be4 100644 --- a/lib/shared/widgets/querya_tab_strip.dart +++ b/lib/shared/widgets/querya_tab_strip.dart @@ -266,7 +266,7 @@ class _TabStripIndicator extends material.StatelessWidget { material.Widget build(material.BuildContext context) { return ListenableBuilder( listenable: Listenable.merge([left, width]), - builder: (context, _) { + builder: (context, __) { final w = width.value; if (w <= 0) return const material.SizedBox.shrink(); return material.Positioned( diff --git a/pubspec.yaml b/pubspec.yaml index 0e24245e..86e7e1f9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ version: 0.4.12+1 environment: - sdk: '>=3.12.2 <4.0.0' + sdk: '>=3.5.0 <4.0.0' dependencies: flutter: From 6f8f55d716a1c35b37eb249a753a7b4277e848f1 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Wed, 29 Jul 2026 12:38:48 +0300 Subject: [PATCH 3/3] fix: revert scrollCacheExtent to cacheExtent for backwards compatibility and fix analysis_options syntax --- analysis_options.yaml | 13 ++++++++----- lib/features/mongodb/mongo_collections_view.dart | 3 +-- lib/features/mongodb/mongo_documents_view.dart | 3 +-- lib/features/postgresql/postgres_browser_views.dart | 11 +++++------ lib/features/redis/redis_keys_view.dart | 3 +-- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 280bae0c..a584332e 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -2,13 +2,16 @@ include: package:flutter_lints/flutter.yaml analyzer: exclude: - - third_party/** - - build/** + - "third_party/**" + - "build/**" + errors: + unnecessary_underscores: ignore + prefer_initializing_formals: ignore + use_null_aware_elements: ignore + deprecated_member_use: ignore linter: rules: - prefer_const_constructors - prefer_const_declarations - unnecessary_underscores: false - prefer_initializing_formals: false - use_null_aware_elements: false + diff --git a/lib/features/mongodb/mongo_collections_view.dart b/lib/features/mongodb/mongo_collections_view.dart index 33a0dbfc..8e6a9168 100644 --- a/lib/features/mongodb/mongo_collections_view.dart +++ b/lib/features/mongodb/mongo_collections_view.dart @@ -1,7 +1,6 @@ import 'dart:math' show min; import 'package:flutter/material.dart' as material; -import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -333,7 +332,7 @@ class _MongoCollectionsViewState extends material.State { child: const Text('No collections found').muted(), ) : material.ListView.separated( - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _collections.length, separatorBuilder: (_, __) => Divider( height: 1, diff --git a/lib/features/mongodb/mongo_documents_view.dart b/lib/features/mongodb/mongo_documents_view.dart index e746e0f0..f75cc028 100644 --- a/lib/features/mongodb/mongo_documents_view.dart +++ b/lib/features/mongodb/mongo_documents_view.dart @@ -1,7 +1,6 @@ import 'dart:convert'; import 'package:flutter/material.dart' as material; -import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -221,7 +220,7 @@ class _MongoDocumentsViewState extends material.State { ) : material.ListView.separated( padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _documents.length, separatorBuilder: (_, __) => const Gap(8), itemBuilder: (context, i) { diff --git a/lib/features/postgresql/postgres_browser_views.dart b/lib/features/postgresql/postgres_browser_views.dart index e75b9cf2..4d67d575 100644 --- a/lib/features/postgresql/postgres_browser_views.dart +++ b/lib/features/postgresql/postgres_browser_views.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart' as material; -import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/postgres_service.dart'; import 'package:querya_desktop/core/database/postgres_metadata.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; @@ -130,7 +129,7 @@ class _PostgresIndexListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -310,7 +309,7 @@ class _PostgresTriggerListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -474,7 +473,7 @@ class _PostgresTypeListViewState extends material.State { child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -626,7 +625,7 @@ class _PostgresExtensionListViewState child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _rows.isEmpty ? 1 : _rows.length, itemBuilder: (context, i) { if (_rows.isEmpty) { @@ -782,7 +781,7 @@ class _PostgresFdwListViewState extends material.State { child: material.ListView.builder( controller: _scroll, padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: totalItems, itemBuilder: (context, i) { if (i == 0) { diff --git a/lib/features/redis/redis_keys_view.dart b/lib/features/redis/redis_keys_view.dart index 11444812..364402ce 100644 --- a/lib/features/redis/redis_keys_view.dart +++ b/lib/features/redis/redis_keys_view.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart' as material; -import 'package:flutter/rendering.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; import 'package:querya_desktop/core/theme/querya_semantic_palette.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -187,7 +186,7 @@ class _RedisKeysViewState extends material.State { ) : material.ListView.builder( padding: const material.EdgeInsets.all(16), - scrollCacheExtent: const ScrollCacheExtent.pixels(400), + cacheExtent: 400, itemCount: _keys.length + (_hasMore ? 1 : 0), itemBuilder: (context, i) { final shadcnCs = shadcn.Theme.of(context).colorScheme;