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

干货 | 携程APP NativeRN内嵌Flutter UI混合开发实践和探索

各种技术栈各有优劣和特点,技术选型需团队自身情况而定,没有绝对好坏之分。然而在实际开发中,并不是只选用一种技术栈,那么研究多种技术栈融合和嵌套使用的就有了迫切的必要性。...一、背景 1.1 现状 随着时间的推移,携程app中酒店列表和详情两大页面已经全部转为flutter技术栈,初期的使用场景也比较单一,只主流程使用。...二、RN中使用Flutter 2.1 可行方案的探究 接到这个嵌套需求的时候,考虑到成本最低的方式是直接在大搜页面层上盖列表,即在切换到酒店tab的时候将flutter view盖在上层。...有如下几个弊端: RN无法单独控制flutter view层的展示, 需要通过层层事件通知,复杂且繁琐 RN需要计算出上盖offset的偏移值,不同屏幕尺寸存在偏差 不同tab切换的时候,flutter...,这个过程中会有顿挫感,我们实现中给外层列表添加了滑动效果进行补偿。

2.3K10

Flutter | 滚动组件,ListView,GridVIew等

可滚动组件 当组件内容超过当前显示口(ViewPort)时,如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局; 可滚动组件都直接或间接的包含一个...默认情况下,Flutter 会根据具体的平台分别使用不同的 ScrollPhysics 对象,应用不同的显示效果, IOS 上会出现弹性效果,而在 android 上则会出现微光效果,如果你想在所有的平台下使用同一个效果..., Flutter 中,术语 ViewPort (口) ,如无特别说明,则是指一个 Widget 的实际显示区域; 例如,一个 ListView 的显示区域的高度是 800 像素,虽然其列表项总高度可能远远超过...组件中; 典型的,一个懒加载的列表中,如果将列表包裹在 AutomaticKeepAlive 中,改了吧划出口时,他也不会被 GC 回收(垃圾回收),他会使用 KeepAliveNotification...很多时候我们需要给列表添加一个固定表头,比如实现一个商品列表,就需要在列表添加一个 商品列表 标题 以往的经验告诉我,直接使用一个线性组件,第一个为标题的头,第二个是 listView 即可,如下:

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

师于源码 | Flutter 区域口双向滑动

直到最近在玩 Flutter DevTools, Debugger 面板中惊奇地发现,这个代码面板不就是我苦苦追求的 区域口双向滑动 吗?! ---- 可谓踏破铁鞋无觅处,得来全不费工夫。...也有由于这一点,之前一直没能实现区域口双向滑动的功能。下面是竖直方向上 ScrollBar 构造时存在的一行代码:可以只监听竖直滚动的通知,忽略水平方滚动向通知。...---- 3.通过小案例提取精华 由于 debugger 代码面板中涉及到其他很多东西,这里来精简一下,做个区域口双向滑动的最小案例,来方便大家理解和使用。...tag3 和 tag4 处是准备两个可滑动口,这里简单期间使用 SingleChildScrollView,其他滑动组件都可以。...区域口双向滑动的功能就从 Flutter DevTools 源码中扒出来了,然后分享给大家,这个功能在桌面端中是非常非常必要的。

44920

Flutter&Flame 游戏 - 贰玖】pinball 源码分析 - 口与相机

认识口与相机 相机是我们日常生活中非常常见的概念, Flame 中,相机的概念如何理解呢?现实生活中,当你使用相机拍出一张照片,其囊括的区域是有限的,这个区域也就是口 Viewport。...此时游戏口尺寸和 窗口尺寸 就不是一个概念了。无论应用窗口有多大,对游戏而言口尺寸是恒定的。如下白色背景构件添加到游戏场景中,布满口,口会根据大小来适应窗口 ,不在口区域内的部分会显示底色。...【29/02】 比如上图中默认相机的口尺寸是 900*600 ,并不是指白色区域的是 900*600 逻辑像素。另外,可以看到角色的尺寸没有改动,但在这个口尺寸下,就会显得较小。...camera.moveTo(Vector2(0, size.y/2-37/2)); } 复制代码 ---- 3.相机的伴随移动 相机伴随角色移动很好理解,比如现实生活中拍电影,摄像机需要跟随演员同步运动,这样才能保证演员移动时常驻在视图中... MovableEmber 中可以看到碰撞逻辑,执行的是相机的 setRelativeOffset 方法。可以看出,相机的使用还是比较简单的。

