它基本上只是一个注释。
我将最令我惊讶的部分加粗。
请原谅我不能听到太多,因为我正在审查代码等。DroidKaigi 2022のセッションで驚いたところ

使用 Jetpack Compose 的 Material Design 3

设计令牌 = 设计的命名值。

这就是我将脑海中的图像转换为代码时的样子。

interface DesignToken

class SystemToken(
  // ここのContextはDarkThemeかどうかなどという意味のContext
  val refs: Map<Context, ReferenceToken>
): DesignToken

class ReferenceToken(val color: Int): DesignToken

该字符串的一个示例是md.sys.color.on-secondary。当它被分解时,它变成如下。

md.sys.color.on-secondary
↑ デザインシステム名
md.sys.color.on-secondary
   ↑ Design Tokenの種類。これは `sys` なので、システムトークン
md.sys.color.on-secondary
          ↑ トークンの役割を伝えるための名前(colorとon-secondary)

(当前未使用组件令牌)
主要使用System Token和Reference Token。
一个系统令牌可以有多个引用令牌。
DroidKaigi 2022のセッションで驚いたところ
https://m3.material.io/foundations/design-tokens/how-to-read-tokens

System Token 更加抽象,Reference Token 会根据深色模式等上下文而变化。

DroidKaigi 2022のセッションで驚いたところ

色调调色板由 Primary Key Color 指定的颜色生成,并从中创建 Primary Color Roles。
简而言之,Primary Key Color中指定的颜色不直接用作应用程序的颜色.

DroidKaigi 2022のセッションで驚いたところ

https://speakerdeck.com/yanzm/material3-with-jetpack-compose?slide=38

迁移传说并没有试图看起来与 M2 相同。
→ 很难使它们相同
不要自己修补颜色。失去色彩和谐

迁移方法

  • 做这一切。尽管这很困难,但不会发生导入目的地的错误。 ← 推荐用于小型应用
  • 每个屏幕。需要在app中同时实现M2 M3
  • 每个组件 M3 ← 推荐用于大型应用程序

按组件迁移时,用 M3 MaterialTheme 包裹 M2 MaterialTheme
但是,在取下 M2 时,颜色可能会略有变化。然后逐个组件地移动组件。

Material3Theme {
  Material2Theme {
     content()
  }
}

了解更多信息:https://speakerdeck.com/yanzm/material3-with-jetpack-compose?slide=84

Material3中没有了ContentAlpha,代替了alpha,直接和color一起使用。现在指定 localContentColor。
禁用?这是通过为内容指定不同的颜色来完成的。

复选框已从次要更改为主要,并且使用的颜色已更改。

Jetpack Compose 状态管理和 API 调用 - 从 React Hooks、Apollo + Jetpack Compose 学习

也从 overfetch 服务器接收到不必要的值
Underfetch 1 Hit API 多次因为无法从服务器获取信息

Apollo Client 有缓存机制,Graph 结构按原样缓存。它为您处理缓存管理。

Jetpack Compose 目前有点麻烦,但是你可以通过自己创建一个可组合函数来包装它。

从 Compose for Desktop 开始创建一个 Android 开发效率工具

有一个用于构建 adb 客户端的库,称为 Adam。

如果您放入插件,即使在 Compose 桌面中也可以看到预览。

更新您的自动化测试以匹配 Android 的现代技术选择

在测试流时,我们启动、收集然后更改值。

图片

launch(UnconfinedTestDispatcher) {
  flow.collect(...)
}
flow.emit(...)

如果你在 setMain() 中使用 UnconfinedTestDispatcher,你可以得到类似于 Main.immediate 的东西。(换句话说,基本上在setMain()中使用UnconfinedTestDispatcher似乎更好)

要测试 Compose 状态更改,请使用 Snapshot.registerGlobalWriteObserver。

当 Done -> Loading -> Done 时,在 Repository 的 Fake 实现中设置延迟,并使用 AdvanceUntilIdle,您可以在测试中检查处于 Loading 中间状态的 UiModel 等。(我想知道你是否总是在这里做延迟()之类的事情,但是当我后来问的时候,似乎你只做你需要的)

如何测试您的 Compose UI

了解有关测试中使用的语义树的更多信息。
该图很容易理解,所以请看一下幻灯片。

setContent {
  Row {
     Text("1")
     Text("2")
  }
}

语义树看起来像这样

Root
- Text = '[1]'
- Text = '[1]'

