自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 Android学Flutter学习笔记 第三节 Android视角认知Flutter(触摸事件,List,Text,Input)

本文介绍了Flutter中手势检测和ListView的实现方法。手势检测方面,可通过Widget自带的onPressed参数或使用GestureDetector包裹组件来处理点击、双击、长按等事件,并提供了旋转动画的示例。ListView方面,Flutter通过传递Widget列表实现滚动列表,无需处理回收问题,性能更优。同时说明了如何为列表项添加点击事件处理,与Android的onItemClickListener不同,Flutter直接使用Widget提供的触摸处理机制。这些内容从Android开发者视

2026-01-04 19:50:00 163

原创 Android学Flutter学习笔记 第二节 Android视角认知Flutter(resource,生命周期,layout)

本文从Android开发者视角介绍了Flutter中的项目结构与资源管理、本地化实现以及生命周期监听等内容。在项目结构方面,Flutter采用基于密度的资源管理方式,所有资源都放在assets文件夹中,并通过pubspec.yaml声明。对于本地化,Flutter建议使用.arb文件存储字符串键值对,并配合flutter_localizations和intl包实现多语言支持。在生命周期管理上,Flutter通过WidgetsBindingObserver监听应用状态变化,包括inactive、paused和

2026-01-01 20:44:40 896

原创 Android学Flutter学习笔记 第一节 Android视角认知Flutter(View,intent,Async UI)

在 Android 中,你通常会继承 View 类,或者使用已有的视图,通过重写并实现方法来实现期望的行为。在 Flutter 中,通过组合更小的组件(而非继承它们)来构建自定义组件。这在某种程度上类似于在 Android 中实现自定义 ViewGroup,其中所有的构建块都是现成的,但你要提供不同的行为 —— 例如,自定义布局逻辑。例如,如何构建一个在构造函数中接收标签的 CustomButton?

2026-01-01 17:48:15 627

原创 Android学Dart学习笔记第二十八节 Isolates

首先,为您的后台工作Isolate创建一个类。生成一个Isolate向该Isolate发送消息使Isolate能够解码JSON数据将解码后的JSON数据发送回主Isolate该类公开三个公共方法:一个用于创建工作Isolate,一个用于处理向该工作Isolate发送消息,以及一个在端口不再使用时关闭它们的清理方法。在这个示例中,SendPort 和 ReceivePort 实例遵循了一种最佳实践命名约定,即它们的命名与主隔离区相关。

2025-12-30 21:26:00 806

原创 Android学Dart学习笔记第二十七节 异步编程

Dart语言通过Future和Stream支持异步编程,使用async/await语法可以编写类似同步代码的异步逻辑。处理Future时,await会暂停执行直到结果可用,且必须用在async函数中。异步函数返回Future对象,函数体执行到第一个await即返回。对于Stream,可以使用await for循环处理流数据,但需确保在异步函数中使用。错误处理可通过try-catch实现,流程控制可用break/return终止流监听。这些特性使Dart能够高效处理耗时操作而不阻塞执行。

2025-12-30 16:42:58 486

原创 Android学Dart学习笔记第二十六节 并发

本文概述了Dart中的并发编程机制,包括事件循环、异步编程和隔离区。Dart通过事件循环处理异步操作,支持Future、Stream和async-await语法实现非阻塞代码。隔离区提供了真正的并发能力,每个隔离区拥有独立内存和事件循环,通过消息传递通信,避免了共享状态问题。主隔离区处理程序初始执行和UI事件,而其他隔离区可分担计算密集型任务。这种模型既保持了代码简洁性,又充分利用了多核处理器性能。

2025-12-23 17:27:58 913

原创 Android学Dart学习笔记第二十五节 类修饰符

