flutter
文章平均质量分 71
梦想不只是梦与想
如果你也对鸿蒙、安卓开发感兴趣,可以一起进步、讨论,微信公众号【程语新视界】
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Flutter中 yield*关键字
摘要:yield*是Dart中用于生成器函数的关键字,可将另一个生成器的值逐个产出。同步生成器用sync*返回Iterable,异步用async*返回Stream。yield*相比yield能产出多个值,比for循环更简洁,但需注意类型匹配(不能混用同步/异步)。适用于递归遍历、数据合并等场景,直接委托无额外开销,代码更高效。原创 2026-05-02 06:45:00 · 13 阅读 · 0 评论 -
flutter中 safeArea组件
Flutter中的SafeArea组件是处理设备屏幕安全区域的关键工具,它能自动调整内容布局以避免被系统UI元素(如状态栏、刘海屏、底部导航栏等)遮挡。该组件通过添加适当的内边距来适配各种异形屏设备,支持单独控制四个方向的安全区域处理。典型用法是将SafeArea包裹在Scaffold.body中,特别适用于没有AppBar的全屏页面或需要避开底部导航栏的场景。其原理是通过MediaQuery获取系统UI占用的空间并应用相应padding。使用时需注意:不要包裹整个Scaffold以免影响AppBar显示,原创 2026-04-29 18:00:00 · 344 阅读 · 0 评论 -
flutter中 InheritedWidget 实现原理
Flutter中的InheritedWidget是实现高效数据共享和状态管理的核心机制。它通过特殊的Widget结构,允许子树中的Widget快速获取共享数据,并在数据变化时自动重建依赖组件。核心原理包括:依赖注册机制(子Widget调用dependOnInheritedWidgetOfExactType时建立依赖关系)、变化通知系统(数据变更时遍历_dependents表触发重建)以及向上查找算法(通过_parent指针遍历组件树)。这种设计使得InheritedWidget成为Provider等状态管理原创 2026-04-28 18:00:00 · 336 阅读 · 0 评论 -
flutter中的Widgets、RenderObjects 和 Elements的对应关系
Flutter三棵树关系解析摘要 Flutter框架中的Widget、Element和RenderObject三棵树构成了核心渲染机制。标准情况下三者呈1:1:1对应关系:一个Widget创建一个Element,一个Element管理一个RenderObject。但实际存在多种变体: 1:0情况:如StatelessWidget和InheritedWidget本身没有RenderObject 1:多情况:MultiChildRenderObjectWidget一个Widget对应多个Element/Rend原创 2026-04-24 18:00:00 · 348 阅读 · 0 评论 -
flutter 与原生通信的底层原理(二)
Dart与原生代码通信机制解析 Dart和原生代码(Java/Kotlin)通过类似IPC的机制实现跨虚拟机通信,主要流程分为四个关键步骤:1)Dart侧将方法调用序列化为二进制数据;2)通过C++引擎跨语言边界传递消息;3)使用JNI在原生侧查找并调用对应方法;4)原生Handler处理请求并返回结果。该机制的核心技术包括:JNI实现Java与C++互调、Dart Native Extension桥接Dart与C++、以及基于消息队列的异步线程模型。相比传统IPC,Flutter的通信机制虽然性能略低(2原创 2026-04-21 18:00:00 · 307 阅读 · 0 评论 -
flutter 与 Android iOS 通信?以及实现原理(一)
Flutter与原生平台的通信主要通过三种通道实现:MethodChannel用于双向方法调用,适合获取电池电量等一次性操作;EventChannel实现原生到Flutter的持续事件流,适用于传感器数据等实时场景;BasicMessageChannel支持自定义编解码的双向消息传递。三种通道均通过平台特定的二进制消息机制实现,使用StandardMessageCodec进行数据类型转换,支持基础类型和复杂数据结构。在实现时需注意线程管理,原生端耗时操作应在后台线程执行后切回主线程返回结果。这种通信机制使F原创 2026-04-20 18:00:00 · 251 阅读 · 0 评论 -
Flutter的生命周期:Widget 生命周期、App 生命周期 和 路由生命周期
Flutter生命周期管理主要包括三个层面:1. Widget生命周期(StatefulWidget)包含createState、initState、didChangeDependencies、build、didUpdateWidget、deactivate和dispose等方法,用于管理组件状态;2. 应用生命周期(WidgetsBindingObserver)通过didChangeAppLifecycleState监听应用前后台切换;3. 路由生命周期(RouteObserver)使用didPush/d原创 2026-04-19 18:00:00 · 535 阅读 · 0 评论 -
flutter中 如何获取控件的大小和位置?
Flutter中获取控件大小和位置的方法:使用GlobalKey配合RenderBox,通过localToGlobal()获取控件在屏幕上的坐标位置,通过size属性获取控件的宽度和高度。需要注意在控件渲染完成后调用这些方法,并避免频繁调用以优化性能。示例代码展示了如何通过点击事件获取控件的坐标和尺寸信息。原创 2026-04-09 18:00:00 · 456 阅读 · 0 评论 -
Flutter的绘制流程
Flutter绘制流程的核心是Widget树到RenderObject树的转换过程。首先通过Widget构建UI界面,形成Widget树;然后通过Build过程将Widget树转换为RenderObject树,进行布局计算;接着通过Painting过程生成LayerTree并合成最终图像;最后利用Impeller渲染引擎进行高效渲染。整个过程采用分层架构优化性能,通过局部重绘减少计算量,最终将像素图像显示到屏幕上。原创 2026-04-06 18:00:00 · 444 阅读 · 0 评论 -
flutter中的key是什么? 以及作用?
Flutter中的Key是Widget的唯一标识符,主要用于保持Widget状态、优化性能和精确控制动画。分为LocalKey(ValueKey、ObjectKey、UniqueKey)和GlobalKey两类,前者在父Widget内唯一,后者全局唯一。Key通过canUpdate()方法判断是否复用Element,对有状态Widget或动态列表建议显式指定Key。无状态Widget或固定列表可不使用Key。GlobalKey性能开销大,应谨慎使用。原创 2026-04-05 06:45:00 · 453 阅读 · 0 评论 -
鸿蒙适配flutter为什么要引用git仓库
鸿蒙适配Flutter需引用Git仓库,主要因为:1)鸿蒙版Flutter SDK由开源社区维护,托管在GitCode/Gitee而非Pub.dev;2)常用Flutter插件需通过git引入社区适配版本。开发者需克隆指定仓库并配置环境,在pubspec.yaml中使用git地址而非版本号引用插件,确保鸿蒙应用的兼容性。这种模式体现了鸿蒙Flutter生态与官方生态的独立发展路径。原创 2026-02-19 18:00:00 · 384 阅读 · 0 评论 -
flutter工程 module和项目的区别
Flutter开发中,Module和Project(App)的主要区别在于:Module用于将Flutter功能集成到现有原生应用中,输出AAR/Framework文件,由宿主应用管理生命周期;而Project是独立完整的Flutter应用,直接构建APK/IPA文件,由Flutter框架管理生命周期。Module适合混合开发场景,Project适合全新Flutter应用开发。简言之,Module是"插件",Project是"完整应用"。原创 2026-02-17 06:45:00 · 587 阅读 · 0 评论 -
Flutter App 与 Module 的 Android 目录区别
本文对比了Flutter项目中两种Android目录的区别:App类型的android/是完整Android工程,可独立打包APK,允许自由修改配置;Module类型的.android/是自动生成的集成模板,带点号表示不应手动修改,主要用于提供原生项目集成接口。核心差异在于android/用于构建独立应用,需提交版本控制;而.android/是临时脚手架,仅包含集成脚本,不应提交Git。实际使用时,App项目直接修改android/目录配置,Module项目则通过.android/include_flutt原创 2026-02-16 06:45:00 · 1068 阅读 · 0 评论 -
Flutter Module 集成到 Android 项目
本文介绍了将FlutterModule集成到Android项目的两种官方方式:源码集成和AAR集成。源码集成适合开发阶段,通过Gradle直接引入Module源码,支持热重载但构建速度较慢;AAR集成适合发布阶段,将FlutterModule编译为AAR包引入,构建速度快但需重新编译。文章详细说明了两种方式的前置环境要求、项目结构准备、具体配置步骤及代码示例,包括Flutter页面打开方式和原生通信实现。最后对比了两种方式的优缺点,并提供了常见问题解决方案,如预加载引擎优化启动速度、ABI过滤减小包体积等。原创 2026-02-15 06:45:00 · 2181 阅读 · 0 评论 -
Flutter Module的三种运行与调试方发
Flutter模块开发调试方案对比 摘要:Flutter模块开发有三种调试方案:1)使用Example项目(官方推荐),适合模块开发阶段快速预览UI;2)集成到原生宿主应用调试,适合测试原生交互和真实环境验证;3)使用Flutter工具的Module调试模式,适合快速验证纯Dart代码。三种方案在配置复杂度、真实度和适用场景上各有特点:Example项目配置简单但无法测试原生交互,宿主应用调试最真实但配置复杂,Module调试模式启动快但环境非真实。开发者可根据实际需求选择合适方案,如日常开发推荐Examp原创 2026-02-14 06:45:00 · 1623 阅读 · 0 评论 -
Flutter 的5种项目类型
Flutter提供了5种工程类型:1) App(完整应用),2) Module(原生集成模块),3) Package(纯Dart组件库),4) Plugin(含原生代码的插件),5) Skeleton(最佳实践模板)。App适合独立开发,Module用于混合开发,Package和Plugin分别用于纯Dart和原生功能封装,Skeleton提供开箱即用的项目结构。各类型在平台支持、可发布性和复杂度上存在差异,创建命令分别为flutter create -t [app|module|package|plugi原创 2026-02-12 18:00:00 · 967 阅读 · 0 评论 -
Flutter 命令行参数中 -- 和 - 的区别
区别--template是完整的参数名,清晰易懂-t是简写形式,输入快捷两者功能完全等效,只是写法不同脚本、文档→ 推荐使用--template个人快速操作→ 可以使用-t。原创 2026-02-13 18:00:00 · 440 阅读 · 0 评论 -
GetX框架中的Get.put()方法
Get.put()是GetX状态管理框架的核心依赖注入方法,用于注册控制器或服务实例。它支持全局访问、自动生命周期管理,可通过tag区分多个实例,并配置permanent参数控制持久化。使用时需注意:相同类型+相同tag的实例默认不可重复注册(需用override覆盖),但允许不同类型或不同tag的多次注册。GetX会自动回收非永久实例,并提供了onInit/onReady/onClose生命周期回调。相比Get.lazyPut()的懒加载和Get.create()的工厂模式,Get.put()更适合大多数原创 2026-02-09 18:00:00 · 272 阅读 · 0 评论 -
Flutter中的 工厂函数:使用与原理
Dart中的工厂函数是一种特殊的静态方法,用于灵活控制对象创建过程。与普通构造函数不同,工厂函数可以返回现有实例(如实现单例模式)、根据参数返回不同子类对象,或处理复杂对象构造(如JSON反序列化)。典型应用包括:1)单例模式实现,确保全局唯一实例;2)多态对象创建,根据参数返回不同子类;3)JSON反序列化,封装数据转换逻辑。工厂函数本质上是编译为静态方法,通过逻辑控制替代直接实例化,为对象创建提供了更大灵活性。原创 2026-02-08 18:00:00 · 917 阅读 · 0 评论 -
Flutter中 CustomScrollView实现粘性头部
本文介绍了Flutter中的CustomScrollView组件,这是一个能够创建复杂自定义滚动效果的高级容器。文章重点讲解了CustomScrollView的核心特点:统一滚动机制、基于Sliver的渲染系统、高度定制能力和性能优化。详细对比了Sliver组件与常规RenderBox组件的区别,并列举了常用Sliver组件及其功能。通过多个代码示例展示了基本用法、混合布局实现和高级功能配置,包括SliverAppBar的复杂设置、SliverPersistentHeader的粘性头部实现,以及使用Sliv原创 2026-02-05 18:00:00 · 414 阅读 · 0 评论 -
Flutter中 ScaffoldMessenger 消息通知
Flutter 2.0引入的ScaffoldMessenger组件优化了SnackBar的管理机制,解决了旧版本中上下文依赖、路由切换和生命周期等问题。它支持全局管理SnackBar,自动处理路由切换,并能保持消息持久化。使用方式包括Builder包装、全局context和ScaffoldMessenger包裹三种方法。除了基础用法外,还支持自定义样式(如浮动效果、圆角、图标等)和高级控制(手动关闭、批量清除、回调处理等)。ScaffoldMessenger通过SnackBarController提供了更精原创 2026-02-04 18:00:00 · 603 阅读 · 0 评论 -
flutter中 常用的image组件类型
Flutter提供了丰富的图片组件,包括Image、Image.network、Image.asset等基础组件,以及FadeInImage、CircleAvatar等特殊效果组件。这些组件支持从网络、本地资源、文件等多种来源加载图片,并提供加载进度、错误处理、缓存控制等功能。高级用法还涵盖图片缓存管理、分辨率适配和背景装饰等场景,开发者可根据需求选择合适的组件和配置参数来实现最佳图片显示效果。原创 2026-02-03 06:45:00 · 425 阅读 · 0 评论 -
Flutter中 隐式动画组件
Flutter隐式动画组件是一组能自动处理动画过渡的特殊Widget,开发者只需设置目标值即可自动创建和管理动画过程。这些组件分为容器布局类(如AnimatedContainer、AnimatedPadding)、视觉外观类(如AnimatedOpacity、AnimatedTheme)、变换类(如AnimatedScale、AnimatedRotation)以及列表网格类(如AnimatedList)。它们具有声明式编程、自动管理动画参数、性能优化和易用性等特点,极大简化了动画开发流程。通过组合使用这些组原创 2026-02-02 06:45:00 · 1385 阅读 · 0 评论 -
Flutter中 动画分类
Flutter动画开发指南 本文系统介绍了Flutter动画开发的核心内容,主要包括: 动画分类:隐式动画(如AnimatedContainer)和显式动画(如AnimationController) 核心组件:AnimationController控制器、Tween补间动画和AnimationBuilder构建器 常用隐式动画组件:包括AnimatedOpacity、AnimatedPositioned等8种内置组件 显式动画流程:从控制器创建到动画启动的完整实现步骤 自定义动画:通过CustomPain原创 2026-02-01 18:00:00 · 679 阅读 · 0 评论 -
Dart中 dynamic 和 var 的区别
摘要: var和dynamic在开发中均用于变量声明,但存在关键差异: 类型推断:var在编译时确定类型(静态,不可变),dynamic在运行时动态变化。 安全性:var类型安全(编译时检查),dynamic不安全(仅运行时报错)。 性能:var无额外开销,dynamic需运行时类型检查。 使用场景: var:已知类型但简化声明(如局部变量、集合字面量)。 dynamic:动态类型需求(如JSON解析、反射),但应尽快转为具体类型。 建议:优先使用var确保安全性与可读性,仅在必要时谨慎使用dynamic。原创 2026-01-24 18:00:00 · 982 阅读 · 0 评论 -
flutter中的 GetX
本文介绍了Flutter框架GetX的核心功能与原理。GetX是一个轻量级、高性能的全功能框架,包含状态管理(响应式和简单式)、路由管理(无需context)和依赖注入三大核心功能。文章详细解析了其响应式状态管理通过Rx变量+Obx观察者模式实现自动刷新,路由管理通过全局导航栈实现无context跳转,以及依赖注入的三种方式。同时提供了基础配置、状态管理、路由跳转等使用步骤,并对比了GetX与Provider/Bloc的优缺点。GetX适合快速开发中小项目,能显著减少样板代码,提高开发效率。原创 2025-12-31 18:00:00 · 543 阅读 · 0 评论 -
flutter包和插件开发
本文介绍了Flutter包的开发与发布流程,包括三种包类型(Dart包、插件包、FFI包)的创建方式、项目结构配置和平台通信实现。详细说明了Dart端与Android/iOS原生端的代码开发方法,涵盖方法通道、事件通道的使用,以及FFI插件的C/C++绑定技术。同时提供了pubspec.yaml配置规范、平台条件编译示例、单元测试方法,并讲解了代码检查、文档生成和发布到pub.dev的完整流程。该指南为开发者提供了从零开始开发Flutter插件到最终发布的完整解决方案。原创 2025-12-29 18:00:00 · 756 阅读 · 0 评论 -
Flutter 本地路径获取
本文介绍了Flutter中path_provider插件的使用方法,重点讲解了不同平台的文件路径获取方式。主要内容包括:1)获取临时目录、应用文档目录、外部存储等5种路径类型;2)Android和iOS平台的路径结构差异;3)文件读写和路径获取的代码示例;4)Android平台的权限处理配置;5)各平台注意事项。开发者可根据数据类型选择合适目录,如用户数据用文档目录(持久化),缓存用临时目录(可清理)。该插件解决了跨平台路径访问问题,但需注意平台差异和权限管理。原创 2025-12-28 18:00:00 · 1005 阅读 · 0 评论 -
flutter中 退出应用的方法SystemNavigator.pop()
本文介绍了Flutter中SystemNavigator.pop()方法的使用,该方法可关闭整个应用并返回手机桌面,与仅返回上一页面的Navigator.pop()不同。文中提供了按钮触发和Android返回键处理的两种实现方式,并指出该方法会触发应用dispose()生命周期,且主要适用于Android平台。开发者需注意该方法与页面导航的区别,以及iOS平台的兼容性问题。原创 2025-12-26 18:00:00 · 370 阅读 · 0 评论 -
Flutter WidgetsBindingObserver应用生命周期监听
Flutter应用生命周期监听指南:WidgetsBindingObserver详解 本文介绍了Flutter中WidgetsBindingObserver接口的使用方法,用于监听应用级系统事件。主要内容包括: 基本使用方法:通过混入接口、注册和清理观察者 核心回调方法:应用生命周期状态变化(前台/后台切换)、本地化变更、暗黑模式切换等 实际应用场景:前后台状态管理、资源释放和数据刷新 与Widget生命周期的区别:WidgetsBindingObserver监听的是应用级系统事件,而非组件状态变化 通过实原创 2025-12-25 18:00:00 · 672 阅读 · 0 评论 -
Flutter中 TabBar和TabBarView
Flutter TabBar 使用指南摘要 本文全面介绍Flutter中TabBar组件的使用方法,包含以下核心内容: 基础使用:通过DefaultTabController实现简单Tab布局,包含TabBar和TabBarView的配合使用。 详细配置: TabBar属性:包括样式定制(颜色、指示器)、交互效果和回调处理 TabBarView属性:页面切换控制、状态保持方法(AutomaticKeepAliveClientMixin和PageStorageKey) 高级控制:手动创建TabControll原创 2025-12-23 18:00:00 · 410 阅读 · 0 评论 -
Flutter中 Navigator与MaterialApp关系
Flutter中MaterialApp和Navigator的关系解析:MaterialApp作为应用根组件,自动创建并管理Navigator,提供主题、路由等框架支持。Navigator负责具体页面导航,提供push/pop等跳转方法,支持命名路由和参数传递。两者协同工作,MaterialApp通过navigatorKey、routes等配置导航器,而Navigator则处理页面堆栈管理。典型应用结构是在MaterialApp中配置路由表,通过Navigator实现页面跳转,共同构建Flutter应用的导航原创 2025-12-22 18:00:00 · 377 阅读 · 0 评论 -
Flutter中 Widget的key有几种?
本文介绍了Flutter中的Key类型及其应用场景。Key分为LocalKey(本地唯一)和GlobalKey(全局唯一)两大类。LocalKey包含ValueKey(基于值)、ObjectKey(基于对象)和UniqueKey(每次创建唯一),适用于列表项、对象列表和需要强制重建的场景。GlobalKey则允许全局访问Widget状态,包含GlobalObjectKey和已废弃的LabeledGlobalKey。文章建议优先使用LocalKey,谨慎使用GlobalKey,并详细说明了各类型Key的使用方原创 2025-12-21 18:00:00 · 582 阅读 · 0 评论 -
flutter中 富文本RichText
Flutter的RichText组件提供了丰富的文本样式控制功能,支持多段文本混合样式、内嵌Widget和交互操作。核心功能包括:1)通过TextSpan嵌套实现不同文本样式组合;2)支持文本对齐、换行、溢出处理等布局控制;3)提供点击识别、鼠标交互等事件处理;4)可内嵌Widget实现图文混排;5)支持渐变、阴影等高级文本效果。RichText还具备选择复制、语义标签等增强功能,配合TextStyle可精确控制字体、颜色、间距等样式属性,是构建复杂文本界面的核心组件。原创 2025-12-20 18:00:00 · 1416 阅读 · 0 评论 -
Flutter中 异步的实现方式
本文详细介绍了Dart异步编程的核心概念和实际应用。主要内容包括:1) Future的基本使用和状态管理,通过async/await简化异步操作;2) Stream的创建、监听和转换操作,实现流式数据处理;3) 在Flutter中使用FutureBuilder和StreamBuilder构建异步UI。文章还提供了大量实用代码示例,涵盖并行执行、超时处理、错误捕获等常见场景,并指出了常见的使用误区和最佳实践。这些内容为开发高效、流畅的Dart/Flutter应用提供了全面的异步编程指导。原创 2025-12-19 18:00:00 · 547 阅读 · 0 评论 -
Flutter 构建错误处理ErrorWidget.builder
本文同步发表于我的,微信搜索程语新视界即可关注,每个工作日都有文章更新在 Flutter 中,ErrorWidget.builder是一个全局错误处理机制,用于自定义当 Widget时显示的 UI。这是 Flutter 框架提供的一个重要错误处理工具。:当 Widget 树中任何地方发生构建错误时,都会触发这个回调:防止应用因单个 Widget 的错误而完全崩溃:在开发阶段显示有用的错误信息,帮助定位问题如果不设置自定义的,Flutter 会使用默认的错误 Widget:在。原创 2025-12-18 18:00:00 · 549 阅读 · 0 评论 -
Flutter热重载(Hot Reload)解析
Flutter热重载技术解析:Flutter的热重载功能通过DartVM的JIT编译机制,实现了代码修改后1-2秒内快速更新的开发体验。其核心原理包括增量编译生成.dill文件、DartVM运行时代码注入、状态保持和局部Widget树重建。相比热重启,热重载能保留应用状态但受限于main函数修改等场景。该技术通过Flutter工具链与VM服务协议协作实现,开发者可通过模块化开发和状态管理优化使用效果。热重载使调试效率提升70%以上,成为Flutter框架的核心优势之一。原创 2025-12-16 18:00:00 · 980 阅读 · 0 评论 -
Flutter中 PhysicalModel组件
Flutter的PhysicalModel组件用于创建具有3D视觉效果的UI元素,支持阴影、形状裁切等物理属性。摘要要点:1. 核心功能:提供矩形/圆形形状、可调阴影(elevation)、圆角半径等3D效果;2. 基本用法:通过color、elevation、shadowColor等属性配置外观;3. 进阶特性:支持动画版本AnimatedPhysicalModel实现属性变化的平滑过渡;4. 对比Card组件:PhysicalModel提供更高定制性,适合需要非标准形状或特殊阴影的场景。典型应用包括3D原创 2025-12-15 18:00:00 · 675 阅读 · 0 评论 -
Flutter中的Completer
Dart中的Completer类允许手动控制Future的完成时机,将异步操作结果与完成控制分离。它提供complete()和completeError()方法来主动完成Future,适用于回调转Future、多异步操作管理、超时控制等场景。相比直接使用Future,Completer提供了更灵活的控制能力,但在简单场景下建议优先使用async/await。关键点包括:1) Completer是Future的控制器;2) 可手动决定完成时机;3) 常用于旧代码改造和复杂异步流程管理;4) 需注意避免内存泄漏原创 2025-12-14 18:00:00 · 705 阅读 · 0 评论 -
Flutter 线程管理模型解析
本文详细解析了Flutter的线程架构与并发模型,主要内容包括:1) 四核心线程(UI/GPU/IO/Platform)的职责划分与通信机制;2) Dart Isolate系统的特性、使用场景及通信模式;3) 任务调度系统与帧生命周期管理;4) 开发工具对线程性能的分析方法。Flutter采用多线程分离架构实现高效渲染,通过Isolate提供安全的并发处理,配合基于事件循环的异步编程模型,在保证UI流畅性的同时支持复杂计算任务。文章包含大量代码示例,完整版可关注微信公众号"程语新视界"获原创 2025-12-12 18:00:00 · 1344 阅读 · 0 评论
分享