Zagnieżdżony ScrollView w przesuwnym widżecie panelu

9

Mam widżet panelu, który można przeciągać w pionie i z dołu ekranu. W tym panelu widżetu ListViewjest przewijalny.

Staram się uzyskać, aby panel obsługiwał przeciąganie do otwierania i zamykania bez zakłócania zagnieżdżonego widoku listy. Po otwarciu panelu widok listy staje się przewijalny, a jeśli widok listy jest przewijany w dół, gdy znajduje się już u góry, panel obsługuje gest i zamyka się.

Tak jak:

wprowadź opis zdjęcia tutaj

Próbowałem włączyć / wyłączyć fizykę przewijania na ListView w oparciu o pozycję panelu, ale okazało się, że nie jest to możliwe.

Jakieś pomysły ? :)

Téo Champion
źródło
Czy wypróbowałeś rozwiązanie, które ci dałem? Mam nadzieję, że to pomoże.
Pablo Barrera
@PabloBarrera Skończyło się na tym, że zapisałem w DraggableScrollableSheetsobie zachowanie , ale zaakceptuję twoją odpowiedź;)
Théo Champion

Odpowiedzi:

5

Możesz to osiągnąć za pomocą DraggableScrollableSheet.

Oto szybki przykład tego, jak możesz go użyć:

@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
źródło