首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在添加/删除页面上不更新消费者的Flutter PageView,除非手动翻到不同的页面

在Flutter中,PageView是一个可以滚动切换子页面的组件。当我们在添加/删除页面时,如果不手动翻到不同的页面,消费者无法看到更新后的页面。为了解决这个问题,我们可以使用PageController来控制PageView的滚动,从而实现页面的更新。

首先,我们需要在页面中创建一个PageController对象,并将其作为PageView的controller属性值。然后,我们可以通过PageController的方法来手动滚动到指定的页面。例如,使用animateToPage方法可以在动画效果下滚动到指定页面。在添加/删除页面时,我们可以更新PageController来反映新的页面数量,然后调用animateToPage方法将PageView滚动到当前页面。

以下是一个示例代码,展示了如何在添加/删除页面时更新PageView的方法:

代码语言:txt
复制
import 'package:flutter/material.dart';

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  PageController _pageController;
  int _currentPage = 0;
  List<Widget> _pages = [
    // 添加或删除页面后,更新该列表
    Container(
      color: Colors.red,
    ),
    Container(
      color: Colors.blue,
    ),
    Container(
      color: Colors.green,
    ),
  ];

  @override
  void initState() {
    super.initState();
    _pageController = PageController(initialPage: _currentPage);
  }

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

  void _updatePage() {
    setState(() {
      _pages.add(
        Container(
          color: Colors.yellow,
        ),
      );
    });
    // 更新页面后,将PageView滚动到当前页面
    _pageController.jumpToPage(_currentPage);
  }

  void _removePage() {
    setState(() {
      _pages.removeLast();
    });
    // 更新页面后,将PageView滚动到当前页面
    _pageController.jumpToPage(_currentPage);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PageView Example'),
      ),
      body: Column(
        children: [
          Expanded(
            child: PageView(
              controller: _pageController,
              onPageChanged: (int page) {
                setState(() {
                  _currentPage = page;
                });
              },
              children: _pages,
            ),
          ),
          SizedBox(height: 16),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: _updatePage,
                child: Text('添加页面'),
              ),
              SizedBox(width: 16),
              ElevatedButton(
                onPressed: _removePage,
                child: Text('删除页面'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

上述代码中,我们创建了一个包含PageView的MyPage小部件。在initState方法中,我们初始化了PageController,并指定初始页面为_currentPage。在dispose方法中,我们释放了PageController。在_updatePage和_removePage方法中,我们通过setState更新了_pages列表,并调用_pageController.jumpToPage方法将PageView滚动到当前页面。在build方法中,我们创建了一个PageView,并将其放置在Expanded部件中,以填充剩余的可用空间。我们还添加了两个ElevatedButton用于测试添加和删除页面的功能。

这样,当我们在添加/删除页面时,PageView会自动更新,并显示新的页面内容,而不需要手动翻到不同的页面。

关于Flutter的PageView和PageController的更多信息,你可以参考腾讯云的Flutter开发指南中的以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )

--- PageView 作为显示主体组件 , 设置给 Scaffold body 字段 , 主要设置以下三个参数 ; 控制器 : PageView controller 参数设置 , PageController...类型 , 主要用于控制 PageView 页面跳转 ; 滑动回调事件 : onPageChanged 参数设置滑动回调事件 , 传入 index 索引值 , 该事件中 , 调用 setState...页面滑动 /// 这里设置 PageView 页面滑动也能 onPageChanged: (index) { setState(() { // 更新当前索引值...{ // 更新当前索引值 _currentIndex = index; }); }, } PageView 被动设置选中状态 : BottomNavigationBar...界面 , 会回调 PageView onPageChanged 方法 , 在此处调用 setState 方法 , 该方法中设置 _currentIndex 值 , 进而更新 BottomNavigationBar

4.4K20

Flutter完整开发实战详解(二、 快速开发实战篇)

从代码中我们可以看到: 手动左右滑动 PageView 时,通过 onPageChanged 回调调用 _tabController.animateTo(index); 同步TabBar状态。...); }, ), ); [顶部TabBar效果]   TabBar 页面中,一般还会出现:父页面需要控制 PageView 中子需求。...Flutter 中 为我们提供了 RefreshIndicator 作为内置下拉刷新控件;同时我们通过给 ListView 添加 ScrollController 做滑动监听,最后增加一个 Item,...比起一般 png 图片文件,矢量图标开发过程中:可以轻松定义颜色,并且任意调整大小模糊。...如下代码,通过 pubspec.yaml 中添加字体库支持,然后代码中创建 IconData 指向字体库名称引用即可。

