将侦听器附加到scrollController

时间:2019-07-16 09:39:22

标签: flutter dart

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

我看到了这个helpful guide,但是它们创建了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
  }

1 个答案:

答案 0 :(得分:1)

您只需要重组代码。在构建器中定义_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'));
            },
          ),
        );
      },
    );
  }