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

在路由弹出/推送后不调用build方法

在路由弹出/推送后不调用build方法是指在移动应用程序中,当页面路由发生变化时,不会触发页面的重新构建(build)方法。

在Flutter中,页面的构建是通过build方法来实现的。当页面路由发生变化时,Flutter会自动调用页面的build方法来重新构建页面,以更新页面的显示内容。然而,有时候我们希望在路由弹出/推送后不重新构建页面,而是保持页面的状态不变。

为了实现在路由弹出/推送后不调用build方法,可以使用Flutter中的StatefulWidget和AutomaticKeepAliveClientMixin。

  1. 首先,将页面对应的Widget从StatelessWidget改为StatefulWidget,并添加AutomaticKeepAliveClientMixin。
代码语言:txt
复制
class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> with AutomaticKeepAliveClientMixin {
  @override
  bool get wantKeepAlive => true;

  @override
  Widget build(BuildContext context) {
    super.build(context); // 必须调用super.build(context)
    // 页面的构建逻辑
    return Container(
      // 页面内容
    );
  }
}
  1. 在State中重写wantKeepAlive方法,并返回true,表示希望保持页面的状态不变。
  2. 在build方法中调用super.build(context),以确保保持页面状态的逻辑生效。

通过以上步骤,就可以实现在路由弹出/推送后不调用build方法,从而保持页面的状态不变。

这种技术在以下场景中特别有用:

  • 当页面包含大量数据或复杂计算时,避免重复构建可以提高性能。
  • 当页面包含用户输入的表单数据时,避免重复构建可以保持用户输入的状态。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云Flutter SDK:https://cloud.tencent.com/document/product/647/17257
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mss
  • 腾讯云移动应用分析:https://cloud.tencent.com/product/mga
  • 腾讯云移动推送:https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于Spring 中方法内部调用自身方法事务 REQUIRE_NEW 生效的解释

这种方式对 target.method() 方式的调用是可以拦截到的,对于类内调用 method() 方式则拦截不到。...}); dynamicProxy.a(); } } 执行结果为: invoke in proxy this is a this is b 从这可以看出你类内自行调用方法是不会被代理拦截到的...对于单纯的class,没有接口,则 Spring 使用 cglib 进行代理,这里 Spring实现了自己的 CallbackFilter,具体类可以参见 Spring 源码CglibAopProxy ,目标类的...,我们看到 Spring 获取当前被代理的对象,直接进行invoke,类内方法也不会被cglib 代理到 我们写一个测试方法来试下,在上面main 方法里最后加入测试代码: Enhancer enhancer...this is b Spring 针对这种情况通过 threadlocal 的方式暴露了当前类的代理,可以使用 AopContext.currentProxy(); 方式得到,使用获取到的代理类再调用方法就可以再次走事务的处理逻辑了

