Skip to content

bug(ui): fix column width state synchronization in VirtualResultGrid #331

Description

@ZhuchkaTriplesix

Описание задачи

В компоненте виртуальной таблицы результатов запросов VirtualResultGrid (lib/features/main_screen/result_grid_view.dart) обнаружена проблема управления состоянием жизненного цикла виджета при смене SQL-запросов и результатов.

Зачем

  • Предотвратить аварийное завершение (RangeError: Index out of range) или искажение верстки таблицы при выполнении последовательных SQL-запросов с разным числом и шириной колонок.
  • Обеспечить надежное и предсказуемое обновление сетки таблицы при любых изменениях входных данных.

Детали проблемы и решение

В текущей реализации _VirtualResultGridState перерасчет ширин колонок (_columnWidths) вызывается в didChangeDependencies(). При изменении входных свойств (widget.columns и widget.rows) метод didUpdateWidget выставляет флаг _widthsNeedUpdate = true. Однако в Flutter метод didChangeDependencies() не вызывается при обычном обновлении виджета родителем. В результате метод build() выполняется с устаревшим массивом _columnWidths от предыдущего запроса.

Необходимо:
Перенести проверку if (_widthsNeedUpdate) из didChangeDependencies() непосредственно в начало метода build() перед вычислением ширин и построением заголовка.

Технические требования

  • В lib/features/main_screen/result_grid_view.dart перенести проверку и перерасчет _columnWidths по флагу _widthsNeedUpdate в метод build(BuildContext context).
  • Добавить или обновить виджет-тест в test/features/main_screen/results_tab_test.dart, проверяющий смену входных колонок VirtualResultGrid (например, смена с 2 колонок на 5 колонок) без выброса RangeError.

Место в коде (ориентир)

  • lib/features/main_screen/result_grid_view.dart
  • test/features/main_screen/results_tab_test.dart

Acceptance Criteria

  • При выполнении запроса с $N$ колонками, а затем запроса с $M$ ($M > N$) колонками, таблица мгновенно и без ошибок пересчитывает ширины и отображает новый результат.
  • 100% существующих и новых тестов проходят успешно.

Scope

  • Scope: desktop
  • Component: UI / VirtualResultGrid
  • Kind: bug

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions