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

干货 | 携程火车票Flutter最佳实践

Flutter是由谷歌开源跨平台框架,可以快速在 iOS 和 Android 上构建高质量原生用户界面。...纯 Flutter 项目构建 Profile 模式 flutter run —profile 命令是使用 Profile 模式来编译。...### 开启Profile模式 TRIP_FLUTTER_PROFILE=true ### 设置profile模式下js使用产物目录(过程1构建 ....Provider时,未判断界面状态通知界面刷新问题 1)错误信息展示 Null check operator used on a null value; 2)错误分析 一般情况下出现这种问题是由于界面销毁后...初衷,Provider 状态管理实际使用,建议Flutter主体构架采用MVVM模式,还介绍了一些Flutter性能检测、量化工具和一些性能优化点供大家参考。

2.1K30

Flutter完整开发实战详解(十五、全面理解State与Provider)

我们知道 Flutter 宇宙中万物皆 Widget ,而 Widget 是 @immutable 即不可变,所以每个 Widget 状态都代表了一。...了解这个两个概念后,我们先看下图,在 Flutter构建一个 Widget ,首先会创建出这个 Widget Element ,而事实上 State 实现跨共享,就是将 State 保存在Element...问题就在于前面 StatefulElement 构建方法和 update 方法: State 只在 StatefulElement 构建方法中创建,当我们调用 setState 触发 update...(context), child, ); } 那我们直接使用 Provider.of(context) ,不使用 Consumer 可以吗?...Provider 使用指南上,更详细 Vadaski Flutter | 状态管理指南篇——Provider》 已经写过,我就不重复写轮子了,感兴趣可以过去看看。

3.5K21
您找到你想要的搜索结果了吗?
是的
没有找到

Flutter 2.8 release 发布,快来看看新特性吧

Flutter 通过影响 Dart VM 垃圾收集策略方式,可以有助于避免在应用启动期间出现不合时宜 GC 。...例如在 Android 上渲染第一之前,Flutter 现在 只通知 Dart VM TRIM_LEVEL_RUNNING_CRITICAL 及以上内存压力信号,在本地测试中,这个更改将低端设备上第一时间减少了多达...image.png 此外为了创建更少卡顿动画效果,开发者可能会想要更多关于光栅缓存行为性能跟踪信息,因为这个行为对于 Flutter 来说是比较昂贵,可以重复使用图片进行 blit, 而不是在每一上重新绘制它们...上运行时它也会按开发者预期工作: image.png 请注意,其实当前 webview_flutter for web 实现还有许多限制,因为它是使用 构建 iframe 实现。...你可以使用flutter channel 命令决定想要哪个频道,以下是 Flutter 团队对每个频道看法: stable频道代表我们拥有的最高质量构建

4.2K20

干货 | 携程酒店Flutter性能优化实践

一 、前言 携程酒店业务使用Flutter技术开发时间快接近两年,这期间有列表页、详情页、相册页等页面使用Flutter技术栈进行了跨平台整合,大大提高了研发效率。...图2 Widget build耗时与对应执行方法 2.3 具体实践方案 a) 控制setState次数,使用Provider机制减小刷新范围 我们业务开发是MVVM结构,数据驱动UI更新。...图5 酒店详情页周边内容运用懒加载减少构建次数 f) 分渲染 错峰加载方案使用渲染,分渲染原理是将一棵Widget树中部分绘制时间较长节点在第一时只占位不绘制,等到下一开始时,节点替换占位...使用占位widget伪代码如下,build方法返回占位widget,并在widget构建结束时替换占位widget并触发绘制。...我们flutter业务代码采用MVVM结构,将服务请求结果处理完数据放入ViewModel中,ViewModel数据更新通过Provider机制触发页面UI更新。

1.9K10

Flutter技术与实战(6)

Flutter异常 Flutter 异常指的是,Flutter 程序中 Dart 代码运行时意外发生错误事件。我们可以通过与 Java 类似的 try-catch 机制来捕获它。...比如,当布局不合规范时,Flutter 就会自动弹出一个触目惊心红色错误界面,如下所示。...比如,位于第 4 层网络引擎中,会针对特定错误码跳转到位于第 1 层统一错误页,这时我们就可以利用 Router 提供命名路由跳转,在不感知错误实现情况下来完成。...无论使用哪种方式,Flutter 应用工程都为我们提供了一体化标准解决方案,能够在集成构建时自动管理原生代码宿主及其相应原生依赖,因此我们只需要在应用层使用 pubspec.yaml 文件去管理 Dart...接下来,我们就需要在 Flutter 模块工程中使用这个插件,并提供对应构建产物封装,提供给原生工程使用了。这部分内容主要包括以下 3 大部分。