要定义一个不需要其整个接口的完整、具体实现的类,请使用abstract。抽象类不能从任何库中构造,无论是自己的库还是外部库。抽象类通常有抽象方法。var i = 0;extends A@overridevoid a() {//必须重写print('a');和java不同的是,class的使用相当灵活,class 也可以被实现,需要回顾的同学参考这里Android学Dart学习笔记第十五节 类@overrideget i => 0;

2025-12-22 22:41:46 667

原创 Android学Dart学习笔记第二十四节 类-可调用对象Class()()

Dart语言允许类实例像函数一样被调用,只需实现call()方法。该方法名称固定为call,定义方式与普通函数相同。通过这种方式,对象实例可以省略方法名直接调用,如A()()或var a=A(); a()。这种语法糖使代码更简洁,同时保持与普通函数相同的参数和返回值功能。call()方法实质上成为了实例的默认调用方式。

2025-12-22 21:02:58 168

原创 Android学Dart学习笔记第二十三节 类-扩展类型

本文介绍了Dart语言中的扩展类型(extension type)特性。扩展类型是一种编译时抽象,它通过静态接口包装现有类型,无需创建运行时包装对象,实现零成本抽象。 主要内容包括: 扩展类型的声明语法,使用extension type关键字和表示类型声明 构造函数的定义方式,包括命名构造和私有构造 成员方法的添加规则,需要显式声明要暴露的表示类型成员 implements子句的使用,可以继承表示类型或超类型的接口 @redeclare注解用于明确重声明超类型成员 扩展类型的两种核心用例:为现有类型提供扩展

2025-12-19 22:55:19 893

原创 Android学Dart学习笔记第二十二节 类-扩展方法

本文介绍了Dart语言中的扩展方法(extension methods)功能。扩展方法允许在不修改原始类的情况下,为现有类添加新功能。文章详细说明了如何定义和使用扩展方法,包括:1)基本语法和实现方式;2)解决API冲突的方法;3)静态类型与动态类型的区别;4)泛型扩展的应用;5)命名扩展与未命名扩展的区别。扩展方法支持添加方法、getter、setter和运算符等成员,能够显著提升代码的可读性和工具支持度,特别是在无法修改原始API时尤为有用。

2025-12-19 21:30:32 1023

原创 Android学Dart学习笔记第二十一节 类-点的简写

Dart 3.10引入的点号简写语法(.foo)允许在上下文类型明确时省略类型前缀,使代码更简洁。该语法适用于枚举值(.running)、静态方法(.parse)、构造函数(.origin)等场景,通过编译器推断类型来简化代码书写。使用时需注意上下文类型必须明确,且不支持泛型类型推断。该特性显著减少了重复代码,提升了开发效率,特别适合枚举、静态成员和构造函数调用等场景。

2025-12-19 19:51:52 866

原创 Android学Dart学习笔记第二十节 类-枚举

关键字都是一样的可以以,结尾以便利于复制,而不会产生问题//3Dart还允许enum声明使用字段、方法和const构造函数来声明类,这些构造函数限制为固定数量的已知常量实例。声明增强型枚举时,遵循与普通类类似的语法,但有一些额外要求:实例变量必须是 final,包括由 mixin 添加的变量所有生成式构造函数必须是 const工厂构造函数只能返回固定的、已知的枚举实例之一不能继承其他类,因为 Enum 会自动被继承不能重写 index、hashCode 或相等运算符 ==

2025-12-17 21:28:33 471

原创 Android学Dart学习笔记第十九节 类-混入Mixins

Dart中的Mixin机制是一种灵活的代码复用方式,允许在不继承同一父类的情况下为多个类添加相同功能。通过with关键字使用Mixin,可以将其功能注入到类中。Mixin通过mixin声明定义,可以包含属性和方法,但不能有构造函数或继承关系。Mixin可以通过抽象方法、接口实现或on子句来声明依赖的成员,其中on子句用于指定Mixin可用的超类类型。Dart 3.0引入的mixin class声明允许一个类既可作为普通类使用,又可作为Mixin使用。Mixin机制有效解决了多重继承的问题,实现了更灵活的代码

2025-12-17 21:07:12 317

原创 Android学Dart学习笔记第十八节 类-继承

Dart继承机制允许使用extends创建子类,通过super引用超类。子类可以覆盖父类的方法、getter和setter,需使用@override注解并保持方法签名兼容。当调用不存在的方法时,可通过覆盖noSuchMethod()提供自定义处理,但必须声明为dynamic类型或实现该安全机制,否则无法通过编译检查。方法覆盖需保持返回类型协变、参数类型逆变,并严格匹配参数数量。

2025-12-17 20:06:46 198

原创 Android学Dart学习笔记第十七节 类-成员方法

本文介绍了Dart类中的四种方法类型:实例方法(Instance methods)、运算符重载(Operators)、getter/setter方法和抽象方法(Abstract methods)。实例方法是最常见的方法类型,可以访问实例变量和this;运算符重载实际上是具有特殊名称的实例方法;getter/setter用于属性访问控制;抽象方法只定义接口不提供实现,需在子类中具体实现。每种方法类型都通过代码示例展示了其语法和使用场景,帮助开发者理解Dart类中方法的多样性。

2025-12-17 19:52:03 250

原创 Android学Dart学习笔记第十六节 类-构造方法

本文深入介绍了Dart中的多种构造函数类型,包括生成式构造函数、默认构造函数、命名构造函数、常量构造函数、重定向构造函数、工厂构造函数等。文章详细说明了每种构造函数的特性、使用场景和语法示例,如常量构造函数创建不可变对象,工厂构造函数用于缓存实例或返回子类型等。此外还介绍了实例变量初始化的三种方式:声明时初始化、使用初始化形式参数以及初始化列表。通过具体代码示例,帮助开发者理解不同构造函数的适用场景和实现方法。

2025-12-17 17:01:09 757

原创 Android学Dart学习笔记第十五节 类

摘要 Dart是一种面向对象语言,基于类和mixin继承机制。所有类(除Null外)都继承自Object类。Dart支持: 类成员访问(使用.或?.操作符) 多种构造函数(生成式、命名式和工厂式) 常量构造函数(使用const创建编译时常量) 实例变量(可声明为final或late) 隐式接口(每个类都隐式定义接口) 类型检查(推荐使用is/as操作符而非runtimeType) Dart的构造函数语法灵活,支持命名构造和工厂模式。实例变量管理严格,final变量需初始化,late变量可延迟初始化。

2025-12-15 19:31:58 1277

原创 Android学Dart学习笔记第十四节 库和导库

其他语言中的访问修饰符关键字提供了更细粒度的控制,而Dart使用下划线和基于库的隐私提供了直接的配置机制,有助于高效实现动态访问,并改进了树抖动(死代码消除)。库不仅提供api,还是隐私的单位:以下划线(_)开头的标识符只在库内部可见。当你导入的多个库中,使用了相同的类名时,可以为库起个别名,使用 别名.类名 明确指定所引用的类。使用import来指定如何在另一个库的作用域中使用来自一个库的命名空间。带有通配符_的导入前缀是不绑定的,但可以访问该库中的非私有扩展。

2025-12-15 12:15:10 851

原创 Android学Dart学习笔记第十三节 注解

Dart注解(Metadata)简介 Dart中的注解(又称Metadata)以@符号开头,用于为代码提供额外静态信息。内置注解包括: @Deprecated/@deprecated - 标记废弃声明 @override - 标记覆盖父类方法 @pragma - 向Dart工具提供指令 Analyzer支持的注解有: @visibleForTesting - 仅测试可见 @awaitNotRequired - 标记无需await的Future 开发者可自定义注解,通过@Target限制注解目标类型,使用时需

2025-12-15 11:19:04 558

原创 Android学Dart学习笔记第十二节 函数

读取属性调用getter函数,编写属性调用setter函数,即使在属性被声明为变量的情况下也是如此。在上面的例子中,我们在main函数中声明了print1,在print1中声明了print2, 在print2函数中我们可以调用所有父函数的局部变量,但在main函数中不可以跨层级调用print2函数。对于任何一个语言的程序员来说,在任意一门语言中定义一个函数都不会是一个难事,但是我们任然需要去学习dart的函数定义,不是因为我们不会,而是也许可以更好。当你需要延迟生成一系列值时,可以考虑使用生成器函数。

2025-12-04 19:34:08 1200

原创 Android学Dart学习笔记第十一节 错误处理

本文介绍了Dart语言中的异常处理机制。与Java不同,Dart的所有异常都是未检查异常,方法不需要声明可能抛出的异常,程序可以抛出任何非空对象。文章详细讲解了throw、catch和finally的用法,包括捕获任意对象、获取堆栈信息、重新抛出异常等特性。同时介绍了Dart的断言机制,指出断言在调试模式下有效但在生产环境中会被忽略。通过多个代码示例展示了异常处理的实际应用场景,包括捕获断言错误等特殊情况。

2025-12-04 16:03:43 849

原创 Android学Dart学习笔记第十一节 分支

通俗的讲,只要case子句不是空的,执行完成之后就不会再执行其他case子句。当值的范围是有限且明确,如bool,enmu等,如果未对switch语句提供对应的case且没有提供defalut子句,编译时将会报错。文档上叫Branches,实际上呢就是条件判断,包含了 if else,switch, when之前我们也基本都有涉猎,一种新的写法,和我们之前学到的模式共用,不管怎么样最终括号内的都是bool,也不难理解。在上面的例子中,在case 1的子句末尾,我们手动书写了。非常熟悉,毫无差别。

2025-12-03 19:12:47 574

原创 Android学Dart学习笔记第十节 循环

本文介绍了Dart语言中的循环控制结构,包括for循环、while循环以及break/continue语句的使用。文章通过多个代码示例展示了基本循环语法、闭包中的索引捕获、for-in循环、模式匹配在循环中的应用等特性。特别讲解了Dart特有的标签(label)功能,该功能可用于多层嵌套循环中的精确控制。最后指出虽然标签提供了灵活的控制方式,但应避免过度使用多层嵌套循环。整体而言,Dart的循环语法与其他主流语言类似,但具有一些独特的特性如模式匹配和标签机制。

