ScrollView imbriqué dans le widget du panneau coulissant

9

J'ai un widget de panneau qui peut être glissé verticalement vers l'intérieur et l'extérieur depuis le bas de l'écran. Dans ce widget de panneau, il y en a un ListViewqui peut défiler.

Ce que j'essaie de réaliser, c'est que le panneau gère le glissement pour l'ouverture et la fermeture sans que la vue de liste imbriquée n'interfère. Une fois que le panneau est ouvert, la vue de liste peut défiler et si la vue de liste est défilée alors qu'elle est déjà en haut, le panneau gère le geste à la place et se ferme.

Ainsi:

entrez la description de l'image ici

J'ai essayé d'activer / désactiver la physique de défilement sur le ListView en fonction de la position du panneau, mais il s'est avéré que cela n'était pas possible.

Des idées ? :)

Champion de Théo
la source
Avez-vous essayé la solution que je vous ai donnée? J'espère que ça aide.
Pablo Barrera
@PabloBarrera Fini, recodant le comportement en DraggableScrollableSheetmoi-même, mais j'accepterai votre réponse;)
Théo Champion

Réponses:

5

Vous pouvez y parvenir avec DraggableScrollableSheet.

Voici un exemple rapide de la façon dont vous pouvez l'utiliser:

@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
la source