92820

Flutter》-- 6.高级组件

参阅书籍: 《Flutter跨平台开发入门与实践》-- 向治洪(著) 6. 高级组件 6.1 可滚动组件 对于列表和长布局的显示溢出问题,可以使用Flutter提供的可滚动组件来处理。...6.1.1 Scrollable组件 Flutter中,一个可滚动的组件直接或间接包含一个Scrollable组件,它是可滚动组件的基础组件。...实际使用过程中,Flutter提供了SliverList、SliverGrid等可滚动组件的Sliver版本。...6.5.2 自绘组件 Flutter中创建自绘组件需要用到CustomPaint和CustomPainter两个类:CustomPaint绘制阶段提供一个Canvas,即画布;CustomPainter...无论是创建组合组件还是创建自绘组件,首先需要考虑如何将复杂的布局简化,把大问题拆分成若干小问题。

10.6K20

Flutter技术与实战(4)

UI编程范式 要想理解 StatelessWidget 与 StatefulWidget 的使用场景,我们首先需要了解, Flutter 中,如何调整一个控件(Widget)的展示样式,即 UI 编程范式... ListView 中,有两种方式支持分割线: 一种是, itemBuilder 中,根据 index 的值动态创建分割线,也就是将分割线视为列表项的一部分; 另一种是,使用 ListView 的另一个构造方法...比如,列表是否已经滑到底(顶)了?如何快速回到列表顶部?列表滚动是否已经开始,或者是否已经停下来了?...print(metrics.extentBefore);//口顶部距离列表顶部有多大 print(metrics.extentInside);//口范围内的列表长度...需要原生环境才能运行,但是有些资源我们需要在 Flutter 框架运行之前提前使用,比如要给应用添加图标,或是希望等待 Flutter 框架启动时添加启动图,我们就需要在对应的原生工程中完成相应的配置

10.7K20

Flutter 滑动探索】第四本小册上线

一方面,Flutter 的版本更新是比较快的,前三本小册书写时,还未使用空安全。或者 Flutter 有些破坏性的更新,会使旧版本出现问题,从而影响小册的使用。...我一开始对它们也没有很深刻的认识。 当认清 Flutter 滑动体系的构成及运作逻辑后,从源码的角度去认识这些组件的构成和用途,自然能站在更高的维度来使用它们。...遇到关于滑动的异常或新需求时,可以从更广阔的视角去看待问题,而非只知皮毛,管中窥豹。 对源码的探索本身就是一件很有意义的事,从中可以看到创作者对类结构的定义,如何处理类与类之间的关系。...当我们通过源码可以读懂他们所描绘的 风采,在手指滑动列表的那一刻,目之所见已不再仅是口的滑动,还有滑动机制中的各个对象如何像齿轮一样啮合,驱动整个体系的运转。...向上可以连接到 滑动组件 Widget 层 ,向下可以连接到 手势 Gesture 层 、动画 Animation 层 ; 口 和 Sliver 内容相关实现中,还会涉及到 渲染 Rendering

44820

优化 Flutter 应用开发:探索 ViewModel 的威力

图中使用 Consumer 或 Provider.of 获取 ViewModel:需要访问 ViewModel 的地方使用 Consumer 或 Provider.of 获取 ViewModel...图中使用 GetBuilder 或 Obx 获取 Controller:需要访问 Controller 的地方使用 GetBuilder 或 Obx 获取 Controller 实例,并根据需要更新视图...使用 Provider 或 ConsumerWidget 提供 ViewModel:图中使用 Provider 或 ConsumerWidget 提供 ViewModel 实例,并根据需要更新视图。...状态监听和通知:ViewModel 可以使用状态监听或通知机制来通知视图更新,例如使用 ChangeNotifier 实现状态监听,保证视图能够及时响应数据变化。...该应用程序包含一个输入框用于添加新的待办事项,以及一个列表用于显示已添加的待办事项。

