Flutter 未激发带有tabbarview滚动的NestedScrollView

Flutter 未激发带有tabbarview滚动的NestedScrollView,flutter,dart,flutter-layout,flutter-sliver,Flutter,Dart,Flutter Layout,Flutter Sliver,我有下面的代码让TabBarView使用狭长的效果。问题是当用户滚动到最后时,我需要加载更多的数据。但是\u handleScrolling函数并不是每次我向下滚动时都被触发。 我必须上下滚动才能让它开火。它第一次工作,但在切换选项卡和向下滚动事件后未触发。我必须再次向上滚动 有人知道为什么吗 import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart

我有下面的代码让TabBarView使用狭长的效果。问题是当用户滚动到最后时,我需要加载更多的数据。但是
\u handleScrolling
函数并不是每次我向下滚动时都被触发。 我必须上下滚动才能让它开火。它第一次工作,但在切换选项卡和向下滚动事件后未触发。我必须再次向上滚动

有人知道为什么吗

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';

class KnowledgePage2 extends StatefulWidget {
  @override
  _KnowledgePageState createState() => _KnowledgePageState();
}

class _KnowledgePageState extends State<KnowledgePage2> with TickerProviderStateMixin {
  TabController _tabController;
  ScrollController _scrollController = ScrollController();
  List<String> categories = ["A", "B", "C"];
  List<String> items1 = List<String>.generate(50, (i) => "A $i + 1");
  List<String> items2 = List<String>.generate(50, (i) => "B $i + 1");
  List<String> items3 = List<String>.generate(50, (i) => "C $i + 1");

  @override
  void initState() {
    super.initState();

    _tabController = TabController(vsync: this, initialIndex: 0, length: categories.length);
    _scrollController.addListener(_handleScrolling);
  }

  @override
  void dispose() {
    super.dispose();

    _tabController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: NestedScrollView(
        controller: _scrollController,
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              floating: false,
              snap: false,
              pinned: true,
              title: Text("text"),
              flexibleSpace: FlexibleSpaceBar(
                collapseMode: CollapseMode.pin,
                background: Column(
                  children: <Widget>[
                    SizedBox(height: 80),
                    CachedNetworkImage(width: 320, fit: BoxFit.cover, imageUrl: "http://via.placeholder.com/640x360"),
                  ],
                ),
              ),
              expandedHeight: 320.0,
              bottom: TabBar(
                controller: _tabController,
                indicatorSize: TabBarIndicatorSize.tab,
                indicatorWeight: 5.0,
                isScrollable: true,
                tabs: categories.map((category) => Tab(text: category)).toList(),
              ),
            )
          ];
        },
        body: Column(
          children: <Widget>[
            Expanded(
              child: TabBarView(controller: _tabController, children: <Widget>[
                ListView.builder(
                  itemCount: items1.length,
                  itemBuilder: (context, i) {
                    return Text(items1[i], style: TextStyle(fontSize: 16, height: 2.2, fontWeight: FontWeight.w500, color: Colors.black));
                  },
                ),
                ListView.builder(
                  itemCount: items2.length,
                  itemBuilder: (context, i) {
                    return Text(items2[i], style: TextStyle(fontSize: 16, height: 2.2, fontWeight: FontWeight.w500, color: Colors.black));
                  },
                ),
                ListView.builder(
                  itemCount: items3.length,
                  itemBuilder: (context, i) {
                    return Text(items3[i], style: TextStyle(fontSize: 16, height: 2.2, fontWeight: FontWeight.w500, color: Colors.black));
                  },
                )
              ]),
            ),
          ],
        ),
      ),
    );
  }

  void _handleScrolling() {
    var isEnd = (_scrollController.offset >= _scrollController.position.maxScrollExtent) &&
        !_scrollController.position.outOfRange &&
        (_scrollController.position.axisDirection == AxisDirection.down);

    debugPrint("---------------- $isEnd");

    if (isEnd) {}
  }
}
import'package:cached_network_image/cached_network_image.dart';
进口“包装:颤振/材料.省道”;
class KnowledgePage2扩展StatefulWidget{
@凌驾
_KnowledgePageState createState()=>\u KnowledgePageState();
}
类_KnowledgePageState使用TickerProviderStateMixin扩展状态{
TabController\u TabController;
ScrollController_ScrollController=ScrollController();
清单类别=[“A”、“B”、“C”];
List items1=List.generate(50,(i)=>“A$i+1”);
列表项2=列表生成(50,(i)=>“B$i+1”);
列表项3=列表生成(50,(i)=>“C$i+1”);
@凌驾
void initState(){
super.initState();
_tabController=tabController(vsync:this,initialIndex:0,长度:categories.length);
_scrollController.addListener(_handleScrolling);
}
@凌驾
无效处置(){
super.dispose();
_tabController.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:嵌套滚动视图(
控制器:\ u滚动控制器,
headerSliverBuilder:(BuildContext上下文,boolInnerBoxIsCrolled){
返回[
滑杆(
浮动:假,
快照:错,
对,,
标题:文本(“文本”),
flexibleSpace:FlexibleSpaceBar(
collapseMode:collapseMode.pin,
背景:专栏(
儿童:[
尺寸箱(高度:80),
CachedNetworkImage(宽度:320,尺寸:BoxFit.cover,图像URL:)http://via.placeholder.com/640x360"),
],
),
),
扩展高度:320.0,
底部:选项卡栏(
控制器:\ tab控制器,
指标化:TabBarIndicatorSize.tab,
指示器重量:5.0,
isScrollable:是的,
tabs:categories.map((category)=>Tab(text:categority)).toList(),
),
)
];
},
正文:专栏(
儿童:[
扩大(
子项:选项卡视图(控制器:\选项卡控制器,子项:[
ListView.builder(
itemCount:items1.length,
itemBuilder:(上下文,i){
返回文本(items1[i],样式:TextStyle(fontSize:16,高度:2.2,fontWeight:fontWeight.w500,颜色:Colors.black));
},
),
ListView.builder(
itemCount:items2.length,
itemBuilder:(上下文,i){
返回文本(items2[i],样式:TextStyle(fontSize:16,高度:2.2,fontWeight:fontWeight.w500,颜色:Colors.black));
},
),
ListView.builder(
itemCount:items3.length,
itemBuilder:(上下文,i){
返回文本(items3[i],样式:TextStyle(fontSize:16,高度:2.2,fontWeight:fontWeight.w500,颜色:Colors.black));
},
)
]),
),
],
),
),
);
}
void_handleScrolling(){
变量isEnd=(\u scrollController.offset>=\u scrollController.position.maxScrollExtent)&&
!\u scroll controller.position.outOfRange&&
(_scrollController.position.axisDirection==axisDirection.down);
debugPrint(“---------------------$isEnd”);
如果(isEnd){}
}
}

这里有一个与此问题相关的问题