- 博客(179)
- 资源 (9)
- 问答 (2)
- 收藏
- 关注
原创 HarmonyOS 6.0 服务卡片实战:把「轻食刻」装进桌面,让轻断食一眼可控
本文基于HarmonyOS 6.0 ArkTS开发框架,结合轻食刻健康管理应用的服务卡片Form Kit开发实践,详细解析了formProvider.openFormManager等核心API在实际项目中的应用。通过具体代码示例和架构设计,展示了如何将复杂的健康数据以简洁直观的方式呈现在用户桌面上
2025-11-13 23:08:39
50439
9
原创 Flutter调用HarmonyOS NEXT原生相机拍摄&相册选择照片视频
Flutter调用HarmonyOS NEXT原生方法,到相机相册选择照片视频,相机拍摄图片视频实践
2025-01-21 16:13:00
2850
原创 Flutter艺术探索-Flutter在鸿蒙端运行原理:OpenHarmony平台集成
通过定制化的Embedder层,Flutter成功地在OpenHarmony上“安家落户”。这套方案本质上是在两个优秀的系统之间搭建了一座高效的数据桥梁,让Flutter的自绘引擎能驱动鸿蒙的屏幕,也让Dart代码能调用鸿蒙的分布式能力。回顾一下核心技术点桥梁是Embedder:它负责处理原生窗口、输入事件和平台通信,是适配工作的核心。渲染两条路:追求极致性能用直接渲染,保证广泛兼容用纹理混合。通信靠Channel。
2026-02-01 17:41:50
398
原创 Flutter艺术探索-Flutter跨平台适配:Android/iOS/Web差异化处理
Flutter的跨平台优势不在于隐藏差异,而在于为我们提供了一套优雅处理差异的工具链。成功的适配策略是分层的:从利用Theme和自适应组件处理基础UI,到通过集成深度原生功能,再到为Web量身打造交互体验。核心思想是“关注点分离”:将平台无关的业务逻辑与平台相关的实现细节分开。这样,我们既能享受到代码复用的高效率,又能为每个平台的用户交付最符合他们预期的高质量体验。记住,最终目标不是让应用“看起来一样”,而是让它在每个平台上都“感觉原生”。
2026-02-01 15:32:41
320
原创 Flutter艺术探索-Flutter推送通知:local_notifications与firebase_messaging
通过上面的步骤,我们搭建了一个结合和的Flutter推送体系。前者作为可靠的云端入口,后者提供一致且可控的本地展示,这种组合在实践中非常有效。记住,推送通知是把双刃剑。用得好,它是激活用户、传递价值的利器;用不好,频繁打扰或推送无关内容,用户会毫不犹豫地关闭权限甚至卸载应用。始终从用户的角度出发,提供有意义、有温度的通知,才是长久之道。希望这篇结合实践的文章能帮你避开一些坑,更顺畅地实现Flutter的推送功能。如果在实践中遇到新问题,欢迎分享和讨论。
2026-02-01 10:02:33
702
原创 Flutter艺术探索-Flutter地图与定位:google_maps_flutter与geolocator
,''';与geolocator的组合为Flutter开发者提供了一套强大且易用的地图定位解决方案。从基本的显示地图、获取位置,到高级的轨迹记录、地理编码,这两个插件都能很好地覆盖。实际开发中,建议根据具体场景调整定位精度和更新频率,在功能与功耗之间找到平衡。如果遇到权限问题或地图不显示,请逐一检查API密钥配置和平台权限设置——这两步往往是初学者最容易出错的地方。希望这篇指南能帮你顺利实现Flutter中的地图与定位功能。如果有任何问题或更优的实现方式,欢迎在评论区交流讨论。
2026-02-01 08:13:54
404
原创 Flutter艺术探索-Flutter相机与相册:camera库与image_picker集成
通过camera和这两个插件的组合,Flutter 开发者可以相对轻松地构建出功能强大、体验良好的多媒体功能。本文提供的代码是一个坚实的起点,你可以在此基础上,根据产品需求添加更多特性,如滤镜、人脸贴纸、视频剪辑等。希望这篇指南能帮助你少走弯路。如果在实践过程中遇到问题,不妨多查阅插件的官方文档和 GitHub Issue 列表,那里通常有来自社区的丰富解决方案。
2026-02-01 08:02:07
451
原创 Flutter艺术探索-Flutter插件开发:自定义Plugin实战指南
用Flutter做跨平台开发,“写一次代码,两端都能用”的效率确实很吸引人。但当我们想调用摄像头、读取传感器数据、连接蓝牙或者访问本地文件时,就会发现Flutter框架本身并不能直接和手机硬件打交道。这时候,就需要来扮演“翻译官”的角色,在Dart代码和原生平台(Android/iOS)之间架起沟通的桥梁。今天,我们就通过创建一个,把Flutter插件开发的全过程走一遍。从设计思路、编写代码、性能调优到最终发布,每个环节都会讲到。
2026-01-29 16:35:49
354
原创 Flutter艺术探索-PlatformView嵌入:在Flutter中显示原生View
无论是需要高性能渲染的地图(如 Google Maps、百度地图)、功能复杂的视频播放器,还是平台特定的 UI 控件(比如 Android 的 WebView 或 iOS 的 ARKit),有时候纯 Flutter Widget 确实力不从心。这时,PlatformView 技术就成了我们的“救命稻草”。它允许 Flutter 应用直接嵌入 Android 的View或 iOS 的UIView,实现真正的混合渲染。这不仅能极大扩展 Flutter 的能力边界,也让我们在面对复杂场景时多了一个灵活的选择。
2026-01-29 15:08:04
549
原创 Flutter艺术探索-EventChannel使用:原生事件流与Flutter交互
在Flutter开发中,与原生平台(Android/iOS)打交道几乎是不可避免的——毕竟有些功能,比如传感器数据、蓝牙通信或者持续的地理位置更新,仍然离不开平台本身的能力。虽然Flutter提供了丰富的跨平台UI组件,但在这些特定场景下,我们还是得借助原生的力量。为此,Flutter提供了三种核心的通信机制,也就是我们常说的今天我们要重点聊的,就是其中专门处理的。它和MethodChannel那种“一问一答”的模式不同,EventChannel建立的是一个持久的、单向的通道。
2026-01-29 13:18:44
540
原创 Flutter艺术探索-MethodChannel原理:Flutter与原生通信机制
MethodChannel 作为 Flutter 与原生平台通信的基石,其设计巧妙地平衡了易用性、性能与类型安全。它工作可靠:清晰的分层与异步设计,确保了 UI 的流畅性。它足够灵活:支持从简单值到复杂嵌套结构的各种数据类型。它要求严谨:需要开发者注意线程管理、错误处理和两端的一致约定。对于绝大多数需要原生能力的场景,MethodChannel 都是首选且官方的解决方案。
2026-01-29 11:33:50
559
原创 Flutter艺术探索-Flutter性能分析工具:Flutter DevTools深度使用
在移动应用开发中,性能的好坏直接关系到用户体验的成败。你的Flutter应用可能会运行在各种不同的设备上,从低端安卓机到最新的iPhone,确保它在每一台设备上都流畅顺滑,是个不小的挑战。我们常常靠“感觉”来判断应用卡不卡,但感觉往往不靠谱——一次偶发的卡顿如何复现?内存为何在默默增长?某个页面滑动起来总觉得不跟手,问题到底出在哪里?这时候,你需要的不再是猜测,而是数据。Flutter DevTools正是为此而生的官方工具套件。
2026-01-29 10:15:36
483
原创 Flutter艺术探索-Flutter内存管理:内存泄漏检测与优化
// 一个简单的内存监视器Timer?_timer;_timer?.cancel();});if (kDebugMode) print('内存监控已启动');_timer?.cancel();// 这里可以调用平台通道获取更精确的内存使用量// 简单演示:假设获取到了内存使用率print('⚠️ 警告:内存使用率偏高 (${usagePercent.toStringAsFixed(1)}%)');// 实际项目中,需要通过 method channel 调用原生API。
2026-01-28 17:11:15
415
原创 Flutter艺术探索-Flutter渲染优化:Widget生命周期与性能分析
✅多用const:对于静态的Widget,const能避免不必要的重建。✅拆分解耦:别把所有东西都塞在一个build方法里,拆成小Widget。✅善用Key:在列表或动态生成Widget时,Key能帮助Flutter准确复用。✅build方法要纯:不要在build里创建新对象或执行复杂逻辑,移到外面去。✅缓存计算结果:特别是那些耗时的操作,算一次存起来。✅关注点分离:构建UI、业务逻辑、状态管理,尽量分开处理。Flutter的性能优化不是几个奇技淫巧,而是一个需要系统化理解的过程。
2026-01-28 15:37:18
465
原创 Flutter艺术探索-设计模式在Flutter中的应用:单例、工厂、观察者
单例模式是管理全局资源的利器,Dart用factory和static就能优雅实现,但要注意它对可测试性的影响。工厂模式与Flutter动态构建UI的需求天作之合,它能让你干净利落地封装对象创建逻辑。观察者模式是Flutter响应式编程的核心,从setState到provider,都在用它同步数据和UI。最后想说的是,设计模式是为你服务的工具,而不是必须遵守的教条。千万别为了用模式而用模式。
2026-01-28 13:37:20
623
原创 Flutter艺术探索-Repository模式:数据层抽象与复用
数据层的基础是模型。我们定义一个Product类,并实现序列化方法。// 从 JSON 映射?'',?'',?'',?0.0,?'',?// 转换为 JSONreturn {'id': id,// 方便创建更新后的副本String?id,String?double??this.id,
2026-01-28 10:09:08
635
原创 Flutter艺术探索-Clean Architecture:整洁架构在Flutter中的应用
领域层是架构的心脏,我们先从这里开始。采用Clean Architecture构建Flutter应用,初期的确需要更多思考和设计。但从长远来看,这种投资是值得的——它为你的应用带来了清晰的结构、可独立测试的核心逻辑,以及应对未来变化的强大韧性。本文展示的只是一个起点。在实际项目中,你可能会遇到更复杂的场景,比如身份验证流、实时数据同步、复杂的领域事件等。但万变不离其宗,只要坚守“依赖向内、关注点分离”的原则,你就能在整洁架构的基础上,构建出稳定、可扩展的Flutter应用。希望这篇指南能为你铺平道路。
2026-01-27 23:52:12
470
原创 Flutter艺术探索-MVVM架构设计:Flutter项目架构最佳实践
通过上面的实践,我们可以看到MVVM不仅仅是一种模式,它更是一种让Flutter项目保持健康的工程实践。它强制进行了关注点分离,让代码自然而然变得更容易测试、维护和协作。
2026-01-27 17:48:22
438
原创 Flutter艺术探索-Flutter列表性能优化:ListView.builder与itemExtent
Widget 层面:尽可能使用const构造函数,减少不必要的重建。布局层面:使用itemExtent提供固定高度,避免过于深层的嵌套布局。状态管理:对需要保持状态的项使用。渲染控制:通过添加重绘边界,减少渲染范围。内存管理:确保每个项有唯一的 Key,促进 Element 的正确复用。列表性能优化没有银弹,但理解了的懒加载机制,并善用itemExtent等属性,你已经能解决大部分常见的卡顿问题了。希望这篇文章能帮你构建出更流畅的 Flutter 应用。
2026-01-27 16:21:36
529
原创 Flutter艺术探索-Flutter性能优化:避免不必要的Widget重建
避免不必要的重建,本质是尊重Flutter的框架设计,帮助它更高效地工作。拆解与恒定:大组件拆小组件,静态部分标const。这是最基础也最有效的两步。状态监听要吝啬:只监听你需要的数据,用SelectorConsumer等工具实现精准更新。build方法要纯粹build方法里只做UI描述,别在这里做网络请求、复杂计算或文件读写。这些应该放在initStateFuture或compute中。Key要用在刀刃上:理解Key的语义,在列表、动画等需要保持状态的动态场景中正确使用。工具是最好的朋友。
2026-01-27 14:45:52
597
原创 Flutter艺术探索-Flutter复杂动画:AnimatedBuilder与Staggered动画
设想一个场景:你想让一个自定义绘制的图形或者一个复杂的Transform动起来。如果直接用setState配合的value来驱动,每次动画值变化都会调用setState,导致整个 Widget 树重建,即使大部分子 Widget 根本没变。AnimatedBuilder 的巧妙之处在于它采用了观察者模式。它只监听动画值的变化,并且只重建其builder方法返回的那部分 UI,而将静态的子 Widget 通过child参数缓存起来,避免重复创建。// 传统 setState 方式:低效。
2026-01-27 14:34:01
604
原创 Flutter video_thumbnail库在鸿蒙(OpenHarmony)端的完整适配实践
通过引入 FFmpeg 作为核心解码引擎,我们成功实现了插件在鸿蒙平台的功能适配。整个过程主要分为几步:分析鸿蒙媒体能力缺口、交叉编译并集成 FFmpeg、实现 C++ 解码逻辑并通过 NAPI 暴露接口、封装 ArkTS 桥接层、最后对接 Flutter Platform Channel。这次实践不仅解决了在鸿蒙上的使用问题,也为其他依赖复杂原生多媒体能力的 Flutter 插件(比如视频编辑、音频处理等)提供了可参考的适配路径。
2026-01-27 14:32:00
612
原创 Flutter艺术探索-Hero动画与页面转场:流畅的视觉体验
如果你觉得默认的直线运动有些单调,完全可以自定义飞行轨迹和曲线。Hero(// 自定义矩形插值器,实现弹性效果end) {},// 一个简单的弹性插值器实现> {@overrideRect?// 对t应用弹性曲线函数.left, end!.top, end!// 这是一个简化的弹性函数,可根据需要调整。
2026-01-26 15:49:42
515
原创 Flutter艺术探索-Flutter动画进阶:AnimationController与Tween
有时候内置的Tween不够用,比如你想动画化一个。// 自定义一个 BorderRadius 的 Tweenend})@override// 使用起来和内置 Tween 一样和Tween是 Flutter 动画的基石。Controller是引擎,驱动着0到1的进度;Tween是翻译,把这个进度转换成你想要的各种值(大小、颜色、位置等)。理解Animation作为“可监听值容器”的角色。掌握的生命周期管理(初始化、播放、释放)。熟练使用Tween(包括内置的ColorTween。
2026-01-26 14:00:36
555
原创 Flutter艺术探索-Flutter数据验证:built_value与验证规则
这里是核心所在。我们通过在工厂构造函数中插入验证逻辑,来保证数据的纯洁性。String?get phone;User._();updates?// 1. 字段级基础验证throw ValidationException('name', '姓名不能为空');// 2. 跨字段业务规则验证(示例)?0) < 21) {throw ValidationException('age', '使用高校邮箱需年满21岁');// 3. 构建对象。
2026-01-26 12:14:14
647
原创 Flutter艺术探索-Freezed代码生成:不可变数据模型实战
在Flutter应用开发中,状态管理一直是个绕不开的核心话题。尤其当应用逐渐复杂、功能越来越多时,如何清晰、安全地管理数据模型就变得格外重要。这时,不可变数据模型(Immutable Data Models) 作为一种优秀的设计范式,开始受到越来越多开发者的青睐。简单来说,不可变数据模型的核心原则是:对象一旦创建,其状态就不能再被修改。这听起来可能有些限制,但在实际开发中,它带来的好处远远超过了这点不便。不过,在Dart中手动实现一个功能完善的不可变类,意味着要编写大量的样板代码:字段、和重写、方法……这无
2026-01-26 10:45:51
710
原创 Flutter艺术探索-JSON解析与序列化:json_serializable使用
我们用一个完整的User和Article模型来举例,看看如何处理嵌套对象、日期字段和默认值。// 执行 build_runner 后,会生成对应的 `user.g.dart` 文件。/// 用户模型explicitToJson: true, // 确保嵌套对象也能被正确序列化// 如果后端 API 返回 snake_case,而模型字段是 camelCase,可以用这个配置// createToJson: false, // 可选:如果不需生成 toJson 方法可以关闭。
2026-01-24 08:37:44
637
原创 Flutter艺术探索-Flutter文件操作:path_provider与文件管理
通过,Flutter为我们提供了一套简洁而强大的跨平台文件路径访问方案。理解不同目录的用途:分清临时目录、应用文档目录、应用支持目录的使用场景和平台差异。做好封装:像文中那样构建一个类,把路径拼接、读写操作和错误处理封装起来,让业务代码更清晰。遵循平台规范:特别注意Android分区存储和iOS沙盒机制,确保应用合规且用户体验良好。关注性能:大文件使用流式处理,合理管理缓存,做好异常处理。文件管理是数据持久化的基础。结合(轻量配置)和sqlite。
2026-01-23 16:52:18
502
原创 Flutter艺术探索-Hive高性能存储:NoSQL数据库实战
创建模型类新建task.dart,用@HiveType和@HiveField标注类与字段。// 稍后自动生成的文件@HiveType(typeId: 0) // typeId 必须唯一,范围 0~223DateTime?dueDate;Task({});生成 TypeAdapter顺利的话,同目录下会生成。然后回到main.dart,取消之前那行注册适配器的注释即可。
2026-01-23 15:21:26
595
1
原创 Flutter艺术探索-SQLite数据库:sqflite库完全指南
模型类 () 是业务的基石,它负责在 Dart 对象和数据库表记录之间互相转换。int?id;// 自增主键,插入前为 nullDateTime?dueDate;createdAt,?// 将对象转为 Map,方便插入数据库return {'id': id,1 : 0, // SQLite 用整数存储布尔值// 从数据库查询结果的 Map 构造对象= null?
2026-01-23 13:38:06
645
原创 Flutter艺术探索-SharedPreferences轻量存储:键值对数据管理
SharedPreferences 是 Flutter 里最简单直接的本地存储方案,在合适的场景下非常好用。在实际项目中,根据需求选择合适的存储方案很重要。SharedPreferences 在它擅长的领域——也就是简单的键值对存储——表现非常出色。对于更复杂的需求,你可能需要结合其他存储方案一起使用。好的架构设计、适当的封装和严谨的错误处理,能让 SharedPreferences 成为你应用中一个可靠的数据持久化工具。记住,没有完美的存储方案,只有最适合当前场景的选择。
2026-01-23 11:38:07
676
原创 Flutter艺术探索-GraphQL客户端集成:graphql_flutter使用指南
如今开发一个体验出色的移动应用,高效的数据管理往往是关键。随着功能越来越复杂,传统的 REST API 在一些场景下会显得力不从心——比如数据获取不够灵活、接口版本管理繁琐等。正是在这种背景下,Facebook 推出的 GraphQL 逐渐走进了我们的视野。它允许客户端精确查询所需数据,拥有强大的类型系统,而且所有操作都通过单一端点完成,这些特性让它在复杂应用开发中备受青睐。对于 Flutter 开发者来说,这个包提供了一个相当顺手的解决方案。
2026-01-23 10:16:29
578
原创 Flutter艺术探索-RESTful API集成:Flutter后端对接实战
我们不想手写复杂的 JSON 解析代码。借助,可以自动生成这些样板代码,既安全又高效。这里以用户(User)和帖子(Post)两个模型为例。// 从JSON映射创建User对象// 将User对象转为JSON映射// 可以嵌套其他模型(例如通过其他接口获取的作者信息)User?author;Post({});写好后,在终端运行命令生成对应的.g.dart分层清晰:我们建立了。
2026-01-22 14:58:58
482
原创 Flutter艺术探索-Dio网络请求库:拦截器、重试与缓存
在Flutter开发中,处理网络请求几乎是每个应用都绕不开的环节。虽然官方提供了基础的http包,但在实际项目中,尤其是业务复杂的企业级应用里,我们总会遇到更多的需求:比如统一的请求和响应处理、自动重试失败请求、灵活管理缓存,以及一套清晰的错误处理机制。这个时候,Dio 凭借其强大的拦截器系统和高度可扩展的设计,就成了很多开发者的首选。以及。我会结合原理分析、可运行的代码示例,并分享一些性能优化上的建议,希望能帮你搭建一个更稳健、易维护的网络层。
2026-01-22 13:35:02
517
原创 Flutter艺术探索-Flutter状态管理方案对比:Provider vs Riverpod vs BLoC vs GetX
特性ProviderRiverpodBLoCGetX学习成本低中高低(但功能多)代码量少较少多(模板代码)非常少可测试性较好很好很好较好编译时安全一般强中等一般贴合 Flutter 风格高高高较低(自成一体)功能范围状态管理状态管理+依赖注入状态管理+逻辑分层全家桶框架适合大型项目中高高有争议(需规范)性能表现优优优优状态管理没有绝对的“银弹”。Riverpod代表了更安全、更现代的设计趋势;BLoC在需要严格架构的大型团队中依然稳固;而GetX。
2026-01-22 11:37:17
620
原创 Flutter艺术探索-GetX框架使用指南:轻量级状态管理
我们先定义商品和购物车项的数据结构。int stock;// 库存,这是一个可变状态Product({});// 提供一个 copyWith 方法,方便在更新状态时使用stock}) {?// 计算单项总价?GetX 以其全方位的功能和极低的入门门槛,确实能显著提升 Flutter 的开发体验。它通过一系列精妙的封装,把复杂的问题简单化。本文的购物车示例涵盖了其核心功能,你可以以此为起点,探索其路由、国际化、主题切换等更多能力。当然,没有银弹。
2026-01-22 10:09:39
654
原创 Flutter艺术探索-BLoC模式实战:业务逻辑组件化设计
事件和状态通常设计为不可变的(immutable)。使用equatable包可以轻松覆盖==和hashCode,让BLoC能高效判断状态是否真的变化了。// 定义事件基类是个好习惯,方便用switch-case处理@override// 具体的“增加”事件// 具体的“减少”事件// 可以轻松扩展,比如“重置”事件// 状态基类@override// 初始状态// 加载状态(假设计数需要从网络获取)// 成功状态// 失败状态@override。
2026-01-22 08:51:13
699
原创 Flutter艺术探索-Riverpod深度解析:新一代状态管理方案
编译时安全:类型系统能在编写代码时就帮你抓住很多错误。出色的可测试性:依赖注入的设计让模拟和测试变得非常自然。优秀的性能:精细的重建控制意味着你的应用可以更流畅。卓越的开发体验:代码生成、热重载兼容性好,工具链完善。架构灵活:既能快速上手小项目,也能支撑大型应用的复杂状态管理。对于不同场景的建议如果你正在启动一个新项目,Riverpod 是一个非常值得考虑的首选方案。如果你在维护一个大型应用,它的模块化和可维护性会带来很大帮助。如果你特别看重测试。
2026-01-21 21:38:45
459
原创 Flutter艺术探索-Provider状态管理:从入门到精通
简单直观:概念少,基于Flutter原生机制,开发者容易理解。性能高效:依赖精细化管理,避免了大范围的Widget重建。灵活强大:从简单值到异步流,各种场景都有对应的Provider类型。安全可靠:强类型保障,重构友好,编译期就能发现许多问题。生态繁荣:作为官方推荐方案之一,拥有庞大的社区和丰富的学习资料。
2026-01-21 20:21:18
530
Ollama-darwin Windows版
2025-02-19
Ollama安装包Mac版
2025-02-19
Android压缩图片到100K以下并保持不失真的高效方法
2015-07-14
viewpager标题间距太大如何设置
2015-01-04
android虚拟器不乱码真机测试乱码
2014-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