2025-12-03 18:17:55 602

原创 Android学Dart学习笔记第九节 Patterns

Dart模式匹配与解构语法解析 Dart语言中的模式(Pattern)是一种语法结构,可用于值匹配和解构操作。模式匹配可以检查值是否符合特定形状、常量、类型或相等性;模式解构则能方便地将值分解为组成部分并绑定变量。 主要功能包括: 匹配测试:检查值是否符合预期形式 递归匹配:支持嵌套子模式 解构操作:提取对象数据到变量 应用场景: 变量声明:使用var/final后跟模式 变量赋值:交换变量值无需临时变量 Switch语句:支持多种模式匹配 集合处理:支持通配符(_)和剩余元素(...) 该语法提供了声明式

2025-12-03 15:50:51 685

原创 Android学Dart学习笔记第八节 Typedefs 别名

文章摘要:本文介绍了Dart语言中的类型别名(typedef)功能及其应用场景。类型别名通过typedef关键字创建,为复杂类型提供简洁引用方式。文章展示了基本用法(如typedef IntList = List<int>)、带泛型参数的类型别名,并指出2.13版本后扩展了非函数类型的支持。特别探讨了typedef在记录类型(Record)中的实用价值,如组合多个数据类(typedef DetailInfo = (User, UserMore))。同时提醒注意新版语法差异和括号使用规范,建议在大

2025-11-28 02:23:56 391

原创 Android学Dart学习笔记第七节 泛型

摘要 Dart语言中的泛型使用<>符号定义,类型变量通常用单字母表示(如E、T等)。泛型的主要作用包括: 类型安全:确保集合只包含指定类型元素 代码复用:通过泛型类/方法减少重复代码 更好的静态分析:编译器能进行更精确的类型检查 集合字面量(List/Set/Map)都可以使用泛型参数。Dart的泛型在运行时保留类型信息(reified),但实际能力有限,使用时仍需谨慎。可以通过extends限制泛型参数类型范围,如<T extends Object>确保非空类型。 (字数:149)

2025-11-28 01:13:40 540

原创 Android学Dart学习笔记第六节 Collections

相较于 Java 或 Kotlin 中细分的集合类型,Dart 的集合设计更为简洁统一。这种简洁性源于语言层面的合理预设:例如,List 默认采用动态数组实现,旨在降低开发者的选择负担,提升开发体验与效率。此外,Dart 集合原生支持空安全、条件插入、元素跳过等常见逻辑,配合函数式方法(如 where、map),能够以极简的语法实现复杂的集合操作,显著提升了代码的简洁性与表达力。当然,这种便利性也伴随着潜在风险。

2025-11-27 01:57:55 654

原创 Android学Dart学习笔记第五节 记录Records

与 List/Map 等集合也不同,它允许为其中每一个位置的元素指定独立的类型,提供了更强的类型安全性。对于使用类型别名作为引用的代码,类型别名不提供任何保护或保证,即被别名的值是一个记录。译文:如果两个记录具有相同的形状(字段集合),并且它们对应的字段具有相同的值,则它们是相等的。记录是基于字段类型的结构类型。记录的形状(字段的集合,字段的类型,以及它们的名称,如果有的话)唯一地决定了记录的类型。译文:让你所有的代码都通过它的别名引用一个记录类型,这使得以后更改记录的实现更容易,而不需要更新每个引用。

2025-11-26 01:36:17 636

原创 Android学Dart学习笔记第四节 基本类型

本文介绍了Dart语言中的基本数据类型。数字类型包括int(整型)和double(浮点型),它们都继承自num类。字符串支持插值表达式、多行文本和原始字符串表示。布尔类型只有true和false两个值。此外还介绍了UTF-16字符编码处理方式,以及Symbol类型作为反射和动态调用的标识符。文章通过代码示例展示了各种数据类型的使用方法,并解释了相关特性。

2025-11-21 18:22:48 1027

原创 Android学Dart学习笔记第三节 运算符

本文介绍了Dart语言中的运算符,包括基本运算符(加减乘除、取余等)、关系运算符(==、>=等)、自增自减(++、--)、位运算符(&、|、^等)以及条件表达式(?.、??等)。重点讲解了Dart特有的级联运算符(..和?..)和展开运算符(...?),这些运算符可以简化对象操作和集合合并。文章还特别指出Dart中整数除法会返回浮点数,需使用~/进行整除运算。这些运算符是Dart编程的基础,掌握它们对编写高效代码至关重要。

