自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RikkaTheWorld

El Psy Congroo

  • 博客(374)
  • 收藏
  • 关注

原创 Effective Kotlin 中文版

1. 这段时间做了什么前两个月,我买了一本 《Effective Java》 ,读了一半后发现,我现在使用的语言是 Kotlin,不是 Java!虽然它提供了很多有用的开发知识,但那都是基于 Java 的,我最终还是得将其“翻译” 到 Kotlin 语言上,属实难绷。于是,我就想:那有没有 《Effectvie Kotlin》 呢? 我搜了一下,发现确实有,但是它没有实体书,它甚至都没有中文版!如图我做了一个决定: 将其翻译成中文,并传播到社区,让更多的 Kotlin 中文社区开发者都能看到这本书!

2022-05-27 19:20:06 891 2

原创 计算机图形学 3D 渲染 笔记(二)

光追的简单性的代价是性能。而光栅化渲染模型是追求性能,而不是数学纯度。它的思维方式和光追相反。光追:思考画布上的每个像素,场景中的哪个物体在这里是可见的?光栅化:思考场景中的物体,在画布上的哪个像素这个物体是可见的?绘制任意斜率的直线当线趋于水平时()使用 ,确保能画出水平线当线趋于垂直时()使用 ,确保能画出垂直线线性插值函数是基于绘制任意斜率中提取的公共部分,为 ,它计算两点之间线段上的点的 x 或 y 值,放置到一个数组中。当线趋于水平时,使用 返回这些值是 y(因变量),当线趋于垂直时

2023-07-11 08:37:02 505

原创 计算机图形学 3D渲染 笔记(一)

通过镜面反射,需要计算进入相机的反射光,因此还要加上这部分的轻度光。一般来说,一个场景会有单个环境光(因为环境光只有一个强度,任意数量的环境光都可以简单地组合成一个环境光),和任意数量的点光和方向光。,其中 Ia 为环境光强度, Li 为第i个方向光/点光的强度,西格玛用于计算每个点光或方向光的下单位面积的光强度,并去除。,由于大于 90 °时,该值是负数,因此相当于光找事到了其背面,相当于是黑暗的,因此我们只取其为正数的时候,也就是。, 这是反射光的比例函数,是物体表面法线和光线方向之间夹角的比例。

2023-06-29 10:07:08 809

转载 C# 学习(三)高级能力

Obsolete声明自定义特性构建自定义特性在目标程序元素上应用自定义特性通过反射访问特性这里使用到反射的知识,本节先不讲解,将会在下节讲述一个新的自定义特性需要继承true我构建了一个名为DebugInfobug 的代号编码辨认该 bug 的开发人员名字最后一次CR 该代码的日期一个存储了开发人员标记的字符串消息我们的DebugInfo类有三个用于存储前三个信息的私有属性,和一个存储消息的公共属性。所以前三个是必须的定位(positional。

2023-06-24 14:06:40 626

转载 C# 学习(二)基础语法

比如预处理器指令可以禁止编译器编译代码的某一部分,如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,就可以使用这些预处理器指令来控制。给函数传递引用参数,意思是传递一个对变量的内存位置的引用,因此在函数体对它进行修改时,调用该函数的函数中,变量也会发生改变。一个方法只能返回一个数据,而通过传递输出参数,则函数能输出多个参数,而且和传递引用参数一样,方法能够改变传入参数的实际值。其定义方法的方式和 java 一致,但不同点是,它的参数传递除了可以传递一般的值,还可以传递。指令来创建一个条件指令。

2023-06-23 11:39:46 148

转载 C# 学习(一)概述

C# 是.NET框架的一部分,随之创造出来的语言,所以了解 C# 前,需要知道 .NET 是个什么东西。.NET.NET 是一个开源平台,用于构建能够在任何操作系统上本地运行的桌面、Web 和移动应用程序。.NET 系统包括支持现代、可扩展和高性能软件开发的工具、库和语言。.NET 平台有一个活跃的开发人员社区来维护和支持。概括的说,.NET桌面应用程序Web 网页Web 服务移动端 App可以看出.NET框架是跨平台的。其次.NET的核心代码基本是由 C#编写的。

2023-06-22 09:18:21 563

原创 深潜Kotlin协程(二十):Flow 的处理

有许多工具支持 flow 处理。对它们有所了解是一件好事,因为它们在后端和 Android 开发中都很有用。另外,如果你需要一些不同的函数,可以通过collect方法和flow构建器轻松的实现它们。

2023-04-17 09:50:11 121

原创 Android Gradle 学习笔记(四)构建块基本单元掌握

我们可以通过task或tasksprintln("Hello World") } // 这里的用法等于 task("printRikka") {} tasks . create("printRikka") {在上面代码中,我们使用了创建了一个任务。在每次 Gradle 开启时,会先跑一遍它的配置代码。这里可能会有些小问题:比如我不想它那么早的运行配置代码,如果我弄了很多 task,一些还是非必要的、动态的,那岂不是容易影响性能?因此 Gradle 提供了懒加载 task,我们可以通过。