26210

Flutter 知识集锦 | 监听与通知 ChangeNotifier

所以 ChangeNotifier 的角色很明显,他的职责是:在数据变化时,触发通知的动作。整个过程中,发布者和订阅者是一对多的关系。所以对于通知器来说,需要维护一个列表通知订阅者。...---- 下面是添加监听的实现,调试中是详情页进入的时刻。 addListener 处理完毕后,更新的回调函数将会被加入到 _listeners 回调列表中。...这就是通过函数对象,实现的添加监听和触发通知的一种机制。 ---- 4....- 发布通知 的机制,对于单类型的数据有 ValueNotifier 派生类方便使用。...我们平时使用的 TabController、ScrollController、TextEditingController、FocusNode 等;另外,滑动机制中,手势事件产生的数据和口感知的滑动偏移量

89021

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

背景 竞争激烈的移动时代,各大互联网公司都在争相抢夺市场,如何提高研发效率,快速迭代产品成为非常重要的因素。 跨平台方案能够节约一定开发、测试、运维成本。...但是复杂页面上,特别是列表的渲染上,还是存在一定的问题,促使我们去尝试一些新的解决方案。Flutter官宣自绘UI引擎,采用原生方式做渲染,媲美原生体验。...随之而来的问题就是,组件之间怎么相互通讯,比如变更了登录态,如何通知其他模块刷新? 推荐使用Provider来管理各个组件的状态,我们实践下来 ,主体布局采用MVVM模式是比较方便做模块化编程的。...选中 View > Tool Windows > Flutter Performance。 ? 点击上面图中的箭头所指的按钮,就会在手机或模拟器中打开(如下图所示)。...收集了Flutter开发过程中常见并且大量发生的问题,并提供了相应的解决方案。 复杂业务和长列表上面体验,确实 Flutter 优于 React Native。

2.1K30

Flutter 旋转轮

pub 地址:https://pub.dev/packages/flutter_spinwheel 效果演示: 该演示视频展示了如何Flutter使用自旋轮。...它显示了如何flutter应用程序中使用flutter_spinwheel」软件包运行「旋转轮」,并显示了当您点击该项目时,旋转器将移动。同样,您将沿顺时针/逆时针的任何方向移动微调器。...使用 添加依赖 flutter_spinwheel: ^0.1.0 引入 import 'package:flutter_spinwheel/flutter_spinwheel.dart'; 运行命令...我们将创建由名称选择给出的动态列表列表。同样,我们将创建一个由名称select给定的整数。...**在此构建器中,我们将添加itemCount和itemBuilder。itemBuilder中,我们将导航容器小部件。小部件内,我们将添加一个边距,即容器的高度。

8.7K20

Flutter实现底部菜单导航

我们来一个清单列表: 按钮图标区域。由于展示的方式都是一样的,我们需要有一个单独的控件,循环出来就好。 工具栏区域。用于展示按钮图标,并且能固定在底部。 首页。...我们点击的图标按钮的时候,展示不同的界面。 我们底部的按钮是不会刷新的,界面会刷新,如何实现? 我们界面展示区域分为两块,一块展示底部的工具栏,一块展示页面。...工程 可以按照工程目录图中的结构,将对应的文件建好。...'; import 'navigation_icon_view.dart'; // 如果是同一个包的路径下,可以直接使用对应的文件名 // 创建一个 带有状态的 Widget Index class...由于不同的界面,对应的源码都是和下面的是一样的,只是 class 的名字不一样,就都可以使用同样的模版复制过去就有可以了。

4.3K10