2025-11-20 18:08:48 225

原创 Android学Dart学习笔记第二节 常量

本文深入探讨了Dart语言中final和const两种常量定义方式。通过官方文档解析和实例测试,指出final适用于运行时不可变变量,而const要求编译时确定值且只能修饰编译期常量。文章详细对比了两者的特性:const对象相同值会复用,必须初始化;final对象字段可变。同时验证了const只能用于修饰拥有const构造函数的类实例,并展示了List等内置类型的特殊处理。最终总结二者的共同点和核心差异,帮助开发者正确选择常量定义方式。

2025-11-17 18:38:40 1155

原创 Android学Dart学习笔记第一节 变量

本文介绍了Dart语言的基础变量知识,包括: 编辑器选择和main函数写法; 使用var定义变量的类型推断特性; 显式声明变量类型的方法; dynamic类型的灵活性和潜在风险; 空安全机制及默认值规则; late修饰符的延迟初始化用法。 文章通过代码示例展示了Dart与Java/Kotlin的相似与差异之处,为Android开发者快速上手Dart提供了实用参考。

2025-11-17 11:36:37 1192

原创 Jetpack Compose 重组陷阱:一个“乌龙”带来的启示

这个看似“乌龙”的问题 (

2025-07-14 23:02:39 560

原创 react初学踏坑记录-if(number)到底过滤了什么

为了正确处理接口返回的异常,所有更新余额的网络方法有可能在catch后返回undefined,为了避免这种数据对客户端逻辑的影响,直接使用了if(number),导致如果余额减少后为0,是无法及时刷新余额的。求助了同事,他发现网络请求返回和设置更新值之间应该打印一条日志,but没有出现,一下子缩短了问题的范围,这才怀疑到了这个判断上。起初,怀疑是不是提现完后立马刷新余额,服务器还没来的刷新,或者有缓存,所以加了详细的日志等待确认;so,怀疑是不是网络请求后没有正确设置,看了代码很无力,没有找到。

2025-04-30 18:13:06 256

原创 viewmodel协程中执行耗时操作,导致viewmodel创建两次,导致observer失效

有问题的viewmodel。修改后的viewmodel。

2025-04-11 18:51:50 342

原创 Android视角看鸿蒙第十二课-鸿蒙的布局之相对布局RelativeContainer

RelativeContainer为采用相对布局的容器,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。下图是一个RelativeContainer的概念图,图中的虚线表示位置的依赖关系。看起来和Android没什么差别,可以依赖兄弟组件,也可以依赖父布局,同样不可以依赖兄弟的儿子。哈哈和Android差不多吧,语法熟悉下就可以了。

2024-04-23 09:52:06 1219

原创 Android视角看鸿蒙第十一课-鸿蒙的布局之层叠布局Stack

Stack组件为容器组件,容器内可包含各种子组件。其中子组件默认进行居中堆叠。下面看效果图可以看到Stack的第一个子组件宽度是90,默认是居中的(和Android有区别,写完一定要跑,不要太自信text在Column 的上层,遮挡了部分Columnbuttom在text的上层,遮挡了部分text。

2024-04-07 15:50:20 1571 3

原创 Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android中是使用LinearLayout来构建线性布局的,通过**orientation的取值(vertical或horizontal)**来控制排列方向鸿蒙线性布局的排列方向由所选容器组件决定,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。

2024-03-28 14:14:57 1302

原创 Android视角看鸿蒙第九课-鸿蒙的布局

虽然华为有八大布局,但是可以分为(线性布局、层叠布局、相对布局)等类Android布局;弹性布局为线性布局加强版;(列表(List)、网格(Grid))等列表布局;轮播(Swiper)类Viewpager布局;上面这些在Android中都存在,仅换了个描述(栅格布局(GridRow、GridCol)、媒体查询(@ohos.mediaquery))等跨设备兼容布局这两个属于新增的,都是为了跨设备的UI兼容android常用的布局基本都是存在的,我能想到的是缺少了瀑布流。

2024-03-25 15:15:07 1126 1

原创 Android视角看鸿蒙第八课(module.json5中的各字段含义之abilities)下

到现在为止已经有8篇文章了,学习桌面图标的定义,程序入口的定义等等,也对鸿蒙工程的配置文件有了一定的了解。下篇文章开始学习UI相关了。

2024-03-20 11:56:56 1579

dart sdk 3.10.6

造福一下国内的兄弟,dart最新版本sdk

2025-12-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除