5K30
  • GetX代码生成IDEA插件,超详细功能讲解(透过现象看本质)

    整个模块很多逻辑依靠相关变量去标定,会初始化很多不同数据,State层代码几乎快一千行 所以当业务逐渐复杂,State层并不薄,他支撑着整个模块逻辑标定和扭转 除非是肉眼可见业务极简模块,推荐使用...,选择其中一按钮,另一按钮会自动取消勾选 这算是一个非常有用功能了 如果大家PageView中使用getx,可能会发现,所有的子页面GetXController,一下全被注入了!...,是放在类成员变量作用域 这个作用域是实例化构造函数之前起效 所以我们添加被实例Page时候,成员变量作用域直接被触发,GetXController就被注入 PageView触发机制 PageView...GetXController了 这种回收方式GetBuilder和Obx俩种刷新机制中,都是通用 回收时机:是当前页面被回收时候 唯一麻烦:需要你手动把GetBindWidget这个控件,引入到自己项目中...增加PageView解决方案 修复一些bug 2.1.x 重大更新

    1.6K61

    Flutter完整开发实战详解(二、 快速开发实战篇)

    从代码中我们可以看到: 手动左右滑动 PageView 时,通过 onPageChanged 回调调用 _tabController.animateTo(index); 同步TabBar状态。...页面效果   既然底部Tab页面都实现了,干脆顶部tab页面也一起完成。如下代码,和底部Tab区别在于: 底部tab是放在了 Scaffold bottomNavigationBar 中。...顶部TabBar效果   TabBar 页面中,一般还会出现:父页面需要控制 PageView 中子需求。这时候就需要用到GlobalKey了。...Flutter 中 为我们提供了 RefreshIndicator 作为内置下拉刷新控件;同时我们通过给 ListView 添加 ScrollController 做滑动监听,最后增加一个 Item,...如下代码,通过 pubspec.yaml 中添加字体库支持,然后代码中创建 IconData 指向字体库名称引用即可。

    5.2K10

    Flutter实现页面切换后保持原页面状态3种方法

    前言: Flutter应用中,导航栏切换页面后默认情况下会丢失原页面状态,即每次进入页面时都会重新初始化状态,如果在initState中打印日志,会发现每次进入时都会输出,显然这样增加了额外开销,...它拥有一个固定底部导航以及首页顶部导航,可以看到不管是点击底部导航切换页面还是首页左右侧滑切换页面,之前页面状态都是始终维持,下面就具体介绍下如何在flutter中实现类似喜马拉雅导航效果...第一步:实现固定底部导航 通过flutter create生成项目模板中,我们先简化一下代码,将MyHomePage提取到一个单独home.dart文件,并在Scaffold脚手架中添加bottomNavigationBar...现在我们先来介绍另外两种方式: ① 使用IndexedStack实现 IndexedStack继承自Stack,它作用是显示第index个child,其它child页面上是不可见,但所有child...更新 前面底部导航介绍了使用IndexedStack和Offstage两种方式实现保持页面状态,但它们缺点在于第一次加载时便实例化了所有的子页面State。

    2.8K30

    Flutter 封装一个 Banner 轮播图

    Flutter 中,如何开发一个轮播? ? 了解需求 首先,我们开发一个功能时候要了解这个功能需求,那一个轮播需要有什么功能?...因为后续要添加指示器,指示器应该也要有自己点击事件,比如点击第二个小圆点就跳转到第二之类, 所以,我们要在 Image 上面添加手势识别: return GestureDetector( onTap...如果光写成这样,小圆点是不会变,所以我们要在 PageView onPageChanged 回调中去 setState(), 顺便更新 _curIndex 值。...重新构建一下刷新页面,这个时候看一下效果: ? 这个时候这个 Banner 可以说是很完善了,但是如果我们手动去干预滑动会出现什么问题呢?...因为我们刚才写是 3 秒一切换,所以我们手动切换时候,它在到达第三秒后,就会出现连续换页情况。

    3K50

    Flutter GetX使用---简洁魅力!

    反复查阅官方文档后,使用一个全局Bloc方式,实现了“伪”跨页面交互,详细可查看:flutter_bloc使用解析;fish_redux广播机制是可以比较完美的实现跨页面交互,我也写了一篇几万字介绍如何使用该框架...这个页面就是重点了 logic 将演示怎么调用前一个页面的事件 怎么接收上个页面数据 请注意,GetxController包含比较完整生命周期回调,可以onInit()接受传递数据;如果接收数据需要刷新到界面上...模块GetXController 这样做当然有好处 可以统一管理复杂模块多个GetXController 请注意 建议Get.to()方法里面进行binding绑定 如果存在多个页面跳转到存在binding...,也可以为没有参数路由定义一个不同页面,但是你必须在接收参数路由上使用斜杠"/",就像上面说那样。...页面控制器,全被初始化问题 大家使用PageView添加PageView页面PageView页面用GetX构成,会发现所有的PageView页面控制器全被初始化了!

    7.6K103

    Flutter实现App功能引导

    App功能介绍,主要是由介绍app功能几张图片和当前指示符组成,如下效果 ?...我们来一步一步实现上面的界面,左右滑动切换显示功能,这个可以通过PageView来实现,底部指示符半透明覆盖PageView上,开发过Android同学知道可以用Framelayout布局来实现,...上面编译运行功能后,我们先来着手实现功能介绍页面切换,PageView主要有两类构建函数,一个是懒加载页面(适合页面很多时使用),一个是适合少量页面的一次性加载,我们实例显示3个页面,就简单用这种方式...Colors.white70 : Colors.black12)); } 滑动PageView,需要更新_pageIndex,从而对应更新当前对应颜色 return PageView(...换页事件,这里需要调用setState从而使Widget重建更新当前点颜色 到这里为止就剩下点击点更新PageView功能了,我们来实现点击功能,就是监听点击手势,代码如下 _handlePageIndicatorTap

    2.1K10

    探索 Flutter NavigationRail:使用详解

    安装和设置 Flutter 项目中使用 NavigationRail 非常简单,您只需按照以下步骤进行安装和设置即可: 添加依赖项: Flutter 项目的 pubspec.yaml 文件中添加...与页面切换结合 NavigationRail 通常与页面切换组件结合使用,例如 PageView 或 IndexedStack,以实现根据选定导航栏项切换不同页面内容。...您可以 PageView 中放置不同页面,并根据导航栏选定项切换页面。...然后,我们使用页面控制器 _pageController 来将 PageView 的当前设置为选定索引,从而切换到相应页面。...通过这种方法,您可以实现根据选定导航栏项切换不同页面内容,为用户提供直观导航体验。您还可以根据需要将其他页面添加PageView 中,以扩展应用程序功能。 6.

    53410

    Flutter 小技巧之 ListView 和 PageView 各种花式嵌套

    这次 Flutter 小技巧是 ListView 和 PageView 花式嵌套,不同 Scrollable 嵌套冲突问题相信大家不会陌生,今天就通过 ListView 和 PageView 三种嵌套模式带大家收获一些不一样小技巧...正常嵌套最常见嵌套应该就是横向 PageView 加纵向 ListView 组合,一般情况下这个组合不会有什么问题,除非你硬是要斜着滑。...最近刚好遇到好几个人同时问:“斜滑 ListView 容易切换到 PageView 滑动” 问题,如下 GIF 所示,当用户滑动 ListView 时,滑动角度带上倾斜之后,可能就会导致滑动是...答案是肯定,毕竟产品小脑袋,怎么会想不到垂直滑动 ListView 里嵌套垂直切换 PageView 这种需求。...有了前面的思路,其实实现这个逻辑也是异曲同工:把 PageView 和 ListView 滑动禁用,然后通过 RawGestureDetector 自己管理,不同就是手势方法分发差异。

    2K20

    Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )

    , 为其赋值一个 Drawer 组件 ; Drawer 组件就是侧拉菜单 , 该组件 child 设置一个 ListView 组件 , 列表中设置 DrawerHeader , ListTile...(int page) 方法 , 进行页面跳转 ; jumpToPage 页面跳转在底部菜单栏 onTap 点击事件中调用 , 更新当前页面后 , 需要调用 setState 方法更新界面 ; PageView.../// 用于 TabBarView 中显示组件 class TabContent extends StatelessWidget { const TabContent({Key key, this.data...child: Center( /// 垂直方向线性布局 child: Column( /// 主轴 ( 垂直方向 ) 占据大小...( 随博客进度一直更新 , 有可能没有本博客源码 ) 博客源码快照 : https://download.csdn.net/download/han1202012/16277725 ( 本篇博客源码快照

    1.9K20

    Flutter】底部导航栏实现 ( BottomNavigationBar 底部导航栏 | BottomNavigationBarItem 导航栏条目 | PageView )

    controller 和 List children 字段 , PageController 用于控制 PageView页面跳转 , children 中就是 PageView 封装多个界面组件...onTap 点击事件 , BottomNavigationBar 组件需要设置组件类型 , BottomNavigationBarType?..., /// 都会根据当前点击选项而改变 , /// 改变时候有切换动画 /// 选中状态下显示底部图标的文本 /// 选中状态下隐藏底部文本内容 shifting...(int page) 方法 , 进行页面跳转 ; jumpToPage 页面跳转在底部菜单栏 onTap 点击事件中调用 , 更新当前页面后 , 需要调用 setState 方法更新界面 ; PageView...child: Center( /// 垂直方向线性布局 child: Column( /// 主轴 ( 垂直方向 ) 占据大小

    6.1K50

    掌握Flutter底部导航栏:畅游导航之旅

    Flutter底部导航栏概述 Flutter中,底部导航栏是一种常见用户界面组件,通常用于展示应用程序主要功能模块或不同页面的快速导航入口。...Flutter中,实现底部导航栏与页面切换通常有两种常见方式:使用IndexedStack和利用PageView。本节将分别介绍这两种方式实现方法。...5.2 利用PageView实现页面滑动切换 另一种常见底部导航栏与页面切换方式是利用Flutter提供PageView组件,它可以实现页面的滑动切换效果。...通过将多个页面放置一个PageView中,并配合底部导航栏实现页面切换,可以为用户提供更加流畅导航体验。...通过设置_bottomNavigationBarState类中_onItemTapped函数,可以实现底部导航栏与页面的切换效果,并利用PageViewonPageChanged回调函数实现页面切换时同步更新

    36310

    Flutter】StatefulWidget 组件 ( PageView 组件 )

    文章目录 一、PageView 组件 二、PageView 组件完整代码示例 三、 相关资源 一、PageView 组件 ---- PageView 组件构造函数 : 构造函数中可选参数就是 PageView...组件 children 设置 : children 字段设置其要滑动切换各个页面组件 ; 一般使用 Container 封装复杂组件 ; 代码示例 : 下面的代码就是 PageView 中设置了三个滑动切换组件...组件会自动更新当前选中选项卡 setState(() { // 改变 int _currentSelectedIndex 变量状态...: 三目运算符 ), ); } /// RefreshIndicator 发生下拉操作时, 回调该方法 /// 该方啊是一个异步方法 , 方法体前添加 async 关键字...( 随博客进度一直更新 , 有可能没有本博客源码 ) 博客源码快照 : https://download.csdn.net/download/han1202012/15500147 ( 本篇博客源码快照

    1.1K00

    Flutter 专题】108 图解 PageView 滑动页面预览小尝试

    PageView 滑动页面预览应用在很多场景中,和尚之前只用过最基本用法,今天和尚尝试系统性学习一下 PageView 基本应用; PageView 一般用户少量需要滑动页面切换场景,但整体使用很灵活...3. pageSnapping pageSnapping 用于是否禁止页面捕捉,和尚理解为 Page 页面是否为整页滑动切换;当 pageSnapping=false 时,Page 可以逐步滑动,滑动到中途一半时候也可以停止...6. physics physics 主要体现在首页和尾结束时动画动画效果,为 ScrollPhysics 类型,可以自定义也可以根据 Flutter 提供动画来处理;类似的有 ClampingScrollPhysics...Page 页数组下标;keepPage 是否保存数据状态;viewportFraction 为每个 Page 占据整个 PageView 比例; PageController 还提供了几个重要方法...PageView.custom PageView 还提供了 .custom() 构造方法;可以通过 SliverChildBuilderDelegate 代理添加 Page 页面懒加载还可以进行 Page

    1.3K10

    Flutter开发实战分析-animation_demo瞎复写总结

    简单分析一下 上下滚动,并且自定义动画效果。嗯。上一遍文章CustomScrollView 左右滚动,切换页面。嗯。PageViewPageView可以让像是一滑动。...确定中间状态 tColumnToRow 整体动画,Flutter中有很方便lerp函数可以确定中间状态。只要传入我们进度百分比就可以。这个百分比可以由滑动过程中offset传入。...这个属性会悬浮我们AppBar顶部。但是如果默认情况下,这时appBar高度就是有56逻辑像素这样。所以,我们需要添加一个bottom,让它,增加到我们想要最后高度。...自定义动画过程 自定义动画过程,Flutter中其实相对简单。提供了很多帮助计算方式。需要做是确定要初始值,和最终值,中间过度变量可以考虑使用lerp就可以完成。...添加PageScrolPhysics,这样就是按照页面滚动。添加BounceScrollPhysics,就实现ios中弹性滚动了。 好。这边文章,我们就暂时到这里。

    2.5K30
    领券