将监听器附加到scrollController

Dam*_*ien 3 dart flutter

我正在 flutter 中使用 DraggableScrollableSheet,我想知道该工作表是折叠还是展开。DraggableScrollableSheet 的构建器提供了一个scrollController,我向其附加了一个侦听器。

我看到这个有用的指南,但他们创建了一个 ScrollController,但在我的例子中,scrollController 是由构造函数提供的。我不明白我怎样才能获得他们相同的行为

这是我的代码:

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
  }

Run Code Online (Sandbox Code Playgroud)

Vic*_*ele 8

您只需要重构代码即可。在构建器中定义您的 _scrollListener 方法。

见下文:

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'));
            },
          ),
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)