即使keepPage为false,PageView也会记住滚动的页面

时间:2020-03-29 18:08:34

标签: flutter flutter-pageview

这是我的控制者:

PageController _getScenePageController() {
return PageController(
  initialPage: 0, keepPage: false,
);

}

在一开始,我使用了PageView.builder,但是我注意到在源代码中,它们将构建功能包装在AutomaticKeepAlive中。 所以我尝试了如下所示的PageView.custom:

 return PageView.custom(
    scrollDirection: Axis.vertical,
    controller: _getScenePageController(),
  childrenDelegate: SliverChildBuilderDelegate((context, index) {
      return BlocProvider<MediaCardBloc>(
          create: (BuildContext context) =>
              _getMediaCardBloc(_scenes, index),
          child: MediaCard(_scenes[index],
              themeColor: _theme.overlayColor, key: ValueKey(index)));
    }, childCount: _scenes.length, addAutomaticKeepAlives: false),
);

MediaCard是一个无状态小部件,我开始打印在刷卡时创建的每个MediaCard的哈希码,当我返回以前刷过的页面时,它具有相同的哈希码。 顺便说一句,在MediaCard内部,我有一个StatefulWidget,因为我在内部播放视频,每次滚动时,我都会得到称为dispose的方法,这就是我想发生的事情,所以为什么保存MediaCard?

编辑1: 我做了更基本的测试:

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print("**********Test build hashcode:${this.hashCode}");
    return Container(child: Text("${this.hashCode}", style: TextStyle(fontSize: 50),),alignment: Alignment.center,);
  }
}

这是PageView:

return PageView.custom(
    scrollDirection: Axis.vertical,
    controller: _getScenePageController(),
  childrenDelegate: SliverChildBuilderDelegate((context, index) {
    return Test();
    }, childCount: _scenes.length, addAutomaticKeepAlives: false),
);

结果仍然相同。

0 个答案:

没有答案