android - flutter 错误 : 'ScrollController not attached to any scroll views.' on scroll

标签 android listview flutter dart

每当我在 ListView 中滚动时,我都会在控制台中收到此错误消息:

ScrollController not attached to any scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 110 pos 12: '_positions.isNotEmpty'

我整天都在努力解决这个问题,我想让其他人看看它。
这段代码还有更多问题,但现在我主要对修复这个错误感兴趣。

我尝试使用 Listview.builder,检查 hController.hasClients 和更多小东西。他们似乎没有改变任何东西
class MyHome extends StatefulWidget {
  @override
  MyHomeState createState() => new MyHomeState();
}

class MyHomeState extends State<MyHome> with SingleTickerProviderStateMixin {
  ScrollController hController;
  ScrollController tController;
  ScrollController fController;
  ScrollController bController;

  @override
  void initState() {
    super.initState();
    hController = new ScrollController()..addListener(_scrollListener);
    tController = new ScrollController()..addListener(_scrollListener);
    fController = new ScrollController()..addListener(_scrollListener);
    bController = new ScrollController()..addListener(_scrollListener);
  }

  @override
  void dispose() {
    super.dispose();
    hController.removeListener(_scrollListener);
    tController.removeListener(_scrollListener);
    fController.removeListener(_scrollListener);
    bController.removeListener(_scrollListener);
  }
  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
        length: 4,
        child: new Scaffold(
          //Removed AppBar for readability
          body: new TabBarView(
            children: [
              new Container(// hot
                child: ListView(
                    controller: hController,
                    children: <Widget>[
                      Utils.show("hot")
                    ],
                ),
              ),
              new Container( //Trending
                child: ListView(
                  controller: tController,
                  children: <Widget>[
                    Utils.show("trending")
                  ],
                ),
              ),
              new Container( //Fresh
                child: ListView(
                  controller: fController,
                  children: <Widget>[
                    Utils.show("fresh")
                  ],
                ),
              ),
              new Container( //Best
                child: ListView(
                  controller: bController,
                  children: <Widget>[
                    Utils.show("best")
                  ],
                ),
              ),
            ],
          ),
        ));
  }
  void _scrollListener() {
    if (hController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("hot");
      });
    }else if (tController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("trending");
      });
    } else if (fController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("fresh");
      });
    } else if (bController.position.extentAfter == 0.0) {
      setState(() {
        Utils.show("best");
      });
    }
  }

}

编辑:为了清楚起见,我第一次发布此代码时,我使用了 tController 两次。这当然是一个错误,但并没有解决错误。滚动四个 ListView 中的每一个时都会发生错误。

最佳答案

为避免此类错误,请使用 getter

ScrollController.hasClient

如果这是错误的,那么与
[ScrollPosition],如[position]、[offset]、[animateTo]、[jumpTo],
不得调用。

例如:
    if (_controller.hasClients) {
      _controller.animateTo(
      ...
    }

关于android - flutter 错误 : 'ScrollController not attached to any scroll views.' on scroll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58134135/

相关文章:

android - 尝试使用 Fragment 创建聊天?

android - 我在三星和谷歌最新版本的移动设备中遇到 android 媒体播放器错误 (-38, 0)

java - ListView 嵌套在 ListView 中,并且根据 Cursor 值不同行

android - 动态更改 ListView 的分隔线高度?

ios - 在 iOS 模拟器中启动 Flutter 应用程序时出错

java - Android Fragment 有多少开销?

java - Android - 如何在更改 Activity 后保存复选框状态(选中/未选中)

flutter - 如何在 flutter 中使用动画列表对最初渲染的项目进行动画处理

flutter - 如何在flutter中构建没有key的release模式——Flutter Debug模式好慢

android - 在 Android 上使用 DI 的具体好处是什么?