From b9d4068730b5f266c3a4365d91e1628eb5244a53 Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Sun, 18 Oct 2026 17:48:27 +0300 Subject: [PATCH] refactor(redis, mongodb): read colours through context.colors; 15 files drop their shadcn import (#1731) --- .../mongodb/mongo_aggregation_workspace.dart | 13 +++--- .../mongodb/mongo_collections_view.dart | 17 ++++---- .../mongodb/mongo_create_index_dialog.dart | 2 +- .../mongodb/mongo_databases_view.dart | 17 ++++---- .../mongodb/mongo_document_editor.dart | 6 +-- .../mongodb/mongo_document_tree_view.dart | 13 +++--- .../mongodb/mongo_documents_json_view.dart | 3 +- .../mongodb/mongo_documents_table_view.dart | 3 +- .../mongodb/mongo_documents_view.dart | 43 +++++++++---------- lib/features/mongodb/mongo_explorer_view.dart | 8 ++-- lib/features/mongodb/mongo_indexes_view.dart | 7 +-- .../mongodb/mongo_query_workspace.dart | 14 +++--- lib/features/mongodb/mongo_stats_view.dart | 15 +++---- .../mongodb/mongodb_connection_form.dart | 2 +- .../redis/editors/redis_hash_editor.dart | 23 +++++----- .../redis/editors/redis_list_editor.dart | 23 +++++----- .../redis/editors/redis_set_editor.dart | 23 +++++----- .../redis/editors/redis_string_editor.dart | 7 +-- .../redis/editors/redis_zset_editor.dart | 23 +++++----- lib/features/redis/redis_cli_workspace.dart | 5 ++- lib/features/redis/redis_connection_form.dart | 2 +- lib/features/redis/redis_databases_view.dart | 19 ++++---- lib/features/redis/redis_explorer_view.dart | 8 ++-- lib/features/redis/redis_key_editor.dart | 31 +++++++------ lib/features/redis/redis_keys_view.dart | 41 +++++++++--------- lib/features/redis/redis_view.dart | 15 +++---- .../mongodb/mongo_field_list_perf_test.dart | 11 +++-- .../redis/redis_type_editors_test.dart | 22 +++++----- test/guards/colors_through_context_test.dart | 2 + test/guards/shadcn_imports_ratchet_test.dart | 15 ------- 30 files changed, 205 insertions(+), 228 deletions(-) diff --git a/lib/features/mongodb/mongo_aggregation_workspace.dart b/lib/features/mongodb/mongo_aggregation_workspace.dart index 8de20940..ae9f5ed9 100644 --- a/lib/features/mongodb/mongo_aggregation_workspace.dart +++ b/lib/features/mongodb/mongo_aggregation_workspace.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; @@ -206,7 +207,7 @@ class _MongoAggregationWorkspaceState @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( color: cs.background, @@ -260,7 +261,7 @@ class _MongoAggregationWorkspaceState ); } - material.Widget _buildActionBar(ColorScheme cs) { + material.Widget _buildActionBar(QueryaUiColors cs) { final enabledCount = _stages.where((s) => s.isEnabled).length; return material.Container( @@ -329,7 +330,7 @@ class _MongoAggregationWorkspaceState ); } - material.Widget _buildStagesPane(ColorScheme cs) { + material.Widget _buildStagesPane(QueryaUiColors cs) { return material.Container( color: cs.card.withValues(alpha: 0.35), child: material.Column( @@ -386,7 +387,7 @@ class _MongoAggregationWorkspaceState ); } - material.Widget _buildResultsPane(ColorScheme cs) { + material.Widget _buildResultsPane(QueryaUiColors cs) { final title = _executedUpToStageIndex == null ? 'Pipeline Results' : 'Results after Stage #${_executedUpToStageIndex! + 1} (${_stages[_executedUpToStageIndex!].operator})'; @@ -564,7 +565,7 @@ class _StageCardState extends material.State<_StageCard> { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; final stage = widget.stage; final syntaxError = validateStage(stage); @@ -761,7 +762,7 @@ class _ExportDialogState extends material.State<_ExportDialog> { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; final code = _generateCode(); return QueryaModalDialog( diff --git a/lib/features/mongodb/mongo_collections_view.dart b/lib/features/mongodb/mongo_collections_view.dart index 19937831..a988c7f5 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:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/actions/querya_schema_object.dart'; import 'package:querya_desktop/core/actions/querya_schema_object_cache.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; @@ -8,8 +9,6 @@ import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Displays the list of collections in a MongoDB database. @@ -214,7 +213,7 @@ class _MongoCollectionsViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (_loading) { return const material.Center( @@ -259,8 +258,8 @@ class _MongoCollectionsViewState extends material.State { ); } - Widget _buildCard(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildCard(QueryaUiColors cs) { + final shadcnCs = context.colors; return material.Container( decoration: material.BoxDecoration( color: cs.card, @@ -369,7 +368,7 @@ class _MongoCollectionsViewState extends material.State { itemBuilder: (context, i) { return _CollectionRow( collection: _collections[i], - colorScheme: cs, + colors: cs, onView: () => widget.onCollectionTap?.call(_collections[i].name), onDrop: () => _dropCollection(_collections[i].name), @@ -388,19 +387,19 @@ class _MongoCollectionsViewState extends material.State { class _CollectionRow extends StatelessWidget { const _CollectionRow({ required this.collection, - required this.colorScheme, + required this.colors, required this.onView, required this.onDrop, }); final _CollectionInfo collection; - final ColorScheme colorScheme; + final QueryaUiColors colors; final VoidCallback onView; final VoidCallback onDrop; @override Widget build(BuildContext context) { - final cs = colorScheme; + final cs = colors; return material.Material( color: Colors.transparent, child: material.InkWell( diff --git a/lib/features/mongodb/mongo_create_index_dialog.dart b/lib/features/mongodb/mongo_create_index_dialog.dart index d87d35f4..582f22a7 100644 --- a/lib/features/mongodb/mongo_create_index_dialog.dart +++ b/lib/features/mongodb/mongo_create_index_dialog.dart @@ -189,7 +189,7 @@ class _MongoCreateIndexDialogState @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return QueryaModalDialog( title: const Text('Create Index'), diff --git a/lib/features/mongodb/mongo_databases_view.dart b/lib/features/mongodb/mongo_databases_view.dart index 53da224b..9896d5e2 100644 --- a/lib/features/mongodb/mongo_databases_view.dart +++ b/lib/features/mongodb/mongo_databases_view.dart @@ -1,12 +1,11 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// View that displays MongoDB databases list and server status. @@ -220,7 +219,7 @@ class _MongoDatabasesViewState extends State { @override Widget build(BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (_isLoading) { return const material.Center( @@ -272,8 +271,8 @@ class _MongoDatabasesViewState extends State { ); } - Widget _buildDatabasesCard(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildDatabasesCard(QueryaUiColors cs) { + final shadcnCs = context.colors; return material.Container( decoration: material.BoxDecoration( color: cs.card, @@ -344,7 +343,7 @@ class _MongoDatabasesViewState extends State { QueryaDivider(height: 1, color: cs.border.withValues(alpha: 0.15)), _DatabaseRow( database: _databases[i], - colorScheme: cs, + colors: cs, onView: () => widget.onDatabaseTap?.call(_databases[i].name), onDrop: () => _dropDatabase(_databases[i].name), ), @@ -367,19 +366,19 @@ class _MongoDatabasesViewState extends State { class _DatabaseRow extends StatelessWidget { const _DatabaseRow({ required this.database, - required this.colorScheme, + required this.colors, required this.onView, required this.onDrop, }); final _DatabaseInfo database; - final ColorScheme colorScheme; + final QueryaUiColors colors; final VoidCallback onView; final VoidCallback onDrop; @override Widget build(BuildContext context) { - final cs = colorScheme; + final cs = colors; return material.Material( color: Colors.transparent, child: material.InkWell( diff --git a/lib/features/mongodb/mongo_document_editor.dart b/lib/features/mongodb/mongo_document_editor.dart index 593c80e7..9f02f323 100644 --- a/lib/features/mongodb/mongo_document_editor.dart +++ b/lib/features/mongodb/mongo_document_editor.dart @@ -11,8 +11,6 @@ import 'package:querya_desktop/core/unsaved_work_registry.dart'; import 'package:querya_desktop/features/mongodb/mongo_ejson.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Full-screen JSON editor for a single MongoDB document. @@ -247,8 +245,8 @@ class _MongoDocumentEditorState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; + final shadcnCs = context.colors; final workbench = context.workbench; final editorTheme = context.editorTheme; final success = workbench.success; diff --git a/lib/features/mongodb/mongo_document_tree_view.dart b/lib/features/mongodb/mongo_document_tree_view.dart index c601fc9b..25b96daf 100644 --- a/lib/features/mongodb/mongo_document_tree_view.dart +++ b/lib/features/mongodb/mongo_document_tree_view.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; import 'package:mongo_dart/mongo_dart.dart' show ObjectId; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/theme/querya_semantic_palette.dart'; import 'package:querya_desktop/core/theme/querya_theme_scope.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; @@ -170,7 +171,7 @@ class _MongoDocumentTreeViewState extends State { @override Widget build(BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (widget.documents.isEmpty) { return material.Center( @@ -256,7 +257,7 @@ class _MongoDocumentTreeViewState extends State { Widget _buildDocumentNode( int docIndex, Map doc, - ColorScheme cs, + QueryaUiColors cs, ) { final docNodeId = 'doc_$docIndex'; final isExpanded = _expandedNodeIds.contains(docNodeId); @@ -404,7 +405,7 @@ class _MongoDocumentTreeViewState extends State { required Object keyOrIndex, required Object? value, required int depth, - required ColorScheme cs, + required QueryaUiColors cs, }) { final currentPath = appendJsonPath(parentPath, keyOrIndex); final nodeId = 'doc_${docIndex}_$currentPath'; @@ -519,7 +520,7 @@ class _MongoDocumentTreeViewState extends State { required bool isExpanded, required String jsonPath, required Object rawSubtree, - required ColorScheme cs, + required QueryaUiColors cs, required VoidCallback onToggle, required bool matchesSearch, }) { @@ -598,7 +599,7 @@ class _MongoDocumentTreeViewState extends State { required Object? value, required String jsonPath, required Map rootDoc, - required ColorScheme cs, + required QueryaUiColors cs, }) { final keyLabel = keyOrIndex is int ? '[$keyOrIndex]' : keyOrIndex.toString(); final valueDisplay = _formatLeafDisplay(value); @@ -711,7 +712,7 @@ class _MongoDocumentTreeViewState extends State { Color _leafValueColor( Object? value, - ColorScheme cs, + QueryaUiColors cs, QueryaSemanticPalette palette, ) { if (value == null) return palette.muted; diff --git a/lib/features/mongodb/mongo_documents_json_view.dart b/lib/features/mongodb/mongo_documents_json_view.dart index b4aecadb..321d411e 100644 --- a/lib/features/mongodb/mongo_documents_json_view.dart +++ b/lib/features/mongodb/mongo_documents_json_view.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; +import 'package:querya_desktop/core/theme/querya_theme_scope.dart'; import 'package:querya_desktop/core/editor/querya_code_editor.dart'; import 'package:querya_desktop/core/editor/querya_code_language.dart'; import 'package:querya_desktop/core/editor/syntax_highlight_service.dart'; @@ -63,7 +64,7 @@ class _MongoDocumentsJsonViewState extends State { @override Widget build(BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (widget.documents.isEmpty) { return material.Center( diff --git a/lib/features/mongodb/mongo_documents_table_view.dart b/lib/features/mongodb/mongo_documents_table_view.dart index 8a0786a7..54c01eb8 100644 --- a/lib/features/mongodb/mongo_documents_table_view.dart +++ b/lib/features/mongodb/mongo_documents_table_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; import 'package:mongo_dart/mongo_dart.dart' show ObjectId; +import 'package:querya_desktop/core/theme/querya_theme_scope.dart'; import 'package:querya_desktop/features/mongodb/mongo_ejson.dart'; import 'package:querya_desktop/features/workspace/result_grid_view.dart'; import 'package:querya_desktop/shared/widgets/app_toast.dart'; @@ -160,7 +161,7 @@ class _MongoDocumentsTableViewState extends State { @override Widget build(BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (widget.documents.isEmpty || _gridData.columns.isEmpty) { return material.Center( diff --git a/lib/features/mongodb/mongo_documents_view.dart b/lib/features/mongodb/mongo_documents_view.dart index 190c1143..7caf2c0a 100644 --- a/lib/features/mongodb/mongo_documents_view.dart +++ b/lib/features/mongodb/mongo_documents_view.dart @@ -1,6 +1,7 @@ import 'dart:async' show unawaited; import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; @@ -15,8 +16,6 @@ import 'package:querya_desktop/features/mongodb/mongo_field_codec.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/features/workspace/grid_cell_popover_inspector.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; const _defaultLimit = 25; @@ -369,7 +368,7 @@ class _MongoDocumentsViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (_loading && _documents.isEmpty) { return const material.Center( @@ -425,11 +424,11 @@ class _MongoDocumentsViewState extends material.State { itemCount: _documents.length, separatorBuilder: (_, __) => const Gap(8), itemBuilder: (context, i) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final shadcnCs = context.colors; return _DocumentCard( document: _documents[i], index: _skip + i, - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, onView: () => widget.onDocumentTap?.call(_documents[i]), @@ -447,8 +446,8 @@ class _MongoDocumentsViewState extends material.State { ); } - Widget _buildFilterBar(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildFilterBar(QueryaUiColors cs) { + final shadcnCs = context.colors; return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 10), @@ -572,7 +571,7 @@ class _MongoDocumentsViewState extends material.State { ); } - Widget _buildErrorBanner(ColorScheme cs) { + Widget _buildErrorBanner(QueryaUiColors cs) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 8), color: cs.destructive.withValues(alpha: 0.1), @@ -597,8 +596,8 @@ class _MongoDocumentsViewState extends material.State { ); } - Widget _buildPaginationBar(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildPaginationBar(QueryaUiColors cs) { + final shadcnCs = context.colors; final currentPage = (_skip / _limit).floor() + 1; final total = _totalCount; final shown = _skip + _documents.length; @@ -667,7 +666,7 @@ class _DocumentCard extends StatefulWidget { const _DocumentCard({ required this.document, required this.index, - required this.colorScheme, + required this.colors, required this.shadcnCs, required this.onView, required this.onDelete, @@ -676,8 +675,8 @@ class _DocumentCard extends StatefulWidget { final Map document; final int index; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final VoidCallback onView; final VoidCallback onDelete; final ValueChanged onInspectField; @@ -710,7 +709,7 @@ class _DocumentCardState extends State<_DocumentCard> { @override Widget build(BuildContext context) { - final cs = widget.colorScheme; + final cs = widget.colors; final scs = widget.shadcnCs; final idStr = widget.document['_id']?.toString() ?? '—'; @@ -788,7 +787,7 @@ class _DocumentCardState extends State<_DocumentCard> { child: _expanded ? MongoFieldList( document: widget.document, - colorScheme: cs, + colors: cs, shadcnCs: scs, onInspectField: widget.onInspectField, ) @@ -823,14 +822,14 @@ class MongoFieldList extends StatelessWidget { const MongoFieldList({ super.key, required this.document, - required this.colorScheme, + required this.colors, required this.shadcnCs, required this.onInspectField, }); final Map document; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final ValueChanged onInspectField; Widget _buildFieldRow(String key) { @@ -856,7 +855,7 @@ class MongoFieldList extends StatelessWidget { fontFamily: QueryaTypography.mono, fontFamilyFallback: QueryaTypography.monoFontFamilyFallback, fontWeight: material.FontWeight.w600, - color: colorScheme.foreground, + color: colors.foreground, ), ), ), @@ -888,7 +887,7 @@ class MongoFieldList extends StatelessWidget { Widget _buildDivider() => QueryaDivider( height: 1, - color: colorScheme.border.withValues(alpha: 0.2), + color: colors.border.withValues(alpha: 0.2), ); @override @@ -897,10 +896,10 @@ class MongoFieldList extends StatelessWidget { if (fields.isEmpty) return const material.SizedBox.shrink(); final decoration = material.BoxDecoration( - color: colorScheme.muted.withValues(alpha: 0.15), + color: colors.muted.withValues(alpha: 0.15), borderRadius: material.BorderRadius.circular(6), border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3), + color: colors.border.withValues(alpha: 0.3), ), ); diff --git a/lib/features/mongodb/mongo_explorer_view.dart b/lib/features/mongodb/mongo_explorer_view.dart index 8fe0e31b..ebb5b2f4 100644 --- a/lib/features/mongodb/mongo_explorer_view.dart +++ b/lib/features/mongodb/mongo_explorer_view.dart @@ -7,8 +7,6 @@ import 'package:querya_desktop/core/motion/querya_switching_body.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/core/unsaved_work_guard.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'mongo_aggregation_workspace.dart'; import 'mongo_collections_view.dart'; @@ -303,7 +301,7 @@ class _MongoExplorerViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; // Loading state if (_connecting) { @@ -513,7 +511,7 @@ class _BreadcrumbBar extends StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( constraints: const material.BoxConstraints(minHeight: 44), padding: const material.EdgeInsets.symmetric(horizontal: 16), @@ -599,7 +597,7 @@ class _CrumbChip extends material.StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; final child = isLast ? Text(label).semiBold().small() : Text(label, diff --git a/lib/features/mongodb/mongo_indexes_view.dart b/lib/features/mongodb/mongo_indexes_view.dart index 396ed3fa..b55f60fe 100644 --- a/lib/features/mongodb/mongo_indexes_view.dart +++ b/lib/features/mongodb/mongo_indexes_view.dart @@ -1,6 +1,7 @@ import 'dart:async' show unawaited; import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; @@ -188,7 +189,7 @@ class _MongoIndexesViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( color: cs.background, @@ -263,7 +264,7 @@ class _MongoIndexesViewState extends material.State { ); } - material.Widget _buildHeader(ColorScheme cs) { + material.Widget _buildHeader(QueryaUiColors cs) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 8), color: cs.card, @@ -336,7 +337,7 @@ class _IndexCard extends material.StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return Card( child: material.Padding( diff --git a/lib/features/mongodb/mongo_query_workspace.dart b/lib/features/mongodb/mongo_query_workspace.dart index d17a4692..b43431cd 100644 --- a/lib/features/mongodb/mongo_query_workspace.dart +++ b/lib/features/mongodb/mongo_query_workspace.dart @@ -2,6 +2,7 @@ import 'dart:async' show unawaited; import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/editor/querya_code_editor.dart'; import 'package:querya_desktop/core/editor/querya_code_language.dart'; @@ -220,7 +221,7 @@ class _MongoQueryWorkspaceState extends material.State { await showAppDialog( context: context, builder: (ctx) { - final cs = Theme.of(ctx).colorScheme; + final cs = ctx.colors; return QueryaModalDialog( title: const Text('MQL Query History'), description: Text('${widget.database} — recent queries'), @@ -287,8 +288,7 @@ class _MongoQueryWorkspaceState extends material.State { @override material.Widget build(material.BuildContext context) { - final theme = Theme.of(context); - final cs = theme.colorScheme; + final cs = context.colors; final tab = _activeTab; return material.CallbackShortcuts( @@ -349,7 +349,7 @@ class _MongoQueryWorkspaceState extends material.State { ); } - material.Widget _buildTopBar(ColorScheme cs) { + material.Widget _buildTopBar(QueryaUiColors cs) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 8), color: cs.card, @@ -399,7 +399,7 @@ class _MongoQueryWorkspaceState extends material.State { ); } - material.Widget _buildTabStrip(ColorScheme cs) { + material.Widget _buildTabStrip(QueryaUiColors cs) { return material.Container( height: 38, padding: const material.EdgeInsets.symmetric(horizontal: 8), @@ -415,7 +415,7 @@ class _MongoQueryWorkspaceState extends material.State { ); } - material.Widget _buildResultBar(ColorScheme cs, _QueryTabSession tab) { + material.Widget _buildResultBar(QueryaUiColors cs, _QueryTabSession tab) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 6), color: cs.card, @@ -466,7 +466,7 @@ class _MongoQueryWorkspaceState extends material.State { ); } - material.Widget _buildResultsView(ColorScheme cs, _QueryTabSession tab) { + material.Widget _buildResultsView(QueryaUiColors cs, _QueryTabSession tab) { if (tab.isLoading) { return const material.Center( child: QueryaSpinner( diff --git a/lib/features/mongodb/mongo_stats_view.dart b/lib/features/mongodb/mongo_stats_view.dart index eeb4dc88..2d3b9d16 100644 --- a/lib/features/mongodb/mongo_stats_view.dart +++ b/lib/features/mongodb/mongo_stats_view.dart @@ -1,14 +1,13 @@ import 'dart:math' as math; import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/motion/polling_controller.dart'; import 'package:querya_desktop/core/util/deep_collection_equals.dart'; import 'package:querya_desktop/core/database/mongodb_connection.dart'; import 'package:querya_desktop/core/database/mongodb_service.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; const _defaultAutoRefresh = Duration(seconds: 3); @@ -196,7 +195,7 @@ class _MongoStatsViewState extends material.State @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return PollStaleOverlay( status: polling.status, @@ -220,7 +219,7 @@ class _MongoStatsViewState extends material.State } material.Widget _buildBody( - material.BuildContext context, shadcn.ColorScheme cs) { + material.BuildContext context, QueryaUiColors cs) { if (_loading) { return const material.Center( child: QueryaSpinner( @@ -358,7 +357,7 @@ class _MongoStatsViewState extends material.State } material.Widget _header(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; final last = _lastFetchedAt; return material.Column( crossAxisAlignment: material.CrossAxisAlignment.stretch, @@ -486,7 +485,7 @@ class _MongoStatsViewState extends material.State material.Widget _summaryChips( material.BuildContext context, Map status) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; final version = _getString(status, 'version') ?? '—'; final uptime = _formatUptime(_getInt(status, 'uptime') ?? 0); final connections = _getNestedInt(status, 'connections', 'current') ?? 0; @@ -565,7 +564,7 @@ class _MongoStatsViewState extends material.State double? minHeight, bool stretchBody = false, }) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( width: double.infinity, constraints: minHeight != null @@ -759,7 +758,7 @@ class _MongoStatsViewState extends material.State material.Widget _metricRow( material.BuildContext context, String label, String value) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Padding( padding: const material.EdgeInsets.symmetric(vertical: 6), child: material.Row( diff --git a/lib/features/mongodb/mongodb_connection_form.dart b/lib/features/mongodb/mongodb_connection_form.dart index 30c1ddd0..224c148a 100644 --- a/lib/features/mongodb/mongodb_connection_form.dart +++ b/lib/features/mongodb/mongodb_connection_form.dart @@ -368,7 +368,7 @@ class _MongoConnectionFormContentState @override material.Widget build(material.BuildContext context) { - final theme = Theme.of(context).colorScheme; + final theme = context.colors; return QueryaDialogCard( constraints: WindowLayout.dialogConstraints( diff --git a/lib/features/redis/editors/redis_hash_editor.dart b/lib/features/redis/editors/redis_hash_editor.dart index 098914f0..00c85a7a 100644 --- a/lib/features/redis/editors/redis_hash_editor.dart +++ b/lib/features/redis/editors/redis_hash_editor.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Editor for a Redis hash: HSET add bar plus a field/value list. @@ -15,7 +14,7 @@ class RedisHashEditor extends material.StatefulWidget { required this.isReadOnly, required this.onSet, required this.onDelete, - required this.colorScheme, + required this.colors, required this.shadcnCs, this.footer, }); @@ -25,8 +24,8 @@ class RedisHashEditor extends material.StatefulWidget { final bool isReadOnly; final void Function(String field, String value) onSet; final void Function(RedisBulkValue field) onDelete; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final material.Widget? footer; @override @@ -99,7 +98,7 @@ class _RedisHashEditorState extends material.State { onDelete: widget.isReadOnly ? null : () => widget.onDelete(entry.key), - colorScheme: widget.colorScheme, + colors: widget.colors, shadcnCs: widget.shadcnCs, ); }, @@ -117,25 +116,25 @@ class RedisFieldRow extends StatelessWidget { required this.field, required this.value, this.onDelete, - required this.colorScheme, + required this.colors, required this.shadcnCs, }); final String field; final String value; final VoidCallback? onDelete; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; @override material.Widget build(material.BuildContext context) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: material.BoxDecoration( - color: colorScheme.card, + color: colors.card, borderRadius: material.BorderRadius.circular(6), border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3)), + color: colors.border.withValues(alpha: 0.3)), ), child: material.Row( children: [ @@ -161,7 +160,7 @@ class RedisFieldRow extends StatelessWidget { fontSize: 12, fontFamily: QueryaTypography.mono, fontFamilyFallback: QueryaTypography.monoFontFamilyFallback, - color: colorScheme.foreground, + color: colors.foreground, ), ), ), diff --git a/lib/features/redis/editors/redis_list_editor.dart b/lib/features/redis/editors/redis_list_editor.dart index 6cb0b9c4..02ec7673 100644 --- a/lib/features/redis/editors/redis_list_editor.dart +++ b/lib/features/redis/editors/redis_list_editor.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Editor for a Redis list: RPUSH add bar plus an indexed item list with @@ -17,7 +16,7 @@ class RedisListEditor extends material.StatefulWidget { required this.onPush, required this.onSet, required this.onRemove, - required this.colorScheme, + required this.colors, required this.shadcnCs, this.footer, }); @@ -32,8 +31,8 @@ class RedisListEditor extends material.StatefulWidget { RedisBulkValue? expectedCurrent, }) onSet; final void Function(int index, RedisBulkValue item) onRemove; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final material.Widget? footer; @override @@ -112,7 +111,7 @@ class _RedisListEditorState extends material.State { onDelete: widget.isReadOnly ? null : () => widget.onRemove(i, items[i]), - colorScheme: widget.colorScheme, + colors: widget.colors, shadcnCs: widget.shadcnCs, ), ), @@ -196,7 +195,7 @@ class RedisIndexedValueRow extends StatelessWidget { this.isBinary = false, this.onEdit, this.onDelete, - required this.colorScheme, + required this.colors, required this.shadcnCs, }); @@ -205,18 +204,18 @@ class RedisIndexedValueRow extends StatelessWidget { final bool isBinary; final VoidCallback? onEdit; final VoidCallback? onDelete; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; @override material.Widget build(material.BuildContext context) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: material.BoxDecoration( - color: colorScheme.card, + color: colors.card, borderRadius: material.BorderRadius.circular(6), border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3)), + color: colors.border.withValues(alpha: 0.3)), ), child: material.Row( children: [ @@ -239,7 +238,7 @@ class RedisIndexedValueRow extends StatelessWidget { fontSize: 12, fontFamily: QueryaTypography.mono, fontFamilyFallback: QueryaTypography.monoFontFamilyFallback, - color: colorScheme.foreground, + color: colors.foreground, ), ), ), diff --git a/lib/features/redis/editors/redis_set_editor.dart b/lib/features/redis/editors/redis_set_editor.dart index 76c57e06..680e409d 100644 --- a/lib/features/redis/editors/redis_set_editor.dart +++ b/lib/features/redis/editors/redis_set_editor.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Editor for a Redis set: SADD add bar plus a member list. @@ -15,7 +14,7 @@ class RedisSetEditor extends material.StatefulWidget { required this.isReadOnly, required this.onAdd, required this.onRemove, - required this.colorScheme, + required this.colors, required this.shadcnCs, this.footer, }); @@ -25,8 +24,8 @@ class RedisSetEditor extends material.StatefulWidget { final bool isReadOnly; final void Function(String member) onAdd; final void Function(RedisBulkValue member) onRemove; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final material.Widget? footer; @override @@ -85,7 +84,7 @@ class _RedisSetEditorState extends material.State { onDelete: widget.isReadOnly ? null : () => widget.onRemove(members[index]), - colorScheme: widget.colorScheme, + colors: widget.colors, shadcnCs: widget.shadcnCs, ), ), @@ -101,24 +100,24 @@ class RedisMemberRow extends StatelessWidget { super.key, required this.member, this.onDelete, - required this.colorScheme, + required this.colors, required this.shadcnCs, }); final String member; final VoidCallback? onDelete; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; @override material.Widget build(material.BuildContext context) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: material.BoxDecoration( - color: colorScheme.card, + color: colors.card, borderRadius: material.BorderRadius.circular(6), border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3)), + color: colors.border.withValues(alpha: 0.3)), ), child: material.Row( children: [ @@ -129,7 +128,7 @@ class RedisMemberRow extends StatelessWidget { fontSize: 12, fontFamily: QueryaTypography.mono, fontFamilyFallback: QueryaTypography.monoFontFamilyFallback, - color: colorScheme.foreground, + color: colors.foreground, ), ), ), diff --git a/lib/features/redis/editors/redis_string_editor.dart b/lib/features/redis/editors/redis_string_editor.dart index 7972c1ea..dcd5058b 100644 --- a/lib/features/redis/editors/redis_string_editor.dart +++ b/lib/features/redis/editors/redis_string_editor.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; @@ -14,14 +15,14 @@ class RedisStringEditor extends material.StatelessWidget { required this.controller, required this.isReadOnly, required this.onSave, - required this.colorScheme, + required this.colors, }); final RedisBulkValue? value; final material.TextEditingController controller; final bool isReadOnly; final VoidCallback onSave; - final ColorScheme colorScheme; + final QueryaUiColors colors; @override material.Widget build(material.BuildContext context) { @@ -82,7 +83,7 @@ class RedisStringEditor extends material.StatelessWidget { constraints: const material.BoxConstraints(minHeight: 200), decoration: material.BoxDecoration( border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3)), + color: colors.border.withValues(alpha: 0.3)), borderRadius: material.BorderRadius.circular(8), ), child: material.TextField( diff --git a/lib/features/redis/editors/redis_zset_editor.dart b/lib/features/redis/editors/redis_zset_editor.dart index 6410ead7..b1bfcbfa 100644 --- a/lib/features/redis/editors/redis_zset_editor.dart +++ b/lib/features/redis/editors/redis_zset_editor.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Editor for a Redis sorted set: ZADD add bar plus a scored member list. @@ -15,7 +14,7 @@ class RedisZsetEditor extends material.StatefulWidget { required this.isReadOnly, required this.onAdd, required this.onRemove, - required this.colorScheme, + required this.colors, required this.shadcnCs, this.footer, }); @@ -25,8 +24,8 @@ class RedisZsetEditor extends material.StatefulWidget { final bool isReadOnly; final void Function(String member, double score) onAdd; final void Function(RedisBulkValue member) onRemove; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final material.Widget? footer; @override @@ -100,7 +99,7 @@ class _RedisZsetEditorState extends material.State { onDelete: widget.isReadOnly ? null : () => widget.onRemove(member), - colorScheme: widget.colorScheme, + colors: widget.colors, shadcnCs: widget.shadcnCs, ); }, @@ -118,25 +117,25 @@ class RedisScoredMemberRow extends StatelessWidget { required this.member, required this.score, this.onDelete, - required this.colorScheme, + required this.colors, required this.shadcnCs, }); final String member; final double score; final VoidCallback? onDelete; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; @override material.Widget build(material.BuildContext context) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: material.BoxDecoration( - color: colorScheme.card, + color: colors.card, borderRadius: material.BorderRadius.circular(6), border: material.Border.all( - color: colorScheme.border.withValues(alpha: 0.3)), + color: colors.border.withValues(alpha: 0.3)), ), child: material.Row( children: [ @@ -164,7 +163,7 @@ class RedisScoredMemberRow extends StatelessWidget { fontSize: 12, fontFamily: QueryaTypography.mono, fontFamilyFallback: QueryaTypography.monoFontFamilyFallback, - color: colorScheme.foreground, + color: colors.foreground, ), ), ), diff --git a/lib/features/redis/redis_cli_workspace.dart b/lib/features/redis/redis_cli_workspace.dart index f3f1fdd9..85e1477f 100644 --- a/lib/features/redis/redis_cli_workspace.dart +++ b/lib/features/redis/redis_cli_workspace.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:flutter/material.dart' as material; import 'package:flutter/services.dart'; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; @@ -581,7 +582,7 @@ class _RedisCliWorkspaceState extends material.State { @override Widget build(BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( color: cs.card, @@ -787,7 +788,7 @@ class _RedisCliWorkspaceState extends material.State { ); } - Widget _buildEntryItem(RedisCliEntry entry, ColorScheme cs) { + Widget _buildEntryItem(RedisCliEntry entry, QueryaUiColors cs) { return material.Container( margin: const material.EdgeInsets.only(bottom: 10), padding: const material.EdgeInsets.all(8), diff --git a/lib/features/redis/redis_connection_form.dart b/lib/features/redis/redis_connection_form.dart index 91033492..7875531d 100644 --- a/lib/features/redis/redis_connection_form.dart +++ b/lib/features/redis/redis_connection_form.dart @@ -302,7 +302,7 @@ class _RedisConnectionFormContentState @override material.Widget build(material.BuildContext context) { - final theme = Theme.of(context).colorScheme; + final theme = context.colors; return QueryaDialogCard( constraints: WindowLayout.dialogConstraints( diff --git a/lib/features/redis/redis_databases_view.dart b/lib/features/redis/redis_databases_view.dart index e9a7968c..b61ecad0 100644 --- a/lib/features/redis/redis_databases_view.dart +++ b/lib/features/redis/redis_databases_view.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; import 'package:querya_desktop/core/database/redis_info.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Shows all Redis databases (db0–dbN) with key counts. @@ -95,8 +94,8 @@ class _RedisDatabasesViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; + final shadcnCs = context.colors; if (_loading) { return const material.Center( @@ -186,7 +185,7 @@ class _RedisDatabasesViewState extends material.State { for (final db in dbsWithData) _DatabaseTile( db: db, - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, onTap: () => widget.onDatabaseTap?.call(db.index), ), @@ -200,7 +199,7 @@ class _RedisDatabasesViewState extends material.State { for (final db in dbsEmpty) _DatabaseTile( db: db, - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, onTap: () => widget.onDatabaseTap?.call(db.index), ), @@ -235,19 +234,19 @@ class _DbInfo { class _DatabaseTile extends material.StatelessWidget { const _DatabaseTile({ required this.db, - required this.colorScheme, + required this.colors, required this.shadcnCs, required this.onTap, }); final _DbInfo db; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final material.VoidCallback onTap; @override material.Widget build(material.BuildContext context) { - final cs = colorScheme; + final cs = colors; final db = this.db; return material.Material( diff --git a/lib/features/redis/redis_explorer_view.dart b/lib/features/redis/redis_explorer_view.dart index 131a63d4..69993981 100644 --- a/lib/features/redis/redis_explorer_view.dart +++ b/lib/features/redis/redis_explorer_view.dart @@ -7,8 +7,6 @@ import 'package:querya_desktop/core/database/redis_service.dart'; import 'package:querya_desktop/core/motion/querya_switching_body.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'redis_keys_view.dart'; import 'redis_key_editor.dart'; @@ -259,7 +257,7 @@ class _RedisExplorerViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; // Loading state if (_connecting) { @@ -444,7 +442,7 @@ class _BreadcrumbBar extends StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( constraints: const material.BoxConstraints(minHeight: 44), padding: const material.EdgeInsets.symmetric(horizontal: 16), @@ -565,7 +563,7 @@ class _CrumbChip extends material.StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; final child = isLast ? Text(label).semiBold().small() : Text(label, diff --git a/lib/features/redis/redis_key_editor.dart b/lib/features/redis/redis_key_editor.dart index ddd9e340..a9864419 100644 --- a/lib/features/redis/redis_key_editor.dart +++ b/lib/features/redis/redis_key_editor.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; @@ -10,8 +11,6 @@ import 'package:querya_desktop/features/redis/editors/redis_string_editor.dart'; import 'package:querya_desktop/features/redis/editors/redis_zset_editor.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; /// Viewer / editor for a single Redis key. Type-aware: string, hash, @@ -618,8 +617,8 @@ class _RedisKeyEditorState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; + final shadcnCs = context.colors; final palette = context.semanticPalette; if (_loading) { @@ -705,7 +704,7 @@ class _RedisKeyEditorState extends material.State { ); } - Widget _buildHeader(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildHeader(QueryaUiColors cs, QueryaUiColors scs) { final typeCol = _typeColor(_effectiveType); return material.Container( padding: @@ -834,7 +833,7 @@ class _RedisKeyEditorState extends material.State { ); } - Widget _buildContent(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildContent(QueryaUiColors cs, QueryaUiColors scs) { switch (_effectiveType) { case 'string': return _buildStringEditor(cs); @@ -871,30 +870,30 @@ class _RedisKeyEditorState extends material.State { // ─── Type editors ─────────────────────────────────────────────────────── - Widget _buildStringEditor(ColorScheme cs) { + Widget _buildStringEditor(QueryaUiColors cs) { return RedisStringEditor( value: _stringValue, controller: _stringController, isReadOnly: widget.isReadOnly, onSave: _saveString, - colorScheme: cs, + colors: cs, ); } - Widget _buildHashEditor(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildHashEditor(QueryaUiColors cs, QueryaUiColors scs) { return RedisHashEditor( heading: _collectionHeading('Hash fields'), entries: _hashValue.entries.toList(), isReadOnly: widget.isReadOnly, onSet: _hashSet, onDelete: _hashDel, - colorScheme: cs, + colors: cs, shadcnCs: scs, footer: _hasMore ? _loadMoreTile() : null, ); } - Widget _buildListEditor(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildListEditor(QueryaUiColors cs, QueryaUiColors scs) { return RedisListEditor( heading: _collectionHeading('List items'), items: _listValue, @@ -902,33 +901,33 @@ class _RedisKeyEditorState extends material.State { onPush: _listPush, onSet: _listSet, onRemove: _listRemove, - colorScheme: cs, + colors: cs, shadcnCs: scs, footer: _hasMore ? _loadMoreTile() : null, ); } - Widget _buildSetEditor(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildSetEditor(QueryaUiColors cs, QueryaUiColors scs) { return RedisSetEditor( heading: _collectionHeading('Set members'), members: _setValue, isReadOnly: widget.isReadOnly, onAdd: _setAdd, onRemove: _setRemove, - colorScheme: cs, + colors: cs, shadcnCs: scs, footer: _hasMore ? _loadMoreTile() : null, ); } - Widget _buildZsetEditor(ColorScheme cs, shadcn.ColorScheme scs) { + Widget _buildZsetEditor(QueryaUiColors cs, QueryaUiColors scs) { return RedisZsetEditor( heading: _collectionHeading('Sorted set'), members: _zsetValue, isReadOnly: widget.isReadOnly, onAdd: _zsetAdd, onRemove: _zsetRemove, - colorScheme: cs, + colors: cs, shadcnCs: scs, footer: _hasMore ? _loadMoreTile() : null, ); diff --git a/lib/features/redis/redis_keys_view.dart b/lib/features/redis/redis_keys_view.dart index 66275540..043ed6c8 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:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/destructive_sql_detector.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; @@ -6,8 +7,6 @@ import 'package:querya_desktop/core/theme/querya_semantic_palette.dart'; import 'package:querya_desktop/core/theme/querya_typography.dart'; import 'package:querya_desktop/features/workspace/destructive_query_dialog.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'redis_key_tree_engine.dart'; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; @@ -296,7 +295,7 @@ class _RedisKeysViewState extends material.State { @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; if (_loading && _keys.isEmpty) { return const material.Center( @@ -337,7 +336,7 @@ class _RedisKeysViewState extends material.State { cacheExtent: 400, itemCount: _keys.length + (_hasMore ? 1 : 0), itemBuilder: (context, i) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final shadcnCs = context.colors; if (i >= _keys.length) { return material.Padding( padding: const material.EdgeInsets.only(top: 12), @@ -354,7 +353,7 @@ class _RedisKeysViewState extends material.State { padding: EdgeInsets.only(top: i > 0 ? 4 : 0), child: _KeyTile( keyInfo: _keys[i], - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, palette: context.semanticPalette, onTap: () => widget.onKeyTap?.call(_keys[i].name, _keys[i].type), @@ -372,7 +371,7 @@ class _RedisKeysViewState extends material.State { cacheExtent: 400, itemCount: visibleItems.length + (_hasMore ? 1 : 0), itemBuilder: (context, i) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + final shadcnCs = context.colors; if (i >= visibleItems.length) { return material.Padding( padding: const material.EdgeInsets.only(top: 12), @@ -393,7 +392,7 @@ class _RedisKeysViewState extends material.State { folder: item.folder, isExpanded: item.isExpanded, depth: item.depth, - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, palette: context.semanticPalette, onToggle: () { @@ -417,7 +416,7 @@ class _RedisKeysViewState extends material.State { keyInfo: item.leaf.keyInfo, displayName: item.leaf.name, indent: 16.0 * item.depth, - colorScheme: cs, + colors: cs, shadcnCs: shadcnCs, palette: context.semanticPalette, onTap: () => widget.onKeyTap?.call( @@ -447,8 +446,8 @@ class _RedisKeysViewState extends material.State { ); } - Widget _buildFilterBar(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildFilterBar(QueryaUiColors cs) { + final shadcnCs = context.colors; return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 10), @@ -593,7 +592,7 @@ class _RedisKeysViewState extends material.State { ); } - Widget _buildErrorBanner(ColorScheme cs) { + Widget _buildErrorBanner(QueryaUiColors cs) { return material.Container( padding: const material.EdgeInsets.symmetric(horizontal: 16, vertical: 8), color: cs.destructive.withValues(alpha: 0.1), @@ -618,8 +617,8 @@ class _RedisKeysViewState extends material.State { ); } - Widget _buildStatusBar(ColorScheme cs) { - final shadcnCs = shadcn.Theme.of(context).colorScheme; + Widget _buildStatusBar(QueryaUiColors cs) { + final shadcnCs = context.colors; return material.Container( constraints: const material.BoxConstraints(minHeight: 44), padding: const material.EdgeInsets.symmetric(horizontal: 16), @@ -692,7 +691,7 @@ class _FolderTile extends material.StatelessWidget { required this.folder, required this.isExpanded, required this.depth, - required this.colorScheme, + required this.colors, required this.shadcnCs, required this.palette, required this.onToggle, @@ -702,15 +701,15 @@ class _FolderTile extends material.StatelessWidget { final RedisKeyFolderNode folder; final bool isExpanded; final int depth; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final QueryaSemanticPalette palette; final material.VoidCallback onToggle; final material.VoidCallback? onDelete; @override material.Widget build(material.BuildContext context) { - final cs = colorScheme; + final cs = colors; final indent = 16.0 * depth; return material.Material( @@ -800,7 +799,7 @@ onPressed: onDelete, class _KeyTile extends material.StatelessWidget { const _KeyTile({ required this.keyInfo, - required this.colorScheme, + required this.colors, required this.shadcnCs, required this.palette, required this.onTap, @@ -810,8 +809,8 @@ class _KeyTile extends material.StatelessWidget { }); final RedisKeyInfo keyInfo; - final ColorScheme colorScheme; - final shadcn.ColorScheme shadcnCs; + final QueryaUiColors colors; + final QueryaUiColors shadcnCs; final QueryaSemanticPalette palette; final material.VoidCallback onTap; final material.VoidCallback? onDelete; @@ -863,7 +862,7 @@ class _KeyTile extends material.StatelessWidget { @override material.Widget build(material.BuildContext context) { - final cs = colorScheme; + final cs = colors; final ki = keyInfo; final typeCol = _typeColor(ki.type, palette); diff --git a/lib/features/redis/redis_view.dart b/lib/features/redis/redis_view.dart index 5bb5a87f..c6716937 100644 --- a/lib/features/redis/redis_view.dart +++ b/lib/features/redis/redis_view.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:math' as math; import 'package:flutter/material.dart' as material; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/motion/polling_controller.dart'; import 'package:querya_desktop/core/util/deep_collection_equals.dart'; import 'package:querya_desktop/core/database/redis_connection.dart'; @@ -9,8 +10,6 @@ import 'package:querya_desktop/core/database/redis_info.dart'; import 'package:querya_desktop/core/database/redis_service.dart'; import 'package:querya_desktop/core/storage/local_db.dart'; import 'package:querya_desktop/shared/widgets/widgets.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import 'package:querya_desktop/core/ui/querya_control_tokens.dart'; const _pollInterval = Duration(seconds: 3); @@ -215,7 +214,7 @@ class _RedisViewState extends material.State @override material.Widget build(material.BuildContext context) { - final cs = Theme.of(context).colorScheme; + final cs = context.colors; return PollStaleOverlay( status: polling.status, @@ -239,7 +238,7 @@ class _RedisViewState extends material.State } material.Widget _buildBody( - material.BuildContext context, shadcn.ColorScheme cs) { + material.BuildContext context, QueryaUiColors cs) { if (_loading) { return const material.Center( child: QueryaSpinner( @@ -405,7 +404,7 @@ class _RedisViewState extends material.State } material.Widget _header(material.BuildContext context) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Column( crossAxisAlignment: material.CrossAxisAlignment.stretch, children: [ @@ -529,7 +528,7 @@ class _RedisViewState extends material.State material.Widget _summaryChips( material.BuildContext context, RedisInfoSections info) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; final version = sectionValue(info, 'Server', 'redis_version') ?? '—'; final uptime = _formatUptime(info); final clients = sectionInt(info, 'Clients', 'connected_clients') ?? 0; @@ -608,7 +607,7 @@ class _RedisViewState extends material.State double? minHeight, bool stretchBody = false, }) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Container( width: double.infinity, constraints: minHeight != null @@ -864,7 +863,7 @@ class _RedisViewState extends material.State material.Widget _metricRow( material.BuildContext context, String label, String value) { - final cs = shadcn.Theme.of(context).colorScheme; + final cs = context.colors; return material.Padding( padding: const material.EdgeInsets.symmetric(vertical: 6), child: material.Row( diff --git a/test/features/mongodb/mongo_field_list_perf_test.dart b/test/features/mongodb/mongo_field_list_perf_test.dart index 7dff62c8..6f2937ab 100644 --- a/test/features/mongodb/mongo_field_list_perf_test.dart +++ b/test/features/mongodb/mongo_field_list_perf_test.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart' as material; import 'package:flutter_test/flutter_test.dart'; +import 'package:querya_desktop/core/theme/querya_theme_scope.dart'; import 'package:querya_desktop/features/mongodb/mongo_documents_view.dart'; -import 'package:shadcn_flutter/shadcn_flutter.dart' as shadcn - hide TextExtension; import '../../support/querya_theme_test_shell.dart'; @@ -23,11 +22,11 @@ void main() { queryaThemeTestShell( child: material.Builder( builder: (context) { - final scs = shadcn.Theme.of(context).colorScheme; + final scs = context.colors; return material.Scaffold( body: MongoFieldList( document: doc, - colorScheme: scs, + colors: scs, shadcnCs: scs, onInspectField: (k) => inspectedKey = k, ), @@ -66,11 +65,11 @@ void main() { queryaThemeTestShell( child: material.Builder( builder: (context) { - final scs = shadcn.Theme.of(context).colorScheme; + final scs = context.colors; return material.Scaffold( body: MongoFieldList( document: doc, - colorScheme: scs, + colors: scs, shadcnCs: scs, onInspectField: (_) {}, ), diff --git a/test/features/redis/redis_type_editors_test.dart b/test/features/redis/redis_type_editors_test.dart index 9a115067..48fcb2df 100644 --- a/test/features/redis/redis_type_editors_test.dart +++ b/test/features/redis/redis_type_editors_test.dart @@ -2,6 +2,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart' as material; import 'package:flutter_test/flutter_test.dart'; +import 'package:querya_desktop/core/theme/querya_theme_scope.dart'; +import 'package:querya_desktop/core/theme/querya_ui_colors.dart'; import 'package:querya_desktop/core/database/redis_bulk.dart'; import 'package:querya_desktop/features/redis/editors/redis_hash_editor.dart'; import 'package:querya_desktop/features/redis/editors/redis_list_editor.dart'; @@ -19,7 +21,7 @@ final _binary = RedisBulkValue.fromReply(Uint8List.fromList([0xff, 0xfe, 0x01])) Future _pump( WidgetTester tester, - material.Widget Function(shadcn.ColorScheme cs) editor, + material.Widget Function(QueryaUiColors cs) editor, ) async { await tester.pumpWidget( queryaThemeTestShell( @@ -29,7 +31,7 @@ Future _pump( height: 600, child: material.Builder( builder: (context) => - editor(shadcn.Theme.of(context).colorScheme), + editor(context.colors), ), ), ), @@ -57,7 +59,7 @@ void main() { controller: controller, isReadOnly: false, onSave: () => saved++, - colorScheme: cs, + colors: cs, ), ); @@ -79,7 +81,7 @@ void main() { controller: controller, isReadOnly: false, onSave: () {}, - colorScheme: cs, + colors: cs, ), ); await tester.enterText(find.byType(material.TextField), 'changed'); @@ -98,7 +100,7 @@ void main() { controller: controller, isReadOnly: true, onSave: () {}, - colorScheme: cs, + colors: cs, ), ); @@ -121,7 +123,7 @@ void main() { controller: controller, isReadOnly: false, onSave: () {}, - colorScheme: cs, + colors: cs, ), ); @@ -155,7 +157,7 @@ void main() { isReadOnly: readOnly, onSet: onSet ?? (_, __) {}, onDelete: onDelete ?? (_) {}, - colorScheme: cs, + colors: cs, shadcnCs: cs, footer: footer, ), @@ -253,7 +255,7 @@ void main() { onPush: onPush ?? (_) {}, onSet: onSet ?? (_, __, {expectedCurrent}) async {}, onRemove: onRemove ?? (_, __) {}, - colorScheme: cs, + colors: cs, shadcnCs: cs, ), ); @@ -388,7 +390,7 @@ void main() { isReadOnly: readOnly, onAdd: onAdd ?? (_) {}, onRemove: onRemove ?? (_) {}, - colorScheme: cs, + colors: cs, shadcnCs: cs, ), ); @@ -456,7 +458,7 @@ void main() { isReadOnly: readOnly, onAdd: onAdd ?? (_, __) {}, onRemove: onRemove ?? (_) {}, - colorScheme: cs, + colors: cs, shadcnCs: cs, ), ); diff --git a/test/guards/colors_through_context_test.dart b/test/guards/colors_through_context_test.dart index bb85ff6d..c7371f7b 100644 --- a/test/guards/colors_through_context_test.dart +++ b/test/guards/colors_through_context_test.dart @@ -8,6 +8,8 @@ import 'package:flutter_test/flutter_test.dart'; void main() { const migrated = [ 'lib/features/connections', + 'lib/features/mongodb', + 'lib/features/redis', ]; final banned = RegExp(r'\bcolorScheme\b|\bTheme\.of\(|\bColorScheme\b'); diff --git a/test/guards/shadcn_imports_ratchet_test.dart b/test/guards/shadcn_imports_ratchet_test.dart index 21f75833..dd9d88a2 100644 --- a/test/guards/shadcn_imports_ratchet_test.dart +++ b/test/guards/shadcn_imports_ratchet_test.dart @@ -32,26 +32,11 @@ void main() { 'lib/features/erd/widgets/erd_table_menu.dart', 'lib/features/extensions/extension_stats_view.dart', 'lib/features/main_screen/querya_window_title_bar.dart', - 'lib/features/mongodb/mongo_collections_view.dart', - 'lib/features/mongodb/mongo_databases_view.dart', - 'lib/features/mongodb/mongo_document_editor.dart', 'lib/features/mongodb/mongo_document_tree_view.dart', 'lib/features/mongodb/mongo_documents_json_view.dart', 'lib/features/mongodb/mongo_documents_table_view.dart', - 'lib/features/mongodb/mongo_documents_view.dart', - 'lib/features/mongodb/mongo_explorer_view.dart', - 'lib/features/mongodb/mongo_stats_view.dart', 'lib/features/mysql/mysql_stats_view.dart', 'lib/features/postgresql/postgres_stats_view.dart', - 'lib/features/redis/editors/redis_hash_editor.dart', - 'lib/features/redis/editors/redis_list_editor.dart', - 'lib/features/redis/editors/redis_set_editor.dart', - 'lib/features/redis/editors/redis_zset_editor.dart', - 'lib/features/redis/redis_databases_view.dart', - 'lib/features/redis/redis_explorer_view.dart', - 'lib/features/redis/redis_key_editor.dart', - 'lib/features/redis/redis_keys_view.dart', - 'lib/features/redis/redis_view.dart', 'lib/features/settings/preferences_controls.dart', 'lib/features/settings/theme_picker_button.dart', 'lib/features/updater/update_changelog_view.dart',