ScrollView aninhado dentro do widget do painel Slidable

9

Eu tenho um widget de painel que pode ser arrastado verticalmente dentro e fora da parte inferior da tela. Nesse widget de painel, há um ListViewque pode ser rolado.

O que estou tentando conseguir é que o painel lide com o arrasto para abrir e fechar sem que a exibição de lista aninhada interfira. Depois que o painel estiver aberto, a exibição da lista se tornará rolável e, se a exibição da lista estiver rolada para baixo enquanto já estiver na parte superior, o painel manipulará o gesto e fechará.

Igual a:

insira a descrição da imagem aqui

Tentei ativar / desativar a física da rolagem no ListView com base na posição do painel, mas não foi possível dessa maneira.

Alguma ideia ? :)

Campeão de Théo
fonte
Você já tentou a solução que eu lhe dei? Espero que ajude.
Pablo Barrera
@PabloBarrera Acabei de recodificar o comportamento em DraggableScrollableSheetmim mesmo, mas vou aceitar a sua resposta;)
Théo Champion

Respostas:

5

Você pode conseguir isso com DraggableScrollableSheet.

Aqui está um exemplo rápido de como você pode usá-lo:

@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
fonte