2023-02-22 09:41:53 420 1

原创 Android Gradle 学习笔记(三)语言和命令

Gradle 支持使用 或 来编写脚本。所以在学习具体怎么写脚本时,我们肯定会考虑到底是使用 Kotlin 来写还是 Groovy 来写。不一定说你是 Kotlin Android 开发者就一定要用 Kotlin 来写 Gradle,我们得判断哪种写法更适合项目、更适合开发团队人群(学习成本)。所以下面来学习一下这两种语言的差异。它们共同特点就是基于JVM,可以和 Java 互操作。Gradle 能提供的东西, Kotlin 也能通过提供(闭包)。在功能上,两者能做的事情都是一样的。此外一些简单的差异有

2022-12-08 10:38:18 603

原创 Android Gradle 学习笔记(二)环境安装

Gradle 安装地址:Gradle | Installation最新的 Gradle 版本是 7.6, 需要 Java 8及以上的版本支持,官网有两种版本可下载:一般情况下,下载二进制版就OK了, 文档和文档可以在线查看。下载得到压缩文件,解压缩后,将文件地址添加到环境变量中(使用 ):然后在 path 中添加 gradle 的 bin 目录:接着验证下安装是否成功, 在命令行中输入 命令 ,若打印版本号则安装成功:如果你已经有 Gradle Wrapper, 那么你可以使用 Wrapper

2022-12-05 09:07:27 1185

原创 Android Gradle 学习笔记(一)概述

是 Android 开发息息相关的一门技术,由于 IDE 高度集成了 Gradle,大部分人平时基本和 Gradle 打不上交道,很多应用层开发者对这方面的认知较为浅薄,知识点零散。但假如你写的代码要放在用户的手机上用,你总不能让用户的手机连着你的电脑吧?所以我们并不用关心 IDE 底层到底是如何编译代码的,只关心代码能不能在平台上按预期跑,有没有Bug,把注意力集中在应用层的代码逻辑实现上。每些操作都需要依赖独特的工具,很明显,我们这些上层开发肯定是不会参与到这一流程中的,而是交给一套脚本工具,

2022-12-02 09:42:17 362

原创 Kotlin DSL 学习

领域特定语言(domain-specific language),这个翻译不够直观,它应该叫“特定领域的语言”。字符串匹配网络请求视图树构建数据库操作…这些都是一个 App 项目中随处出现的场景,而我们可以用一个语言来全部处理它们,例如 Java、C++、Python,这些语言被称为领域通用语言(General Purpose Language, GPL),它就是 DSL 的对立概念,也是我们每天都在使用的东西。

2022-10-25 15:53:03 968

原创 Android MVI 架构学习

这些年来,Android 上发展了多种主流架构,从最开始的MVC,到Clean和MVP,再到现在最火热的MVVM,可以说架构发展一直很卷,这不,MVVM还没有用个几年呢,MVI就出来了。要说 Android 架构卷,实则不然,上面说的这些架构其实根本不是来自 Android 的,而是源自于Web,即大前端, Web 由于其自身特性(还不算完全成熟,业务多且杂,热部署等),版本迭代速度巨快,技术的更新迭代也因此很快,上面这些架构最早就是在前端所应用和发展出来的, 而移动端则是直接抄来,跟着Web的步伐前进。.

2022-08-29 20:23:38 3029 3

原创 Kotlin 1.5新特性记录

最近公司项目从 Kotlin1.4升级到了Kotlin1.7,直接跳过了中间 1.5、1.6 的版本,因为没有了解过版本升级后的新特性,所以补一下 1.5~1.7 的新知识。所有内容均来源于,会过滤掉非 Kotlin / JVM 的平台特性。......

