news 2026/5/26 3:48:24

flutter路由传参接收时机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
flutter路由传参接收时机
@overridevoidinitState(){super.initState();// 这里没有使用微任务,而是用的0帧Future.delayed(Duration.zero,(){dynamicobj=ModalRoute.of(context)?.settings.arguments;if(obj!=null){classId=obj["classId"];title=obj["title"];needPop=true;}else{classId=widget.classId;title=widget.title;}loadData(update:true);});}
// 使用微任务String_routeGetArguments="";@overridevoidinitState(){super.initState();/// 异步微任务接收Future.microtask((){if(ModalRoute.of(context)!=null){Map<String,dynamic>params=ModalRoute.of(context)!.settings.argumentsasMap<String,dynamic>;_routeGetArguments=params["index"].toString();///更新视图,要不然UI中不会显示出来,记住一定要写setState((){});}else{print("获取不到路由参数");}});}

在Flutter中,这里使用Future.delayed(Duration.zero)而不是微任务,主要是出于构建上下文生命周期的考虑。

为什么使用Future.delayed(Duration.zero)

  1. 避免在build期间访问路由参数

    • initState()中,widget尚未完成首次构建
    • 直接访问ModalRoute.of(context)可能会因为context还未完全建立而返回null
    • Future.delayed(Duration.zero)将执行推迟到当前帧构建完成后
  2. 确保context可用

    // 这样可能无法正确获取路由参数dynamicobj=ModalRoute.of(context)?.settings.arguments;// 可能为null// 使用延迟确保context已准备好Future.delayed(Duration.zero,(){dynamicobj=ModalRoute.of(context)?.settings.arguments;// 更安全});

微任务 vs 延迟零秒的区别

  • 微任务(scheduleMicrotask):在当前事件循环的微任务队列中执行,比UI渲染优先级更高
  • Future.delayed(Duration.zero):在下一个事件循环中执行,确保当前widget构建过程已完成

为什么不是微任务

在这个场景下,使用微任务可能过早执行,因为widget可能还在构建过程中。而Future.delayed(Duration.zero)确保在widget完全构建后再执行参数获取,这样ModalRoute.of(context)能够正确获取到路由参数。

这种方式是Flutter中处理"需要等待widget构建完成后再执行"的常见模式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 10:17:57

限时曝光:Open-AutoGLM隐藏功能被挖出,第4个让AI老手都惊了

第一章&#xff1a;Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统中自动化任务的核心工具&#xff0c;通过编写可执行的文本文件&#xff0c;用户能够组合命令、控制流程并处理数据。编写Shell脚本的第一步是明确解释器路径&#xff0c;通常在脚本首行使用#!/bin/bash指…

作者头像 李华
网站建设 2026/5/23 12:53:47

PaddlePaddle农业无人机图像识别病虫害

PaddlePaddle农业无人机图像识别病虫害 在广袤的稻田上空&#xff0c;一架小型无人机正沿着预设航线平稳飞行。它搭载的高清摄像头不断捕捉作物冠层图像&#xff0c;而机载计算单元正在毫秒间完成对叶片病斑的识别——这不是科幻场景&#xff0c;而是如今许多智慧农场的真实写照…

作者头像 李华
网站建设 2026/5/23 12:53:47

相对照度翘起来了

相对照度仿真中常出现“边缘与中心照度几乎无差异”的现象&#xff0c;这一特征并非源于镜头像差要求低&#xff0c;而是由像面照度的余弦四次方定律、镜头的小视场设计特性及渐晕系数的工程控制共同决定。本文从光学公式推导与实际工程应用角度&#xff0c;解析该现象的核心原…

作者头像 李华
网站建设 2026/5/24 13:52:19

5个核心理念助力YashanDB数据库的成功实施

引言&#xff1a;如何优化数据库查询速度&#xff1f;在现代信息系统中&#xff0c;数据库查询速度直接影响业务系统的响应时间和用户体验。面对海量数据及复杂查询需求&#xff0c;优化数据库查询效率成为关键课题。如何通过底层架构和优化策略提升查询性能&#xff0c;是数据…

作者头像 李华
网站建设 2026/5/23 13:28:22

PaddlePaddle Embedding层训练技巧:词向量微调实战

PaddlePaddle Embedding层训练技巧&#xff1a;词向量微调实战 在中文自然语言处理的实际项目中&#xff0c;我们常常会遇到这样的问题&#xff1a;模型在通用语料上表现尚可&#xff0c;但一碰到金融、医疗或法律等专业领域的文本&#xff0c;准确率就明显下滑。尤其是情感分析…

作者头像 李华