https://speakerdeck.com/stewemetal/how-to-test-your-compose-ui-droidkaigi-2022-tokyo?slide=28

setContent {
  Row(Modifier.semantics { contentDescription = "list" }) {
     Text("1")
     Text("2")
  }
}

语义树看起来像这样

Root
- ContentDescription = 'list'
  - Text = '[1]'
  - Text = '[1]'

您可以在幻灯片中看到各种图案,如上面的图案。这很有趣,比如合并。

语义允许我们向 Composable 函数的组件添加信息。
例如,如果您在不使用语义的情况下使用 Box,则 Box 的行为与不在测试中一样。
当 mergeDecentants = true 时,子节点将像 Text = '[100 ml, 2022-10]' 一样合并。
默认情况下合并按钮。
如果您在 Button 上执行 clearAndSetSemantics { text = AnnotatedString("xxxx") } 之类的操作,则将使用 xxxx 而不是子级。
您可以在测试中使用 useUnmergedTree=true 取消合并它。

2022年如何制作视频播放应用

Media3 基本上很容易从 Exo 中更换,只需更换 Exo 包即可。还提供了一个脚本。

使用服务让玩家在屏幕旋转之外保持活力。
MediaController 继承了 Player 接口,可以像在屏幕中一样处理服务中的 Player。

服务中有ExoPlayer,Activity中有PlayerView,连接MediaController。

  • 服务

    • ExoPlayer
    • 媒体会话
  • 活动

    • 指定服务类,创建SessionToken,并从中获取MediaController
      • 您可以在此 MediaController 中设置 MediaItems。使用 MediaItem 的 RequestMetadata 指定视频的 Uri。

addOnPictureInPictureModeChangedListener(pipListener)。 (我认为它是最近添加的)。

Molecule:使用 Compose 进行表示逻辑

撰写。不撰写 UI
MV 随便

你可以用分子做什么

2017 年。
RxJava。
使用 RxJava 管理状态的状态。
并且在 Kotlin Coroutines 中,Single 等被挂起取代。

2019 年使用 Kotlin Flow 的异步数据流。
RxJava → 协程
协程使 API 更简单
您不必在 onStart{} 等中使用很多 API。
对于协程,使用 transformLatest 和 300ms 延迟以避免搜索太多。风门。使用 Rx,事情会变得更复杂一些。
暂停+流很方便。
但是,操作员可能会使它变得复杂。

如果我们为 UiModel 使用 Compose 会怎样?
在 Compose 中使用 Presentation 时如何在 Compose 中合并两个流?
两者都收集AsState。

为什么是分子?
UI Compose 和表示逻辑的分离。您可以使用 JUnit 测试您的演示逻辑。

有两种类型的 RecompositionClock 可以指定。 (我不知道有什么区别,所以请帮忙)

  • 上下文时钟
    • 由于是帧单元,即使在帧中改变状态两次,UiModel等也只会改变一次
    • 测试需要更改时间
  • 立即
    • 状态更改后立即运行。
    • 无需更改测试时间

涡轮机测试

我问他对 WhileSubscribed 的看法。 (残破的英语)我正在使它更通用一点,以便它可以在服务器上使用,所以它不被支持。

连接 Android 应用内部和外部的 UI

使用 androidx.core-splashscreen 时。
通过使用setKeepVisibleCondition(),可以调整第一帧绘制时闪屏正常消失的时间。

OnBackInvokedDispatcher
Android 13 中的新 API。
应用程序捕捉回手势的 API。
捕获 = 关闭打开的抽屉等。
结论:转到 onBackPressedDispatcher。

在返回按钮的情况下,您可以用手指返回。现在我有一个三角形,我又回来了。

~ 12 到目前为止,应用程序会在返回事件发生后询问是否需要。
onBackPressed()
13~ 从现在开始,应用程序将使用下一个返回事件继续并以此结束。
OnBackInvokedDispatcher

AndroidX OnBackPressedDispatcher 未经许可使用 Android 13 API
还支持 Compose 的 BackHandler。

概括

今年又学到了很多东西。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308628989.html

相关文章:

  • 2021-07-16
  • 2022-12-23
  • 2021-06-07
  • 2021-11-28
  • 2022-02-23
  • 2021-08-26
  • 2021-09-05
猜你喜欢
  • 2021-09-10
  • 2021-07-18
  • 2022-12-23
  • 2021-12-04
  • 2021-05-06
  • 2022-12-23
  • 2021-06-16
相关资源
相似解决方案