From f549cb3dbabadbe1d7ef0838bcd14a2ecfc0350b Mon Sep 17 00:00:00 2001 From: ZhuchkaTriplesix Date: Mon, 13 Jul 2026 01:23:33 +0300 Subject: [PATCH] fix(ui): synchronize column width recalculation in VirtualResultGrid (#331) --- .../main_screen/result_grid_view.dart | 9 ++-- .../main_screen/results_tab_test.dart | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/features/main_screen/result_grid_view.dart b/lib/features/main_screen/result_grid_view.dart index 962027a1..1641a91d 100644 --- a/lib/features/main_screen/result_grid_view.dart +++ b/lib/features/main_screen/result_grid_view.dart @@ -63,10 +63,7 @@ class _VirtualResultGridState extends material.State { @override void didChangeDependencies() { super.didChangeDependencies(); - if (_widthsNeedUpdate) { - _columnWidths = _computeColumnWidths(); - _widthsNeedUpdate = false; - } + _widthsNeedUpdate = true; } @override @@ -106,6 +103,10 @@ class _VirtualResultGridState extends material.State { @override material.Widget build(material.BuildContext context) { + if (_widthsNeedUpdate) { + _columnWidths = _computeColumnWidths(); + _widthsNeedUpdate = false; + } final cs = Theme.of(context).colorScheme; final colCount = widget.columns.length; final rowHeight = _scaledRowHeight(context); diff --git a/test/features/main_screen/results_tab_test.dart b/test/features/main_screen/results_tab_test.dart index 7ddb99ef..2f858805 100644 --- a/test/features/main_screen/results_tab_test.dart +++ b/test/features/main_screen/results_tab_test.dart @@ -97,5 +97,46 @@ void main() { tester.widgetList(find.byType(material.Row)).length; expect(dataRowWidgets, lessThan(80)); }); + + testWidgets( + 'recalculates column widths when updated with different columns without throwing RangeError', + (tester) async { + await tester.pumpWidget( + queryaThemeTestShell( + child: const material.SizedBox( + height: 400, + width: 600, + child: VirtualResultGrid( + columns: ['id', 'name'], + rows: [ + ['1', 'Alpha'], + ], + ), + ), + ), + ); + await tester.pumpAndSettle(); + + // Now update the grid with 5 columns instead of 2 + await tester.pumpWidget( + queryaThemeTestShell( + child: const material.SizedBox( + height: 400, + width: 600, + child: VirtualResultGrid( + columns: ['id', 'name', 'email', 'status', 'created_at'], + rows: [ + ['1', 'Alpha', 'alpha@example.com', 'active', '2026-07-13'], + ], + ), + ), + ), + ); + await tester.pumpAndSettle(); + + expect(tester.takeException(), isNull); + expect(find.text('email'), findsOneWidget); + expect(find.text('created_at'), findsOneWidget); + }); }); }