Flutter listview builder 滚动控制器侦听器未在列表视图内触发?

afs*_*.an 13 listview dart flutter flutter-layout

我在另一个列表视图中有一个列表视图构建器小部件。当滚动位置到达末尾时,内部列表视图侦听器不会触发。

initState() {
   super.initState();

  _scrollController.addListener(() {
  if (_scrollController.position.maxScrollExtent ==
      _scrollController.position.pixels) {function();}
}

Container(
 child: Listview(
  children: <Widget>[
    Container(),
    ListView.builder(
      controller: _scrollController,
      physics: NeverScrollableScrollPhysics(),
      shrinkWrap: true,
      itemCount: list.length,
      itemBuilder: (BuildContext context, int index) {
         return Container();
      },
   ),
  ]
 )
)
Run Code Online (Sandbox Code Playgroud)

Vai*_*lod 16

您可能在任何小部件之前附加了SingleChildScrollView

所以将_scrollController 附加到 singleChildScrollView 而不是 listview

body: SingleChildScrollView(
        controller: _scrollController,
        child: Column(
          children: [
            _chips(),
            SizedBox(
              height: 10,
            ),
            _slider(),
            _showGrid(),
          ],
        ),
      ),
Run Code Online (Sandbox Code Playgroud)


Lon*_*olf 7

列表视图必须滚动,否则将无法工作。您不仅必须删除 NeverScrollableScrollPhysics(),还要将该列表视图添加到某个容器中,并将其高度设置为小于 ListView 的整体高度。然后listView开始滚动并且该函数将被触发

  ScrollController _scrollController = ScrollController();
  List<int> list = [1, 2, 3, 4, 5];
  initState() {
    super.initState();

    _scrollController.addListener(() {
      if (_scrollController.position.maxScrollExtent ==
          _scrollController.position.pixels) {
        print('firing');
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: ControlBar(
          title: Text('Home'),
        ),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            height: 150,
            child: ListView.builder(
              controller: _scrollController,
              shrinkWrap: true,
              itemCount: list.length,
              itemBuilder: (BuildContext context, int index) {
                return ListTile(title: Text(list[index].toString()));
              },
            ),
          ),
        ],
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

  • @SergeySalnikov,OP问题是**当滚动位置到达末尾时,内部listview侦听器不会触发**,这意味着内部ListView扩展到父Listview,这意味着内部ListView从未滚动,但父ListView这意味着它无法触发它 (4认同)