Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Attach listener to scrollController

Tags:

flutter

dart

I'm working with DraggableScrollableSheet in flutter and I want to know whether the sheet is collapsed or expanded. The builder of the DraggableScrollableSheet provide a scrollController to whom I attach a listener.

I see this helpful guide but they create a ScrollController, but in my case the scrollController is provided by the constructor. I don't understand how could I obtain their same behavior

Here's my code:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox.expand(
        child: myBottomSheet()
      ),
    );
  }
}

class myBottomSheet extends StatefulWidget{
  @override
  _myBottomSheetState createState() => _myBottomSheetState();
}

class _myBottomSheetState extends State<myBottomSheet> {
  double appbarSize=0.08;
  @override
  Widget build(BuildContext context) {
    return DraggableScrollableSheet(
      maxChildSize: 0.8,
      minChildSize: appbarSize,
      initialChildSize: appbarSize,
      builder: (BuildContext context, ScrollController scrollController) {
        scrollController.addListener(_scrollListener); // <----------------
        return Container(
          child: ListView.builder(
            controller: scrollController,
            itemCount: 25,
            itemBuilder: (BuildContext context, int index) {
              return ListTile(title: Text('Item $index'));
            },
          ),
        );
      },
    );
  }

  _scrollListener(){
    //use controller such in the guide
  }

like image 600
Damien Avatar asked Sep 01 '25 15:09

Damien


1 Answers

You just need to restructure the code. Define your _scrollListener method in the builder.

See below:

class _myBottomSheetState extends State<myBottomSheet> {
  double appbarSize=0.08;
  @override
  Widget build(BuildContext context) {
    return DraggableScrollableSheet(
      maxChildSize: 0.8,
      minChildSize: appbarSize,
      initialChildSize: appbarSize,
      builder: (BuildContext context, ScrollController scrollController) {
        _scrollListener(){
         //use controller such in the guide
        }

        scrollController.addListener(_scrollListener); // <----------------
        return Container(
          child: ListView.builder(
            controller: scrollController,
            itemCount: 25,
            itemBuilder: (BuildContext context, int index) {
              return ListTile(title: Text('Item $index'));
            },
          ),
        );
      },
    );
  }
like image 117
Victor Eronmosele Avatar answered Sep 04 '25 07:09

Victor Eronmosele