2.7K10

Google IO Extended | Flutter 游戏和全平台正式版支持下 Flutter 现状

当然,如果你需要实现更复杂游戏场景,例如 pinball 这样游戏效果,那么你可能就需要第三方 Flame 包来完成,这里 GIF 有些掉,但是实际使用过程中,如果我不说,你不会发现这是一个...那么其实你已经具备使用 Flame 构建游戏所需基础。...对于这些使用是 sprite sheets,它包含在带有 SpriteAnimationComponent ,对于每个元素都有一个文件,其中包含不同方向图像、文件中帧数以及之间时间。...全平台 Flutter 3.0 另外一个重点就是增加了对 macOS 和 Linux 应用程序稳定支持,这是 Flutter 一个里程碑,现在借助 Flutter 3.0,开发者可以通过一个代码库为六个平台构建应用...Superlist 将列表、任务和自由格式内容,组合成全新待办事项列表和个人计划,提供协作能力,同时 Superlist 也是开源项目 super_editor 维护组织,所以社区支持其实对于 Flutter

1.2K40

Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动

这是我参与「掘金日新计划 · 6 月更文挑战」第 8 天,点击查看活动详情 ---- 前言 这是一套 张风捷特烈 出品 Flutter&Flame 系列教程,发布于掘金社区。...| 文字构件使用Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...使用细节 【Flutter&Flame 游戏 - 拾贰】探索构件 | 角色管理 【Flutter&Flame 游戏 - 拾叁】碰撞检测 | CollisionCallbacks 【Flutter&Flame...:只要在更新期间,校验一下偏移量是否大于某个值,再添加即可。...Effect 效果移除 上面的处理会出现一个问题,如下图所示:当前一次移动动画没有结束前,点一下其他位置,由于两个动画效果同时作用在构建上,所以无法正常完成移动到某点任务。

55721

热修复、生态、混合工程 | Flutter 2019 产品路线图正式公布

如果开发者们有特别的性能基准要求,可以通过 devicelab 测试数据给我们看一下; 改进 Flutter 测试流程:以确保为开发者们提供稳定版本构建不会出现版本回归; 改进错误消息提醒:通过 Google...易用性 为新晋使用 Flutter 开发者清扫绊脚石,如: 完善和满足希望使用混合工程,即将 Flutter 应用于现有工程项目的开发者们需求,如提供新插件模板和 Android 内嵌 API;...; 在非完整工具链和运行环境下更容易体验和使用 Flutter。...生态系统 在 Flutter,生态系统意味着使用 Flutter 开发者们可以便捷地完成任何他们想做事情,甚至在 Flutter 框架不提供提供开箱即用支持情况下。...移动端之外支持 我们将继续把 Flutter 拓展到更多形态终端,以实现我们目标:构建一个便携 UI 工具包,在任何需要地方画出每一像素。

81220

记住,永远都不要在 Flutter使用全局变量

Flutter使用全局变量缺点 在 Flutter使用全局变量一直受到质疑和批评,通常被认为是不好做法。以下是使用全局变量缺点: 1....全局变量导致“面条”代码 由于程序中每个函数都可以修改全局变量,因此很难跟踪更改。如果你正在构建一个大型应用程序,在 Flutter使用全局变量情况会升级。...即使你正在构建小型 Flutter 应用程序,全局变量也会导致灾难。 4. 全局变量无法封装 全局变量使得无法实现封装,这是一种将代码包装到单个单元中 OOP 概念。...使用以下代码片段添加和使用 Provider 包插件: dependencies: flutter: sdk: flutter provider: ^3.1.0 Provider 程序包还允许你与多个类共享小部件状态...特殊功能是它在编译过程中检测错误。这将节省你时间,因为你将在运行时将缺陷添加到你应用程序之前修复错误。 4. Redux Redux 是一个库,可帮助你有效地管理小部件数据状态。

3.4K30