2022-08-10 09:18:01 711

原创 Jetpack Compose 的 Navigation学习

Navigation是 Jetpack 用于 Android 导航的组件,作用是处理页面跳转,以及页面跳转过程中的交互。使用Navigation,你就需要为每个页面设定一条唯一路径,它是一个 String 常量,形式是 DeepLink 的样子,从一个页面跳转到另一个页面,它通过输入目的地的路径进行转跳。Navigation也支持上 Compose,我们可以在 Compose 中使用它来进行跳转。因为官网和所看到的demo都是把它作为跳转能力使用,所以不清楚 Compose 是否还有别的跳转方式….....

2022-08-06 13:03:35 1651

原创 Jetpack Compose Effect 的作用

mutableStateOf("rikka") } // 1. 状态 Text(text = "Hello, $ name!name = it } , // 2. 行为 label = {$namemutableStateOf("rikka") } // 1. 状态 Text(text = "Hello, $ name!name = it } , // 2. 行为 label = {注释1、2处的状态和行为只和这个可组合项有关,它们不会改变外界的任何东西,只影响内部的 Text, 整个。...

2022-08-03 12:01:20 942

原创 Jetpack Compose 中的状态管理

Compose是用声明式来描述UI,注解所修饰的函数必须是一个没有返回值的纯函数,就算有副作用也是可控的,副作用的管理有Effect,之后再去了解。函数式编程和状态机是矛盾的、冲突的。Text(text="$id")//展示文案的TextViewTextButton(onClick={id++////每次点击Button都对id加1这里要如何改变上面Text的文案??????}){Text(text="点击我对id加1")}}$id因为。...

2022-07-31 20:29:27 916

原创 深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow

系列电子书:传送门Flow 是典型的冷数据流,所以它的值是按需计算的。然而在某些情况下,我们希望多个接收者订阅一个会更改的数据源。这就是我们使用 的地方,它在概念上类似于邮件列表。我们还有 ,它近似与一个可观察对象。让我们一个个了解它们。让我们从 开始,它就像一个广播通道:每个人都可以发送(发射)信息,信息会被被每个正在监听(收集)的协程接收。上面的程序永远不会结束,因为 会等待它里面用 启动的协程结束,而这些协程一直监听 ,显然, 是不可关闭的,所以解决这个问题的唯一方法是取消整个作用域。 也

2022-07-07 18:57:17 2391

原创 深潜Kotlin协程(二十二):Flow的处理

系列电子书:传送门我们将 Flow 描述为一个管道,值在上面流动,流动时,这些值可以以不同的方式进行更改:删除、相乘、转换或合并。这些在 Flow 被创建到终端操作之间的所有操作称为Flow的处理。在本章中,我们将学习用于此目的的函数。这里提供的函数可能会让你想起用于处理集合的函数,这并不是巧合,因为都代表了相同的概念。不同的是 flow 上的元素可以按时传递。我们需要学习的第一个重要函数就是 。它根据转换函数对流动的每个元素进行变换。假如你有一个整型数据流,你的 操作是计算这些数字的平方,那么最终流上的

2022-07-06 19:53:15 1764

原创 深潜Kotlin协程(二十一):Flow 生命周期函数

系列电子书:传送门Flow 可以想象成一个管道,请求的值在一个方向上流动,而相应产生的值在另一个方向上流动。当 flow 完成或出现异常时,这些信息也会被传递,并关闭途中的中间步骤。因此,当这些值开始流动时,我们可以监听值、异常或其它特征事件(如开始或完成)。为此,我们使用了 、 、、 和 等方法。下面让我逐一解释这些生命周期方法。为了响应每个流动的值,我们使用 函数。 的 lambda 表达式是挂起的,元素依次按顺序(顺序)被处理。因此,如果我们在 添加 函数,我们将延迟每个值的流动。onSt

2022-07-04 18:32:42 851

原创 深潜Kotlin协程(二十):构建 Flow

系列电子书:传送门每个 flow 都需要从某个地方启动。有很多方法可以做到这一点,这取决于我们需要什么,在本章中,我们将集中讨论那种最重要的用法。创建 flow 的最简单方法是使用 函数,在该函数中,我们只需定义该 flow 应该具有哪些值(类似于创建列表的 函数)。有时,我们可能还需要没有值的 flow。为此,我们可以使用 函数(类似于创建空列表的 函数)。转换器我们还可以使用 函数将每个 、 或 转化成 flow :这些函数产生立即可用的元素流,然后我们可以使用 flow 处理函数来

