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

【Kotlin 协程】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合 )

文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 中调用挂起函数返回多个返回值 四、协程中调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...sequence 中调用挂起函数返回多个返回值 ---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样在挂起时 , 不影响主线程的其它操作 , 此时会报如下错误...SequenceScope 对象的方法 ; 在该匿名函数中 , 不能调用 SequenceScope 之外定义的挂起函数 , 这样做是为了保证该类的执行性能 ; /** * 构建一个[Sequence...SequenceScope 类上 , 有一个 @RestrictsSuspension 注解 , RestrictsSuspension 注解的作用是 限制挂起 , 在该类中不能调用其它的挂起函数 ,...---- 如果要 以异步方式 返回多个返回值 , 可以在协程中调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package

8.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【开源 UI 组件】Flutter 图表范围选择器

    前言 最近有一个小需求:图表支持局部显示,如下底部的区域选择器支持 左右拖动调节中间区域 拖拽中间区域,可以进行移动 图表数据根据中间区域的占比进行显示部分数据 ---- 这样当图表的数据量过大,不宜全部展示时...大家可以通过依赖进行添加 dependencies: chart_range_selector: ^1.0.0 这个库本身是作为独立 UI 组件存在的,在拖拽过程中改变区域范围时,会触发回调。...重点在于事件的处理,拖拽不同的部位需要处理不同的逻辑,还涉及对拖拽部位的校验、高亮示意,对这块的整合还是需要一定的功力的。...另外,三个可拖拽物的激活状态是通过 RangeData#operationType 进行判断的。 ---- 也就是说所有问题的焦点都集中在 手势交互 中对 RangeData 数据的更新。...结合图表使用 下面是结合 charts_flutter 图标库实现的范围显示案例。

    1.3K50

    Flutter Performance

    如果是在 UI 图表出现了红色竖条,则表明 Dart 代码消耗了大量资源 而如果红色竖条是在 GPU 图表出现的,意味着场景太复杂导致无法快速渲染 更多信息请参考 Flutter 线程 使用 Performance...帧渲染图表 帧渲染图表跟 Performance Overlay 很类似。 图表中的每个条形框都代表一帧,每帧中不同线程的执行情况以不同颜色表示。...对应用性能影响小,可以采集更长时间 图表 火焰图 - 展示的是自上而下的调用堆栈信息,即上面的堆栈帧调用下面的堆栈帧。每一个堆栈帧的宽度代表 CPU 执行的时长。...Flutter Performance 打开性能工具窗口,在 Widget rebuild stats 中勾选 Track widget rebuilds 来查看 widget 的重建信息。...不应在 build() 方法中调用 debugDumpApp(),可以在调用 runApp() 后的任何时候调用 debugDumpApp()。

    1.9K50

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

    概述 如今,状态管理 是Flutter的热门话题。 在过去的一年中,各种不同的状态管理技术被提出,但截至目前,Flutter的团队和相关社区还没有得出单一的 首选解决方案。...在Flutter现有的状态管理技术中,该模式在很大程度上依赖于 BLoCs ,并且非常类似于 RxVMS 架构。...2.我不鼓励在一个BLoC中使用多个StreamControllers。相反,我更喜欢将代码分割到两个或更多的BLoC类中,以便更好地分离关注点。...数据层/BLoC中的行为 1.BLoC应该是纯Dart的——没有UI代码,没有导入Flutter相关类和文件,也没有在BLoC中使用BuildContext。...结论 本文是对WABS的深入介绍,WABS是我在多个项目中使用了一段时间后探索得出的架构模式。 说实话,随着时间的推移我一直在改进它,在我写这篇文章之前它都还没有名字。

    16.1K20

    Flutter 核心原理与混合开发模式

    在 「Fan 直播」的 Flutter 混合开发实践中,我们总结了一些 Flutter 混合开发的经验。...Flutter 的展示过程分为四个阶段: 布局 绘制 合成 渲染 其中,布局和绘制在 RenderObject 中完成,Flutter 采用深度优先机制遍历渲染对象树,确定树中各个对象的位置和尺寸,并把它们绘制到不同的图层上...这类 Hybrid 开发模式,只需要将开发一次  Web,就可以同时在多个系统的浏览器组件中运行,保持基本一致的体验,是迄今为止热度很高的跨端开发模式。...flutter thrio 在连续的 Flutter 页面跳转场景下,内存测试图表如下: ?...内存增量 从这张图表中我们可以得到以下几点信息: 红色区域是启动 Flutter Engine 的内存增量,基本接近 30MB,Flutter Engine 是一个比较重的对象。

    2.4K52

    Flutter 2.5正式版发布,带来重大更新

    在经过了近两个月的版本迭代后,Flutter 官方在昨天发布了Flutter 2.5版本。...同时,在此版本中,我们添加了文本编辑键盘快捷键可覆盖的功能( #85381),这是在 Flutter 2.0 及其新的文本编辑功能的基础上的进一步优化。...借助DevTools,我们可以Frames图表中看到页面被渲染的完整渲染过程,并且可以在应用程序呈现时填充到此图表中,从此图表中选择一个帧就可以导航到该帧的时间线事件,我们可以使用这些事件来帮助诊断应用程序中的着色器编译卡顿问题...Visual Studio Code 测试运行器看起来与当前的 Dart 和 Flutter 测试运行器略有不同,它会跨会话保留运行结果。...目前,Flutter 团队的一些插件中已经使用了 Pigeon,在此版本中它提供了更多有用的错误消息,增加了对泛型、原始数据类型作为参数和返回类型以及多个参数的支持,预计开发者将来会更频繁地使用它。

    4.4K50

    Flutter 2.5正式版发布,带来多项重大更新

    在经过了近两个月的版本迭代后,Flutter 官方在昨天发布了Flutter 2.5版本。...同时,在此版本中,我们添加了文本编辑键盘快捷键可覆盖的功能( #85381),这是在 Flutter 2.0 及其新的文本编辑功能的基础上的进一步优化。...[在这里插入图片描述] 借助DevTools,我们可以Frames图表中看到页面被渲染的完整渲染过程,并且可以在应用程序呈现时填充到此图表中,从此图表中选择一个帧就可以导航到该帧的时间线事件,我们可以使用这些事件来帮助诊断应用程序中的着色器编译卡顿问题...[在这里插入图片描述] Visual Studio Code 测试运行器看起来与当前的 Dart 和 Flutter 测试运行器略有不同,它会跨会话保留运行结果。...[在这里插入图片描述] 目前,Flutter 团队的一些插件中已经使用了 Pigeon,在此版本中它提供了更多有用的错误消息,增加了对泛型、原始数据类型作为参数和返回类型以及多个参数的支持,预计开发者将来会更频繁地使用它

    3.6K00

    Flutter原理:三棵重要的树(渲染过程、布局约束、应用视图的构建等)

    在 Flutter 中,一个 Widget 通过多次复用可以对应多个 Element 实例,Element 才是我们真正在屏幕上显示的元素。...熟悉了 Flutter 中的上述三颗树,相信读者会对组件的渲染过程有了一个清晰的认识,这对我们之后学习常用组件有很大的帮助,我们需要用不同的眼光去看待我们所建立的布局和控件,之后我们也会更加深入的去理解其中更不为人知的奥秘...这里,Flutter 中的布局过程可用下图表示,在上述构建完成渲染树后,父渲染对象会将布局约束信息向下传递,子渲染对象根据自己的渲染情况返回 Size,Size 数据会向上传递,最终父渲染对象完成布局过程...Flutter 中的 Widget 一直在重建,每次重建之后,Element 都会采用相应的措施来确定是否我对应的新控件跟之前引用旧控件是否有所改变,如果没改变则只需要做更新操作,如果前后不同则会重创建...方法生成,该对象内部提供多个属性及方法来帮助框架层中的组件如何布局渲染。

    1.8K40

    来一份Flutter渲染分析

    : 这里面就是关键的逻辑了: 这里由 buildOwner 构建 scope ,然后在调用父类的 drawFrame 实现。...这里如果 node 有多个 child 的时候,就会调用 _updateCompositingBits : 这个时候如果 isRepaintBoundary 是true并且 needsCompositing...这个机制可以让我们在开发中自己合理的指定 RepaintBoundary,这样可以避免不必要的重绘逻辑。...这里会直接调用 _repaintCompositedChild 方法 这里最后调用了 paint 函数: 总结 到这里大致的 Flutter 渲染流程就看完了。...这部分工作流程对我们的开发工作还是有一些启发的: 可以利用 Flutter 在渲染的过程中添加的一些回调在debug的时候进行一些布局树的分析、渲染时长的分析等等。

    47420

    Flutter 后台任务

    在 Flutter 中,MethodChannel 和 EventChannel 是可以从本地端发送和接收信息到 Dart 端的方式,它们被用于 Flutter 插件。...为了从本地后台运行 Dart 代码,需要执行几个步骤,在详细介绍代码前,我想用图表来展示它,然后解释它: 让我们来看看这个图表并解释每个部分,如您所见,有六个主要步骤: 在 Dart 中定义一个无参...让我们转到插件侧看看它的样子: 在插件 Dart 代码中获取 RawHandle 在上面的代码示例中,我们可以看到一个经典的 Flutter 插件 Dart 端。...然后,在第 17 行,使用 methodChannel 将其转发到本地端。在图表中,这一部分对应于步骤 2 和 2'。...在第 21 行将其保存在一个 SharedPreference 持久存储中。 第二部分只是一个辅助类,用于保存和读取SharedPreferences中的数据。 这个解释是针对我们图表中的 2”。

    3.3K30

    干货 | 从47%到80%,携程酒店APP流畅度提升实践

    2.2.1 Flutter页面可交互加载时长采集原理 在Flutter中,最终的UI树其实是由一个个独立的Element节点构成。...在实际监控中,会针对不同的指标,设计不同的监控标准,如:慢加载、白屏、奔溃、卡顿等系统因素,除了大盘指标外,还增加了各指标影响占比、酒店主页面的报错率趋势、版本对比趋势、报错机型top分布等。...如下图所示: GPU线程的绘制性能情况在图表的上方,CPU UI线程的绘制情况显示在图表下方,蓝色垂线表示已渲染的帧,绿色色垂线代表的是当前帧。...Performance 是一个强大的性能分析工具,能够以时间轴的方式展示 CPU 的调用栈和执行时间,去检查代码中可疑的方法调用。...优化前,如下图,页面初始化/开始加载/加载中/加载完成,均触发多个action,由于action是异步的,每个数据处理模块都有一些耗时和异步,加载完成后页面可能已经刷新,此处有可能展示了未处理完成的数据

    1.6K30

    Flutter性能优化

    我们可以在 Android Studio 中通过菜单栏点击 Run=>Profile=>main.dart 选项启动应用, 也可以通过命令行参数 flutter run --profile 运行 Flutter...那先来了解一下 Flutter 中的4个主要线程分别承担了什么职责。 Platform线程:插件代码运行的线程;即Android/iOS的主线程, UI线程:在Dart虚拟机中执行Dart代码。...GPU线程:把上面提到的视图树渲染出来,虽然我们在flutter中不能直接访问GPU线程和数据,但是Dart代码可能导致此线程变慢 I/O线程:执行比较耗时的任务 在运行app的过程中,观察爆红的地方和触发场景...: true, ); 提高流畅性的策略 代码调用时机是否可以延后?...如加载长列表;在调用频率很高的方法中创建对象 合理设置缓存大小/长度 在内存不足时或离开页面时清空缓存数据 使用ListView.build()来复用子控件 自定义绘图中避免在onDraw中做创建对象操作

    2.5K31

    干货 | 从47%到80%,携程酒店APP流畅度提升实践

    2.2.1 Flutter页面可交互加载时长采集原理 在Flutter中,最终的UI树其实是由一个个独立的Element节点构成。...在实际监控中,会针对不同的指标,设计不同的监控标准,如:慢加载、白屏、奔溃、卡顿等系统因素,除了大盘指标外,还增加了各指标影响占比、酒店主页面的报错率趋势、版本对比趋势、报错机型top分布等。...如下图所示: GPU线程的绘制性能情况在图表的上方,CPU UI线程的绘制情况显示在图表下方,蓝色垂线表示已渲染的帧,绿色色垂线代表的是当前帧。...Performance 是一个强大的性能分析工具,能够以时间轴的方式展示 CPU 的调用栈和执行时间,去检查代码中可疑的方法调用。...优化前,如下图,页面初始化/开始加载/加载中/加载完成,均触发多个action,由于action是异步的,每个数据处理模块都有一些耗时和异步,加载完成后页面可能已经刷新,此处有可能展示了未处理完成的数据

    2K30

    flutter系列之:flutter架构什么的,看完这篇文章就全懂了

    Flutter中的Widgets跟其他语言中的类似的Widgets组合有什么不同呢? 他们最大的不同是,Flutter中的Widgets更多,每个Widgets专注的功能更小。...这里应该可以理解Flutter中Widget的设计思想了。在Flutter中一切皆可为Widget。...另一方面,这样可以减少Flutter在呈现过程中在Flutter代码和平台代码之间来回转换,减少了性能瓶颈,提升效率。...最后,因为UI的实现和底层的操作系统是分离的,所以Flutter的APP在不同的平台上面可以有统一的外观和实现,可以保证风格的统一。...当State发生变化的时候,需要调用setState() 方法来通知flutter框架来调用State的build方法,从而将变化反馈到用户界面中。

    1.1K30

    双厨狂喜 | Flutter & 正则匹配 - 小册上架

    RegExpo 项目的由来 当 Flutter 遇到正则表达式会发生什么样的故事?在去年过年期间,到现在正好一年的光景。...而本册中的内容大半是对 RegExpo 项目实现过程的记录,也可以借此讨论一下 暗黑模式、不同平台界面适配 等视图表现相关的话题: 另外,还会对 状态管理 的使用及其意义进行讨论,并基于此介绍项目中数据库的使用方式...RegExpo 项目的表现 下面来看一下 RegExpo 在不同平台的表现,如下是 Macos 桌面端的视图表现。...---- 最后,还会探索文本对于 多个正则表达式 的高亮匹配,实现如下的代码高亮组件效果: 代码高亮+行号 代码高亮+行号 ---- 希望通过本册的学习,大家可以对正则表达式有新的认知;对 Flutter...小册中如有错误、不合理之处或建议想法,欢迎在小册评论区这留言指正,感谢大家的支持 ~

    60940

    使用 fl_chart 实现 Flutter 图表魔法🪄

    来创建图表不同类型。...我们将从简单的事情开始,比如线性图表和饼状图表,然后我们深入其他高级特性,使用图表探索炫酷的事物。 为什么使用 fl_chart? fl_chart 就像一个魔法棒一样在 Flutter 中绘图。...它让我们创造各种炫酷类型图表,并以令人兴奋的方式展示我们的数据。 折线图表 Flutter 中线性/折线图表在贯穿我们整个数据故事的一次视觉之旅。它们将点关联起来,来展示数据如何变化或增长。...在 home_page.dart 文件中,让我们创建三个按钮来演示我们的案例。在 routes.dart 文件中,我们已经设定了导航到我们的案例,你们可以查看源码来获取更详细的内容。...在 lib 文件夹中的 views 下创建 first_line_chart.dart 文件。

    77910

    干货 | Flutter在携程复杂业务的高性能之旅

    UI 线程图表报红或者两个图表都报红,则表示 Dart 代码消耗了大量资源,需要优化代码执行时间。...将存放状态的对象叫做ViewModel,针对一个大的界面,数据可能有多个来源,如果将所有的数据及状态值都存放在一个ViewModel中,就会使得 ViewModel过于冗余,当ViewModel中的数据发生变化时...refreshPage) { return widgets; }} 2.6 const 标识 当调用 setState(),Flutter 会 Rebuild 当前View中的每一个子组件,避免全部重新构建的方法就是用...尽量减少build中处理逻辑,因为widget在页面刷新的过程中会随时通过build重建,build调用频繁,应该只处理跟UI相关的逻辑,因此将一些不涉及每次渲染都必须的操作,存放在initState...加载裁剪之后的不同的图片资源。

    1.6K20

    Flutter技术与实战(5)

    文件 SharedPreference 数据库 如何在Dart层兼容Android/IOS平台特定实现(一) 方法通道 方法通道使用示例 Flutter 如何实现一次方法调用请求 在原生代码中完成方法调用的响应...在原生代码中完成方法调用的响应 在 Android 平台,方法调用的处理和响应是在 Flutter 应用的入口,也就是在 MainActivity 中的 FlutterView 里实现的,因此我们需要打开...需要注意的是,与纯 Flutter 应用不同,原生应用混编 Flutter 由于涉及到原生页面与 Flutter 页面之间切换,因此导航栈内可能会出现多个 Flutter 容器的情况,即多个 Flutter...在 Flutter 中,屏幕适配的原理也非常类似,只不过 Flutter 并没有布局文件的概念,我们需要准备多个布局来实现。...性能图层会在当前应用的最上层,以 Flutter 引擎自绘的方式展示 GPU 与 UI 线程的执行图表,而其中每一张图表都代表当前线程最近 300 帧的表现,如果 UI 产生了卡顿(跳帧),这些图表可以帮助我们分析并找到原因

    15.8K30
    领券