ScrollView anidado dentro del widget de panel deslizable

9

Tengo un widget de panel que se puede arrastrar verticalmente hacia adentro y hacia afuera desde la parte inferior de la pantalla. En ese widget de panel, hay unListView que se puede desplazar.

Lo que intento lograr es que el panel maneje el arrastre para abrir y cerrar sin que interfiera la vista de lista anidada. Una vez que el panel está abierto, la vista de lista se desplaza y si la vista de lista se desplaza hacia abajo mientras está en la parte superior, el panel maneja el gesto y se cierra.

Al igual que:

ingrese la descripción de la imagen aquí

Traté de habilitar / deshabilitar la física de desplazamiento en el ListView en función de la posición del Panel, pero resultó que no era posible de esa manera.

Algunas ideas ? :)

Théo Champion
fuente
¿Has probado la solución que te di? Espero que ayude.
Pablo Barrera el
@PabloBarrera Terminé, recodificando el comportamiento en DraggableScrollableSheetmí, pero aceptaré tu respuesta;)
Théo Champion

Respuestas:

5

Puedes lograr eso con DraggableScrollableSheet.

Aquí hay un ejemplo rápido de cómo puede usarlo:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Stack(
      children: <Widget>[
        Center(child: Text('Some content')),
        DraggableScrollableSheet(
          minChildSize: 0.2,
          initialChildSize: 0.2,
          builder: (context, scrollController) => Container(
            color: Colors.lightBlueAccent,
            child: ListView.builder(
              controller: scrollController,
              itemCount: 20,
              itemBuilder: (context, index) => SizedBox(
                height: 200,
                child: Text('Item $index'),
              ),
            ),
          ),
        ),
      ],
    ),
  );
}
Pablo Barrera
fuente