Flutter Widget框架之旅 顶

注意:如果您想通过深入了解某些代码来熟悉Flutter,请查看构建Flutter布局并为Flutter App添加交互功能。...Flutter使用StatefulWidgets来捕捉这个想法。 StatefulWidgets是特殊的小部件,它知道如何生成状态对象,然后用它来保持状态。...Flutter中,更改通知通过回调的方式“向上”流,而当前状态则“向下”流向呈现的无状态小部件。重定向这一流程的共同父母是State。...例如,ShoppingList窗口部件构建了足够的ShoppingListItem实例来填充其可见区域: 如果没有键,当前构建中的第一个条目将始终与前一个构建中的第一个条目同步,即使语义上,列表中的第一个条目刚刚滚动屏幕并且不再在口中可见...此外,语义上同步条目意味着保留在有状态子部件中的状态将保持附加到相同的语义条目而不是口中的相同数字位置上的条目。 全局Key 主要文章:GlobalKey 您可以使用全局键来唯一标识子窗口部件。

6.7K20

牛赞:音视频前端跨平台技术应用

蓝色部分是Flutter的核心Engine,实现Flutter渲染引擎、Dart虚拟机、Platform通信通道、时间通知、插件架构等功能。...上段提到了Flutter通信和原生通信仅支持基本的数据类型,这会带来以下几点挑战: 如何实现复杂的类结构体传输? 图片如何高效Flutter和原生SDK之间传输?...延迟能够控制300ms以内,直播过程中提供高级美颜如瘦脸、微脸,图中可以明显看到微脸操作后的效果对比。视频会议适合交流工作。...重点介绍一下浏览器带来的三个新特性:编码层面,可以应用webcodecs做低延迟编解码,动态控制编码的关键帧、编码码率;传输部分,使用WebTransport提供灵活可控的高性能UDP传输能力;WebAssenbly...腾讯云音视频音视频领域已有超过21年的技术积累,持续支持国内90%的音视频客户实现云上创新,独家具备 RT-ONE™ 全球网络,在此基础上,构建了业界最完整的 PaaS 产品家族,并通过腾讯云立方

2.6K10

【译】Flutter beta 2 Now

对于Windows用户,我们还添加了一个酷炫的新Flutter控制台,以便在下载后立即开始使用Flutter命令: ?...它将一串字符串和任务传递给一个需要一个小部件列表的小部件。静态分析并没有捕捉到这一点,因为程序员有意使用松散的静态类型作为待办事项列表(List简写为List)。...接下来考虑应用程序如何使用列表: 由于对待办事项列表项目的访问是有条件的,所以错误会在晚些时候发生。...Flutter beta 1中,启动时不会出现错误,只有当用户点击该按钮后,才会通知字符串不能用作小部件: 通过Dart 2中新的完整运行时检查,我们可以避免像这样的“等待发生的错误”,而不是提前失败...在这种情况下,只要应用程序启动,我们就会失败,动态列表todo将传递给TodoList构造函数,该构造函数需要List: 控制台输出: Dart 2和可选的new / const Dart 2还增加了调用构造函数时使新和

2.3K30

关于Flutter 2.5稳定版你知道多少?

当我们讨论滚动时,另一个改进是增加了额外的滚动指标通知 (#85221、#85499),即使用户没有滚动,也会提供可滚动区域的通知。... Flutter 2.0 中新增的 ScaffoldMessenger,它提供了一种强大的方式,屏幕底部显示 SnackBars 以向用户提供通知。... Flutter 2.5 中,现在你可以 Scaffold 顶部添加一个横幅,在用户将其关闭之前,它将一直保持原位。...DefaultTextEditingShortcuts 类包含了 Flutter 每个平台上支持的每个键盘快捷方式的列表。...弃用意味着这些平台可能可以正常使用 Flutter,但我们不会在这些平台上测试新版本的 Flutter 或插件。您可以 Flutter 文档网站 上看到 目前 Flutter 支持的平台列表

3.7K20
领券