Описание задачи
В компоненте виртуальной таблицы результатов запросов 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
test/features/main_screen/results_tab_test.dart
Acceptance Criteria
Scope
- Scope:
desktop
- Component:
UI / VirtualResultGrid
- Kind:
bug
Описание задачи
В компоненте виртуальной таблицы результатов запросов
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.darttest/features/main_screen/results_tab_test.dartAcceptance Criteria
Scope
desktopUI / VirtualResultGridbug