Как осуществлять непрерывную прокрутку bottomModelSheet после того, как дочерний ListView завершает прокрутку во флаттере? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть виджет showModalBottomSheet, который я вызываю, когда пользователь нажимает кнопку, и он имеет listView в качестве дочернего виджета.

с этим я могу прокрутить нижнюю модель лист,

Но как непрерывно прокручивать нижний лист модели вниз после того, как просмотр списка завершил прокрутку вниз?

В настоящее время нижний лист модели не go опускается, только указывает ListView завершение прокрутки.

enter image description here

вместо прокрутки завершения обратной связи, я хочу прокрутить вниз BottomModelSheet, когда ListView завершит прокрутку. Есть ли способ достичь этого с помощью `showModalBottomSheet '?

1 Ответ

0 голосов
/ 02 апреля 2020
  class _ExampleState extends State<Example> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              child: Text('Press Me'),
              onPressed: () async => await showModalBottomSheet(
                  // isScrollControlled: true,
                  context: context,
                  builder: (ctx) => ListViewWidget()),
            ),
          ],
        ),
      ),
    );
  }
}

class ListViewWidget extends StatefulWidget {
  @override
  _ListViewWidgetState createState() => _ListViewWidgetState();
}

class _ListViewWidgetState extends State<ListViewWidget> {
  ScrollController _scrollController;
  ScrollPhysics _scrollPhysics;

  void _scrollListener() async {
    if (_scrollController.position.pixels ==
        _scrollController.position.minScrollExtent) {
      setState(() {
        _scrollPhysics = NeverScrollableScrollPhysics();
      });
    }
  }

  @override
  void initState() {
    _scrollController = ScrollController()..addListener(_scrollListener);
    _scrollPhysics = AlwaysScrollableScrollPhysics();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      shrinkWrap: true,
      itemCount: kStates.length,
      controller: _scrollController,
      physics: _scrollPhysics,
      itemBuilder: (_, index) => GestureDetector(
        child: Text(
          kStates[index],
          style: TextStyle(
            color: Colors.black,
          ),
        ),
      ),
    );
  }
}
...