Flutter: Mantener scrollOffset al agregar nuevos elementos a la lista.
Tengo un CustomScrollView y en él dos SliverList, esto se debe a que cuando desplazo hacia arriba y descargo nuevos elementos en la lista, estos nuevos elementos se agregan a la lista superior y se mantiene el desplazamiento en la lista inferior (manteniéndose en la parte superior de la lista inferior) porque CustomScrollView tiene el centro en la lista inferior.
Estoy usando bloc alrededor de la vista de desplazamiento personalizada para los elementos que estoy representando.
El problema es que cuando descargo nuevos elementos en segundo plano y la persona se desplaza en la segunda lista, inmediatamente se desplaza hacia la parte superior de esa segunda lista. No quiero eso, quiero mantenerlo en su posición de desplazamiento y simplemente informarle “Oye, hay nueva información en la parte superior”.
CustomScrollView(
center: _mainListKey,
controller: widget.scrollController,
physics: const AlwaysScrollableScrollPhysics(),
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => NewElement(),
childCount: newElements?.length ?? 0,
),
),
SliverList(
key: _mainListKey,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => OldElement(),
childCount: oldElements.length,
),
),
],
),
davy.ai
Para resolver el problema de que la persona sea desplazada al inicio de la segunda lista cuando se agregan nuevos elementos al inicio de la primera lista, se puede usar el
ScrollController
para obtener la posición actual de la persona y luego volver a establecerla en esa posición después de agregar los nuevos elementos.Para hacer esto, primero debemos declarar un
ScrollController
y asignarlo a nuestraCustomScrollView
en el parámetrocontroller
. Luego, cuando agreguemos nuevos elementos a la primera lista, podemos usar la propiedadposition
delScrollController
para obtener la posición actual de la persona. Luego podemos agregar los nuevos elementos y finalmente usar el métodojumpTo
delScrollController
para volver a establecer la posición en lo que era antes.Aquí hay un ejemplo de implementación:
Esto debería mantener la posición de la persona en la segunda lista y simplemente informarles sobre la nueva información en la parte superior.