2022-07-01 20:23:19 1017

原创 深潜Kotlin协程(十九):Flow 概述

系列电子书:传送门 表示的是一个用于异步计算的数据流。 接口本身只允许收集那些流动的元素,这也就是说每个元素只有到达流的末端时,我们才去处理它们(Flow 的 类似于集合的 )。可以看到, 是 中唯一的成员函数。其它的函数都被定义为扩展函数。这与 或 类似,它们都只有 作为成员函数。流 vs 其他表示数据的方式对于使用 或 的人来说,流的概念应该是他们最熟悉的,但对于其他不熟悉的人,可能需要更好的解释。假设你需要一个函数返回多个值,如果这些值同时被提供出来,我们会使用像 和 这样的

2022-06-30 20:00:05 1019

原创 深潜Kotlin协程(十八):冷热数据流

系列电子书:传送门在这里插入图片描述](https://img-blog.csdnimg.cn/d2893ae770c34a7b924a3372997cbafb.png)Kotlin 协程最初只有 Channel,但创造者意识到这个是不够的。 Channel 是一种热数据流,但是我们经常需要冷数据流。了解热数据流和冷数据流之间的区别可以帮助我们更好的学习 Flow 和其他相关的技术,因为你日常使用的大多数数据源都属于这两类之一。集合(List、Set)是热的,而序列和 Java Stream 是冷的。Ch

2022-06-29 09:54:24 1502

原创 深潜Kotlin协程(十七):演员

系列电子书:传送门在计算机科学中,有一种并发模型,称为演员模式(actor model),其最重要的概念就是演员,它是一个计算机实体,响应接收到的消息,它可以并发下面行为:演员可以修改自己的私有状态,但只能通过消息传递间接的影响其它演员,因此不需要同步它们。每个演员运行在单个线程上,一个接一个地处理消息。在 Kotlin 协程中,我们可以很容易地实现这个模型。我们使用 channel 将消息队列同步到演员上,然后我们只需要一个接一个处理这些消息的协程。在下面的代码片段中,你可以看到我们的 问题用演员模型解

2022-06-28 09:17:46 315

原创 深潜Kotlin协程(十六):Channel

系列电子书:传送门 用于在协程间的原语通信。许多人把 channel 想象成 pipe(管道)。但我更喜欢一个不同的比喻,你熟悉用于交换书籍的公共书柜吗?一个人会在里面放上另一个人所需要找的书,这与 kotlinx.coroutines 的 非常相似。Channel 支持任意数量的发送方和接收方。并且发送到 Channel 的每个值只会被一个协程接收(一次)。 是一个接口,它实现了另外两个接口:由于这种区别,我们可以只暴露 或 来限制 channel 的入口/出口点。你可能注意到了, 和 都是挂起

2022-06-27 21:01:49 672 1

原创 深潜Kotlin协程(十五):测试 Kotlin 协程

系列电子书:传送门在大多数情况下,测试挂起函数与测试正常函数没有什么不同。看看下面的 。通过伪造Fake(或模拟Mock)和简单的断言,我们可以很容易地测试它是否按预期显示数据:上面的测试函数不应该作为参考标准。对于单元测试的表达有多种多样的方式。我在这里使用了 伪造fake 而不是 模拟mock,这样就不会引入任何三方库(我个人也更喜欢这种方式)。我还尝试让所有的测试都尽量简化,以使它们更容易阅读。类似的,在许多情况下,如果我们需要测试挂起函数,实际上只需使用 和一些经典的断言工具。这就是单元测试在许

2022-06-24 17:51:22 1267

原创 深潜Kotlin协程(十三):构建协程作用域

系列电子书:传送门在前几章中,我们已经了解了构建作用域所需的工具。现在是时候总结这一知识,并看看它在实际项目中是如何使用的。我们将展示两个常见的例子,一个用于 Android,一个用于后端开发。 是一个只包含 属性的接口。因此,我们可以让一个类实现这个接口,并直接使用它来启动协程。然而,这种方法并不是很流行,虽然它确实很方便,但在这种类中,我们可以直接调用 其它的方法,例如 、 ,这是有问题的。就算是无意为之,有人也很有可能会在别的地方不小心取消整个协程作用域,协程之后将不再启动。相反,我们通常更

2022-06-17 18:50:39 864

原创 深潜Kotlin协程(十二):Dispatchers 协程调度器

系列电子书:传送门Kotlin 协程库提供的一个重要的功能是让我们能决定协程应该运行在哪个线程(或线程池)上,这是通过使用调度器来完成的。在英语词典中,dispatcher 的意思是“负责将人员或者车辆运送到指需要地方的人,尤其是那些紧急车辆”。在 Kotlin 协程中, 可以决定某个协程在哪个线程上运行。Dispatchers in Kotlin Coroutines are a similar concept to RxJava Schedulers.如果不设置任何调度器,则默认选择 ,它被设计用于运

2022-06-16 20:26:31 3881 2

原创 深潜Kotlin协程(十一):协程作用域函数

系列电子书:传送门想象一下,在挂起函数中,你需要同时从两个(或者多个)源头获取数据,在了解如何正确的处理之前,我们先来看看一些次优的方法。第一种方法是从挂起函数中调用挂起函数,这个方案问题点是它不是并发的(如果从每一个源头获取数据需要1秒,那么这个函数将需要2秒而不是1秒)。要并发地执行两个挂起,最简单的方法是使用 包装它们,然而, 需要一个作用域,使用 并不是一个好主意。 只是一个带有 的作用域。如果在 上调用 ,则与父协程没有联系,这意味着协程:重要的结论是:这不是一个很好的解决方案,让

2022-06-15 20:52:46 486

原创 深潜Kotlin协程(九):协程的取消

系列电子书:传送门Kotlin 协程一个非常重要的功能就是取消。一些类和库使用挂起函数主要是为了支持取消,这一点非常重要。其中有一个很好的理由:一个好的取消机制是名副其实的金子。仅仅终止线程是一个糟糕的方案,应该有一个更好的方案来关闭链接和释放资源。强迫开发人员频繁检查某些状态是否处于活跃状态并不便利。取消的问题持续了很长一段时间才有了一个好的解决方案,但是 Kotlin 协程库提供的方案却出奇的简单,它们既方便又安全。这是我职业生涯中见过最好的取消机制。让我们来探讨它。 接口有一个 方法,用于取消它,调

2022-06-10 18:53:27 1756

原创 深潜Kotlin协程(八):Job 和等待子协程

系列电子书:传送门在结构化并发一章中,我们提到父子关系会有以下影响:事实上,子协程从父协程继承上下文是协程构建器行为的基本组成部分。而结构化并发的其它三个重要的影响完全依赖 上下文。此外, 还可以用来取消协程、追踪协程的状态等等。它是非常重要且有用的,所以本章和接下来的两章将专门讨论 上下文以及与之相关的基本协程机制。从概念上讲,一个 表示具有生命周期的、可以取消的东西。从形态上将, 是一个接口,但是它有具体的合约和状态,所以它可以被当做一个抽象类来看待。A job lifecycle is rep

2022-06-10 09:47:30 1729

原创 深潜Kotlin协程(六):协程构建器

系列电子书:传送门挂起函数需要相互传递 。它们调用普通函数没有任何问题,但是普通函数不能调用挂起函数。每个挂起函数都需要由另一个挂起函数调用,而另一个挂起函数又由另一个挂起函数调用,以此类推。但这一切都要从某个地方开始。这个地方就是协程构建器,它是连接正常世界和挂起世界的桥梁。我们将探讨 kotlinx.continues 库提供的三个基本协程构建器:每种方法都有其用例,让我们来逐一了解。 工作的方式在概念上类似于启动一个新线程( 函数)。我们只需启动一个协程,它就会独立运行,就像向空中发射的烟花。下面就

2022-06-07 19:21:51 668 1

原创 Kotlin Monad的学习

文章目录0. 前言1. 概述1.1 起源1.2 Monad 可以看成一种设计思想1.3 数学概念1.3 Monad 的模板代码2. arrow-kt 中的代码实例总结参考0. 前言在学习函数式编程时,函子(Funtor)、单子(Monad) 是非常难啃的骨头,它们来自于数学范畴论,又只在 Haskell 这种满是学术气息的语言上发展,本来阅读了几篇 Kotlin 上介绍该概念的文章,但是感觉吸收不够好,所以写这篇文章来学习和记录。此外,FP Kotlin 框架 arrow-kt 里面已经具象了这个概

2022-03-20 15:04:07 3509

原创 Kotlin 异常处理之 Option、Either、Result

文章目录1. 异常处理概述2. Option3. Either4. Result5. 小结1. 异常处理概述2. Option3. Either4. Result5. 小结

2022-03-03 22:09:47 3737

原创 Kotlin 用列表处理数据

文章目录1. Kotlin 有哪些可用的列表1.1 使用持久数据结构1.2 实现不可变的、持久的单链表1. Kotlin 有哪些可用的列表Kotlin 提供 可变、不可变列表。 在 Java 中也支持,但是得益于 Kotlin 的扩展函数特性, 列表拥有了大量增强性能的函数。可变列表像 Java 列表一样,可以通过添加、插入或者删除元素来改变列表, 这样一来,列表的早期版本将会丢失不可变列表又称只读列表,不能被修改的列表。 如果向其添加一个元素,则会创建一个添加了新元素的原始列表的副本。不可变

2022-02-15 09:21:43 1369

原创 Koltin 递归、尾递归和记忆化

文章目录1. 递归与尾递归1.1 尾递归(tail call)1.2 递归1.3 递归和尾递归的区别2. 尾递归消除2.1 尾调用消除学习秒表:了解 Kotlin 中的尾递归函数从 尾递归 了解 fold、foldRight、 reverse 等实现为什么用递归来代替for循环实现记忆化1. 递归与尾递归Kotlin 中很好的支持递归函数,使得递归可以被广泛使用, 但是稍微了解算法的人都知道, 递归函数一不小心就会爆栈,即随着递归次数的增加,内存不足以存储中间的计算步骤和中间结果,导致内存

2022-01-27 16:58:18 1895

原创 Kotlin 用函数编程

文章目录1. 函数式编程风格的意义1.1 数学中的函数1.1.1 偏函数1.1.2 多参数的函数1.1.3 柯里化函数1.1.4 偏应用函数1.2 Kotlin中的函数2. 柯里化函数内容:● 了解Kotlin函数本质● Lambda 表达式(Lambda学习)● 使用高阶函数、科里化函数● 正确的使用类型目标主要是为了弄清楚:● 使用函数式编程的意义是什么?● 为什么我要将函数作为参数传递?我定义一个接口,让他们来调用不就好了?我为什么要把函数作为一个值● Lambda看起来就是减少了写

2022-01-20 09:57:48 2603

原创 Flutter学习 文件操作与网络请求

文章目录1. 文件操作1.1 App 目录1.2 示例1. 文件操作Dart 有 io 库,包含了文件读写,所以可以通过该库可以操作 Dart VM 下的脚本 和 Flutter。和 Dart VM 相比, Flutter 一个比较重要的差异是文件系统路径不同, Dart VM 是运行在 PC 或 服务器操作系统下, 而 Flutter 是运行在 移动操作系统(Android 、 iOS)中,这会导致文件系统有一些差异。1.1 App 目录Android 和 iOS 的应用存储目录不同, Path

2022-01-07 09:34:32 649

原创 Flutter学习 功能型Widget

文章目录1. WillPopScope1.1 示例2. InheritedWidget2.1 didChangeDependencies2.2 深入了解 InheritedWidget1. WillPopScope是导航返回拦截的组件, 类似于 Android 中封装的 onBackPress 方法,来看看它的构造函数:class WillPopScope extends StatefulWidget { const WillPopScope({ Key? key, require

2021-12-29 09:42:14 453

原创 Flutter学习 可滚动Widget 下

文章目录11 自定义 Sliver11.1 Sliver 布局协议11.2 Sliver 模型 和 盒模型11.3 SliverFlexibleHeader11 自定义 Sliver这里通过官方示例的两个 Sliver, 来说明 Sliver 布局协议和 自定义 Sliver 的具体过程11.1 Sliver 布局协议Viewport 将当前布局信息和配置信息通过 SliverConstraints 传递给 SliverSliver 确定自身的位置、绘制等信息,保存在geometry 中 ,这就

2021-12-23 10:30:18 2107

空空如也

空空如也

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

TA关注的人

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