使用 PageView 的 BottomNaviationBar 中的 GoogleMap 小部件滚动问题以保持状态

Scrolling issue with GoogleMap widget in BottomNaviationBar with PageView for persisting state

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        children: _children,
        controller: pageController,
        onPageChanged: onPageChanged,
      ),
      bottomNavigationBar: BottomNavigationBar(
        onTap: onTabTapped,
        backgroundColor: Colors.grey[100],
        currentIndex: _currentIndex,
        items: [
          BottomNavigationBarItem(
            icon: new Icon(Icons.navigation),
            label: 'Track',
          ),
          BottomNavigationBarItem(
            icon: new Icon(Icons.settings),
            label: 'Settings',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person),
            label: 'Profile',
          )
        ],
      ),
    );
  }

  void onTabTapped(int value) {
    pageController.jumpToPage(value);
  }

  void onPageChanged(int index) {
    setState(() {
      _currentIndex = index;
    });
  }

你好,我在下面的代码图像中附加了我的简单 flutter 应用程序的有状态小部件的构建方法。我正在使用底部导航栏,并希望我的小部件在底部页面之间切换时保留在树中。因此,我实现了 AutomaticKeepAliveMixin 以及页面控制器和页面主体,以使状态持续存在。现在我的问题是,

  1. 我的第一页是一个 google 地图小部件,显示跟踪信息。由于浏览量的原因,当我尝试通过向目的地方向滑动来查看地图上的不同位置时,有时在地图上从右向左滑动会导致页面浏览触发页面切换
  2. 如果我删除 pageview 以使地图按预期工作,状态的持久化就会消失,因为根据文档,我应该将脚手架的主体包裹在 PageView 小部件中,以便 AutomaticKeepAliveMixin 工作。

现在我的问题是如何实现两者兼而有之?我卡住了。我已经尝试实现其他状态持久化技术,如索引堆栈和 pagekeystorage,但没有成功 :( 任何帮助将不胜感激!谢谢!

垂直滚动有效,但当我尝试在我的地图中横向滚动时,综合浏览量优先,只是滚动到新页面,如下所示:

PageView 有一个物理机制 属性,您可以使用它来控制它如何响应用户在其上滑动而滚动。如果您分配 NeverScrollableScrollPhysics(),它将不可滚动。