1.4K30
  • Flutter学习笔记:BottomNavigationBar实现多个Navigation

    但是,如果我们只使用Navigator.of(context)来推送路由,就会发生意想不到的情况。 当新页面出现时,整个``BottomNavigationBar```及其内容会滑动。 酷。?...第38行,我们实现了build方法,该方法返回一个新的Navigator对象。 这需要一个key和一个initialRoute参数。...它还有一个onGenerateRoute方法,每次需要生成路由时都会调用方法。 这使用了我们上面定义的_routeBuilders()方法。...第11-19行,我们定义了一个_push()方法,该方法用于使用ColorDetailPage推送细节路径。...我们可以独立地推送/弹出每个导航器,并且后台导航员保持他们的状态。? One more thing 如果我们Android上运行应用程序,当我们按下后退按钮时,我们会发现一个有趣的现象: ?

    4.3K20

    学一学Flutter新的导航和路由系统

    Navigator 2.0 之前,很难推送弹出多个页面[4],或者删除当前页面下方的页面。但是,如果对Navigator的工作方式感到满意,也可以继续方式使用它。... Navigator 2.0 之前,页面使用【命名路由】或【匿名路由】进栈和出栈。接下来的部分是对这两种方法做一个简要的回顾。...一般用于更新状态(如页面列表),并且必须调用didPop路由来确定弹出是否成功: onPopPage: (route, result) { if (!...使用setState通知框架调用build()方法,该方法_selectedBook为 null时返回一个单页列表。...= book; notifyListeners(); } 当一个新路由推送到应用程序时,Router调用setNewRoutePath,这使我们的应用程序根据路由的更改更新应用程序状态

    4.5K40

    App设计:消息推送和界面路由跳转

    服务端推送消息的操作是非UI操作,个推接入一个IntentService中收到透传消息(透明传输消息): @Override public void onReceiveMessageData(Context...当然也可以是不带通知的推送。 这里payload里面携带了点击推送的操作数据,type="page"表示此推送需要执行一个跳转。...这里假设业务功能上,需要一类推送是弹通知,并处理通知点击路由操作——界面跳转。 这里引入另一个模块——路由模块,路由模块完成界面跳转相关操作。...推送-通知-路由处理流程 上面分别介绍了推送路由模块的大体设计,那么收到一个推送消息,弹出通知,用户点击通知的跳转,这一系列操作是如何贯彻的呢?接下来就看看。...因为需求假定push都需要谈通知,并且通知点击执行路由,那么先得到一个routeMsg,之后调用NotifiyManager.notifyRouteMsg()来发送通知。

    2.9K90

    Android推送的群魔乱舞

    推送概念 为什么一定要接厂商的推送SDK呢?接入收不到推送吗?...华为消息回执模式 可以看到,离线推送的情况下,华为设备展示完通知栏消息,会给华为Push服务一个回执,而华为Push服务会把这个回执头传给开发者服务器,如此,APP服务端就能判断推送是否到达。...不过即使如此,各家ROM的接入规则也个不相同,比如小米有个奇葩的权限叫:“后台弹出界面权限 ”,如果后端服务Push姿势不对,可能会引入奇葩问题:比如,手机能收到PUSH,但是拉起界面,坑爹。...方法传到APP进程,开发者可自行处理,如果想要启动界面,只需要在其中调用context.startActivity方法即可,但是,这种自定义的行为会受到后台弹出界面权限的影响,尤其是高版本的MIUI ROM...服务端调用Message.Builder类的extra(String key, String value)方法,将key设置为Constants.EXTRA_PARAM_NOTIFY_EFFECT,value

    1.8K20

    Flutter 上的一个 Bug 带你了解键盘与路由的另类知识点

    image 如上图所示,可以看到键盘 B 页面打开,退回上一个页面 A 时键盘已经收起,但是原先键盘所在的区域 A 页面变成了空白,而 A 页面内容也被 resize 成了键盘弹出的大小。...其实 Window 的值来源于 Flutter Engine,键盘弹出时 Flutter Engine 会通过 _updateWindowMetrics 方法更新 Window 数据,并执行 window.onMetricsChanged...但是经过调试震惊的发现,程序进入 B 页面弹出键盘,居然会触发了 A 页面 CupertinoPageRoute 的 builder 方法重新执行。...didUpdateWidget 回调中会调用 _history 里所有路由的 changedExternalState() 方法。..._forceRebuildPage 将路由里的 _page 清空,这样自然下次 Route build 时触发的 PageRoute 重新 builder 方法

    1.3K80

    flutter路由

    ; Navigator 方法 作用 pushNamed 按路由名字路由入栈 pushReplacementNamed 按路由名字替换当前路由栈 popAndPushNamed 将当前路线从导航器中弹出,...路由是替换为给定anchorRoute下面的那个 canPop 导航器是否可以弹出。...maybePop 导航器是否可以弹出,可以的话弹出 pop 弹出路由 popUntil 一直弹出直到指定路由 removeRoute 删除指定路由 removeRouteBelow 立即从导航器中删除一条路由...= null) print('接收到的参数:$value'); }); } 这样我们就能push到新页面然后点击返回按钮就能把参数返回到push到它的那个方法,然后then打印出来了: I/flutter...我们想执行跟name有关的Navigator方法就必须先给路由命名,比如pushNamed方法, 注册路由MaterialApp的routes属性,它的定义为: final Map<String,

    1.7K20

    腾讯云IM Flutter-原生混合开发方案接入实践

    触发另一端的方法使用 invokeMethod,监听另一端发来的方法调用使用预挂载的Method Channel监听器。...Future initChat(): 初始化腾讯云IM/登录腾讯云IM/并完成离线推送的初始化及Token上报。该方法使用线程锁机制,保证同时只能执行一个,并在初始化成功,不重复执行。...Demo中,该页面未登录前为加载状态,登录展示会话列表。此外,还需要在这里,完成 didChangeAppLifecycleState监听与前后台切换事件上报,详情请查看离线推送插件文档步骤5。...该模块的核心是,监听收到新的通话邀请时,通过调用Native方法,自动弹出通话页面;并接受 Chat 模块经由Native转发来的通话请求,主动发起通话。首先编写IM引擎。...该方法作为 Flutter Module 的默认入口,Flutter多引擎,使用FlutterEngineGroup管理的背景下,如果没有子Flutter Engine设置任何entry point

    7.1K50

    深入探究 Android Activity 启动模式:CLEAR_TOP 与 NEW_TASK 实战解析

    二、深入探究:小米手机离线推送跳转问题实例分析 本节将阐述小米手机上点击离线推送,跳转到消息页面时,无法弹出手势密码页面的问题定位过程。... onActivityResumed 方法中,我们调用了 upAppLock 方法。...消息页面和手势密码页面都有 FLAG_ACTIVITY_NEW_TASK,弹出手势密码页面有300ms延迟: 正常弹出手势密码页面的情况是,先弹出了手势密码页面,消息页面 300ms 创建,upAppLock...因为手势密码页面延迟弹出,所以页面的弹出时序变成了:先弹出手势密码页面,再弹出消息页面,此时任务栈中,手势密码页面消息页面的下面。...实际开发中,我们可能会遇到一些复杂的场景,如小米手机上的离线推送问题。这时,我们需要深入理解和分析问题,找出问题的根源,才能找到解决问题的方法

    13320

    大厂都在用的管理型网关解密:Fizz管理后台使用教程

    点击菜单后进入路由列表页面,如图所示。 manager_api_auth_list_query.png 新增路由 点击 新增 按钮弹出新增窗口,如图所示。...[manager_api_auth_add_5.png] 编辑路由 点击 编辑 按钮弹出编辑窗口,如图所示。...[manager_aggregate_add_9.png] 是否执行完此步骤结束:勾选实际请求只执行完该步骤即响应结果,执行后续步骤,用于调试使用; 请求方法调用底层服务接口的请求类型,可选GET...调试模式会对网关性能造成影响,因此建议在生产环境打开调试模式,当调试完成及时关闭调试模式,避免打印过多日志造成资源浪费,下面介绍调试模式的使用。...[manager_aggregate_test_11.png] 标题:本次测试数据保存时使用的标题,长度不能超过2000个字符,保存历史测试记录列表显示,如图所示。

    2K51

    开始使用-编写你的第一个Flutter应用程序 顶

    首先,通过添加突出显示的文本创建一个最小类: class RandomWordsState extends State { } 3.添加状态类,IDE会抱怨该类缺少构建方法...的反应风格框架中,调用setState()会触发对State对象的build()方法调用,从而导致UI的更新。...Flutter中,导航器管理包含应用程序路由的堆栈。 将路由推入导航器的堆栈,将显示更新为该路由。 从导航器的堆栈中弹出路由,将显示返回到前一个路由。...3.当用户点击应用栏中的列表图标时,建立一条路由并将其推送到导航器的堆栈。 此操作会更改屏幕以显示新路由。...新页面的内容是使用匿名函数MaterialPageRoute的builder属性中构建的。 将呼叫添加到Navigator.push,如突出显示的代码所示,将路由推送到导航器的堆栈。

    9.5K20

    基于 Kubernetes 的 Spring Cloud 微服务 CICD 实践

    构建镜像,并将 tag 为 SNAPSHOT-BUILD_NUMBER 推送至 DockerHub (其中 BUILD_NUMBER 为 pipeline 活动列表的运行序号)。...第一步:填写基本信息 DevOps 工程中,选择左侧 流水线,然后点击 创建。 ? 弹出的窗口中,输入流水线的基本信息,完成后点击 下一步。... Maven Build 阶段右侧点击 “+” 继续增加一个阶段用于构建并推送镜像至 DockerHub,名称为 Build Register。...注:生产环境推荐将密码设置为空 部署 MySql 再次进入应用商店,选择 MySql 基本信息中,填写应用名称 pig-mysql, 并下一步 应用配置中,编辑 yaml 文件。...创建应用路由 pig-ingress 选择 应用负载 -> 应用路由,点击 创建应用路由。 输入名称 pig-ingress,点击 下一步,点击 添加路由规则。 选择 自动生成。

    2.8K41

    【iOS开发】iOS路由引入及遇到的问题

    从外部(web或者其它app,推送等)打开App指定页面。 统一iOS,Android端的跳转逻辑。 App复杂组件化,组件间解耦。...iOS端的路由库 读了一些github上的开源路由库的代码,实现的原理都是一样的,用一个集合类缓存路由跟处理闭包的对应关系,app启动的时候,注册好支持的URL,当调用openURL的时候,根据给定的...(定义模块类,将注册代码分散到各个模块类中去,模块类的load方法中注册,要检查是否会影响启动速度) 第二种:注册成功,通过runtime统一处理跳转 [MGJRouter registerURLPattern...免去了查找view controller的过程,却引入了查找URL的过程,URL不被支持还得清理。而且调用的参数也没有直接调用来得直观、明确。参数也不好以对象的形式传递。...路由的主要作用应该是解耦,但是如果组件化,还是会存在各种各样的耦合。耦合太多的话,会增加测试的难度。组件间通讯解耦就不局限于路由了,可以面向接口编程,通过接口来对外暴露模块支持的功能。

    1.7K30

    实现 iOS 前台时的推送弹窗效果EBForeNotification

    或许很多童鞋还不知道, iOS 中收到推送通知时,如果 App 处于前台运行的情况下,推送的顶部弹窗是不会弹出来的。...然而就是有很多**的产品经理都会提出类似这样的**需求: 那就是 App 处于前台时一样要弹出推送的窗口,而且还要能点击,能跳转到指定页面,甚至这一需求还涉及到了产品的核心功能。...效果 实际效果如下: 跟系统推送弹窗 UI 效果完全相同 可以自动获取 App 的应用名称,应用图标 弹窗时会自动隐藏系统状态栏、收起自动显示系统状态栏 自带推送声音 时间及下方收拉条的颜色跟当前页面的背景颜色相同...本地弹窗 在任意方法调用以下任 1 行代码即可弹窗 #import "EBForeNotification.h" {......接收远程/本地推送弹窗 接收远程/本地推送,自动在前台展示推送弹窗及声音。

    1.6K10

    实现 iOS 前台时的推送弹窗效果

    推送的顶部弹窗是不会弹出来的。...然而就是有很多**的产品经理都会提出类似这样的**需求: 那就是 App 处于前台时一样要弹出推送的窗口,而且还要能点击,能跳转到指定页面,甚至这一需求还涉及到了产品的核心功能。...跟系统推送弹窗 UI 效果完全相同 可以自动获取 App 的应用名称,应用图标 弹窗时会自动隐藏系统状态栏、收起自动显示系统状态栏 自带推送声音 时间及下方收拉条的颜色跟当前页面的背景颜色相同 自带点击事件...本地弹窗 在任意方法调用以下任 1 行代码即可弹窗 #import "EBForeNotification.h" {......接收远程/本地推送弹窗 接收远程/本地推送,自动在前台展示推送弹窗及声音。

    1.8K20

    Flutter - 混合开发

    修改初始路由 官方文档里面提到,修改初始路由,需要在 Flutter引擎 run 之前,通过 invokeMethod 调用 setInitialRoute 方法进行设置,代码如下 // 修改初始路由...FlutterViewController 时 FlutterEngine 还没加载完毕,所以我们会看到先弹出了一个透明的界面,再显示 /other 路由对应的界面视图。...FlutterAppDelegate 使用 FlutterAppDelegate这个不是必要的操作,但是如果你想让 Flutter模块 也能使用原生的功能的话,建议使用 原生功能 处理 openURL 的回调 列表视图点击状态栏滚到顶部...修改安卓项目 app 目录下的 build.gradle 文件 // app/build.gradle dependencies { ... // 配置flutter依赖 implementation...如图,这样就关联上了,你 dart 文件里面对界面进行任何修改,按 r 进行热重载,按 R 进行热启动。

    1.4K20

    一些APP渗透测试时的小tips

    朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全“设为星标”,否则可能就看不到了啦 绕过APP强制更新 我们拿到一些APP老版本的时候,可能会要求我们进行更新,有时候我们更新,它的接口也是可以使用的...,但是它会弹出更新框,盖住了APP,使我们无法进行操作,所以我们这时候需要绕过APP的强制更新 如何绕过强制更新 一般绕过强制更新有两种方法: 1、某些app启动向后端发送请求,获取APP的最新版本号...,跟本地版本号做笔记,如果两个版本差距过大就会强制弹出窗,要求用户进行更新,但是他的弹窗代码首页,只要切换到别的页面,这个弹窗就没了。...,就会弹出窗强制要求更新,只要执行updateDialog.show();就会弹窗,所以我们需要去hook这个方法,让他运行 后面就要启动frida,然后进行端口转发 adb shell su cd...绕过APP代理检测 当我们尝试进行抓包分析时,发现抓到的包全是乱码形式,没有想要的包,这时可以发现该APP做了代理的检测 这时我们需要绕过代理的检测,抓更底层的包,抓https的包,抓socket

    21810
    领券