Flutter 实战】pubspec.yaml 配置文件详解

如果是插件,那么用户可以通过此版本号指定使用哪个版本, path_provider: ^1.6.22 版本指定有多种形式: 不指定或者 any path_provider: path_provider...此方式表示大版本不变,小版本使用最新版本,例如^1.6.22 相当于'>=1.6.22 <2.0.0'` path_provider: ^1.6.22 author homepage issue_tracker...,dependencies 和 dev_dependencies 就像其名字一样,dependencies 下所有依赖会编译到项目中,而 dev_dependencies 仅仅是运行期间包,比如自动生成代码库...path_provider, 但版本为 0.5.0,那么我最终到底依赖哪个版本,此时执行 flutter pub get 则会出现如下错误: Running "flutter pub get" in...: ^1.6.22 添加此属性后,所有 path_provider 插件都会使用同一个最新版本,使用此字段执行 flutter pub get 则会出现如下警告: /Users/mengqingdong

2.4K50

Flutter 刷新页面:通过下拉刷新提升用户体验

然而,对于很复杂应用,我们可能需要使用状态管理解决方案,比如 Provider, Riverpod, BLoC, 或者 Redux,它们能够帮助我们更高效管理状态。...当在 Flutter 中实现下拉刷新,使用 Provider,我们需要通过一个 provider 来暴露一个方法来刷新数据,然后在 onRefresh 回调函数中调用该方法。...构建用于刷新功能 Widget Tree 在一个 Flutter 应用中创建一个直观且响应式 pull-to-refresh 特性,需要细心构建 widget tree。...热加载和高效开发 Flutter 热加载功能彻底改变了开发效率,让我们几乎可以立马看到代码更改结果,而无需重新构建整个程序。...为了充分利用热加载,请使用模块化构建代码,在不同函数或者类中分离获取刷新数据逻辑和更新 UI。这会让我们独立更改和测试小块代码,降低引入错误风险并加快开发过程。

10910

Flutter 热修复,生态、跨端计划公布

/flutter/wiki/Roadmap** ---- 2019 Flutter 计划 Flutter 1.2 发布,带来全新 Web 开发工具, 对我们来说是一个很重要起点,长路漫漫,我们仍有很多工作要做...如果开发者们有特别的性能基准要求,可以通过 devicelab 测试数据给我们看一下; 改进 Flutter 测试流程:以确保为开发者们提供稳定版本构建不会出现版本回归; 改进错误消息提醒:通过 Google...易用性 为新晋使用 Flutter 开发者清扫绊脚石,如: 完善和满足希望使用混合工程,即将 Flutter 应用于现有工程项目的开发者们需求,如提供新插件模板和 Android 内嵌 API;...生态系统 在 Flutter,生态系统意味着使用 Flutter 开发者们可以便捷地完成任何他们想做事情,甚至在 Flutter 框架不提供提供开箱即用支持情况下。...移动端之外支持 我们将继续把 Flutter 拓展到更多形态终端,以实现我们目标:构建一个便携 UI 工具包,在任何需要地方画出每一像素。

3K20

Flutter 2.8 新特性【flutter专题17】

Flutter 通过影响 Dart VM 垃圾收集策略方式,可以有助于避免在应用启动期间出现不合时宜 GC 。...例如在 Android 上渲染第一之前,Flutter 现在 只通知 Dart VM TRIM_LEVEL_RUNNING_CRITICAL 及以上内存压力信号,在本地测试中,这个更改将低端设备上第一时间减少了多达...出于严谨考虑,在之前版本中 Flutter 创建平台视图时会阻塞平台线程,这次通过详细推理和测试 确定了可以删除一些序列化,这个改进消除了在低端设备上启动 Google Pay 期间超过 100...此外为了创建更少卡顿动画效果,开发者可能会想要更多关于光栅缓存行为性能跟踪信息,因为这个行为对于 Flutter 来说是比较昂贵,可以重复使用图片进行 blit, 而不是在每一上重新绘制它们,...如果开发者使用是 google_maps_flutter 插件或 video_player 插件 web 版本,或者你已经遵循了 Flutter 团队关于如何优化网络上显示图像建议,那么您其实已经在使用

2.4K10

Flutter 移动端架构实践:Widget-Async-Bloc-Service

我对状态管理和app架构看法 过去一年中,我构建了若干大大小小Flutter app,期间我遇到并解决了许多问题,这让我明白了状态管理没有银弹。...将其聚集在一起:使用Provider包 一旦我们定义了BLoC和Service,我们就需要将其与控件相关联。 这段时间以来,我一直在使用 Remi Rousselet Provider 包。...2.代码可读性并不高,我们显示错误地方与执行登录地方并不一致。 所以,不要这样做,也不要使用上文所展示try/catch。 我们能通过WABS创建异步服务吗?...本文源码 Flutter & Firebase构建身份验证流程: https://github.com/bizz84/firebase_auth_demo_flutter 接下来这个项目,它针对我...Flutter和Firebase Udemy课程中相关深入资料进行了补充,链接如下: Flutter&Firebase:构建一个完整iOS和Android应用程序

16K20

Flutter&Flame 游戏 - 贰柒】pinball 源码分析 - 角色选择与玩法面板

这是我参与「掘金日新计划 · 6 月更文挑战」第 28 天,点击查看活动详情 ---- 前言 这是一套 张风捷特烈 出品 Flutter&Flame 系列教程,发布于掘金社区。...】Canvas 参上 | 角色血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件使用Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter...可以思考一下:这个模块是相对独立,而且有一定拓展需求,比如增加其他角色,可以在该包在进行处理。而不是全部塞在主项目中,这样有利于对项目结构划分,也能让读者更容易理解。...---- 这里通过 SelectedCharacter 组件进行展示某个角色,主要就是一个 Column 上下结构。下方不断运动序列通过 SpriteAnimationWidget 进行展示。...从这里可以看出 Bloc 处理可以根据状态来构建组件,也可以监听状态变化,进行逻辑处理。

91940

Flutter&Flame游戏 - 拾】探索构件 | Component 生命周期回调

这是我参与「掘金日新计划 · 6 月更文挑战」第 11 天,点击查看活动详情 ---- 前言 这是一套 张风捷特烈 出品 Flutter&Flame 系列教程,发布于掘金社区。...| 文字构件使用Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...可见在 Flutter 程序开始,BuildOwner#buildScope 构建组件时, _GameWidgetState 会触发 loaderFuture 方法。...update 方法本质上由 Ticker 触发,这点可以通过断点调试进行应证,如下所示: image.png ---- 而 render 方法本质上是在绘制期间被触发,也就是 RendererBinding.drawFrame...Ticker 触发新申请,回调 update 方法,在新来临是触发 drawFrame 方法,回调 render 方法,所以这两者先后关系是很明确

49920

重走Flutter状态管理之路—Riverpod入门篇

其实Provider使用上已经非常不错了,只不过随着Flutter更加深入,大家对它需求也就越来越高,特别是对Provider中因为InheritedWidget层次问题导致异常和BuildContext...此外,任何Provider都可以被重写,以便在测试期间有不同行为,这可以轻松地测试一个非常具体行为 允许与高级功能轻松集成,如logging或pull-to-refresh 首先,我们通过一个简单例子...ConsumerWidget在使用上与StatelessWidget相同,唯一区别是它构建方法上有一个额外参数:"ref "对象。 一个典型ConsumerWidget看起来像这样。...❞ 通过ref.watch观察Provider状态 ref.watch在Widget构建方法中使用,或者在Provider主体中使用,以使得Widget/Provider可以监听另一个Provider...,会导致难以追踪错误

2.6K20

Flutter技术与实战(5)

,由于网络通信期间有可能会出现异常(比如,域名无法解析、超时等),因此我们需要使用 try-catch 来捕获这些未知错误,防止程序出现异常。...因为搞不清楚哪些代码可能会在运行时用到,因此使用反射后,会默认使用所有代码构建应用程序,这就导致编译器无法优化编译期间使用代码,应用安装包体积无法进一步压缩,这对于自带 Dart 虚拟机 Flutter...这时,我们就可以得到在这期间应用执行情况了。 Performance 记录应用执行情况叫做 CPU 图,又被称为火焰图。...相比于单元测试,UI 测试覆盖范围更广、更关注流程和交互,可以找到单元测试期间无法找到错误。...相比于单元测试,UI 测试覆盖范围更广、更关注流程和交互,可以找到单元测试期间无法找到错误

15.6K30
领券