ScrollController not attached to any scroll views

前端 未结 11 1166
难免孤独
难免孤独 2021-01-17 07:22

I\'m using CustomScrollView, and providing it with a controller. ScrollController works, I even added a listener to it and print out the position of the scroll view.

11条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-17 08:01

    This sometimes happens when you are attempting to bind a ScrollController to a widget that doesn't actually exist (yet). So it attempts to bind, but there is no ListView/ScrollView to bind to. Say you have this code:

    Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Expanded(
          flex: 8,
          child: Container(
            child: ListView.builder(
              controller: scrollController,
              itemCount: messages.length,
              itemBuilder: (context, index) {
                return MessageTile(message: messages[index]);
              }),
            ),
         ),
     ]),
    

    Here we are building a ListView dynamically. Since we never declared this ListView before, the scrollController does not have anything to bind to. But this can easily be fixed:

    // first declare the ListView and ScrollController

    final scrollController = ScrollController(initialScrollOffset: 0);
    ListView list = ListView.builder(
      controller: scrollController,
      itemCount: messages.length,
      itemBuilder: (context, index) {
        return MessageTile(message: messages[index]);
      }
    );
    

    // then inside your build function just reference the already built list

    Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Expanded(
          flex: 8,
          child: Container(
             child: list,
          ),
        ),
      ]),
    

提交回复
热议问题