Я примерно решил свою проблему, поэтому это решение может не сработать в других случаях.
Лучшее решение может быть
Лучшим решением может быть использование ScrollController
прослушивать и переходить к определенному смещению, вычисленному с height
элементов.
Чтобы получить height
элемента, я нашел способ сделать это в обратном вызове initState()
, но я сделал свойСписок StatelessWidget
, поэтому он не имеет initState()
.
Что я сделал
Мой случай
Так что я просто использовал соотношениеразмер элементов, чтобы получить правильное смещение.
В моем случае я должен был показать 1 или 2 элемента в строке, grid1
и grid2
соответственно.
Так что я сохранилсмещение от grid1
и grid2
до offset
и offset2
.
Тогда соотношение между offset1
и offset2
будет offset1 = offset2*4
, поскольку grid1
может отображать только 1элемент, когда grid2
может показывать 4 элемента с одинаковым пробелом.
Почему бы не просто offset
?
Я попытался использовать только одну переменную offset
, хранящуюсмещение grid1
.
Когда вызывается событие прокрутки, я рассчитал offset
, чтобы всегда держать смещение grid1
.
Однако событие прокрутки не вызывается, когда нет прокруток.
Поэтому, когда я
- переключаюсь с
grid1
на grid2
, - не выполняю прокрутку,
- переключается с
grid2
на grid1
,
значение offset
остается неизменным и распознается как смещение grid2
.
Поэтому я разделил offset1
и offset2
, чтобы сделатьуверен, какое смещение соответствует какой сетке.
С offset1
и offset2
Теперь, когда у меня есть правильные значения, которые обновляются правильно, я теперь могу установить это значениечтобы установить правильное смещение.
Когда я вызываю setState
для переключения сетки, я добавил следующие строки.
setState(() {
double offset = 0.0; // offset to be set
if(_gridCount == 2) {
_gridCount = 1;
offset = offset1; // set offset1
} else {
_gridCount = 2;
offset = offset2; // set offset2
}
_scrollController.jumpTo(offset); // set proper offset
});
И это сработало!