当前位置: 首页 > news >正文

compose navigation 自定义navtype

Jetpack compose navigation with custom NavType

https://www.youtube.com/watch?v=qBxaZ071N0c&t=182s

定义两个路由

@Serializable
data object DogListRoute@Serializable
data class DogDetailRoute(val dog: Dog,val breedSize: BreedSize
)

即两个页面,一个狗列表页面,点击列表项,进入狗详情界面。

大部分情况下,我们应该是传狗的ID,然后在狗详情界面,通过查询本地数据库or API,去获取狗详情信息。

但是这里演示一个自定义的数据类型,通过navtype来传递。

可以看到 DogDetailRoute带了两个参数,一个是自定义类型Dog。另一个是枚举类型 BreedSize

@Serializable
data class Dog(val id: Int,val name: String,
)enum class BreedSize {SMALL,MEDIUM,LARGE
}

序列化需要引入

plugin
jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }implementationkotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version = "1.6.3" }

通过自定义navtype可以方便的在导航过程中,传递自定义参数

                         composable<DogListRoute> {DogListScreen(onDogClick = { dog, breedSize ->navController.navigate(DogDetailRoute(dog = dog,breedSize = breedSize))})}composable<DogDetailRoute>(typeMap = mapOf(typeOf<Dog>() to CustomNavType.DogType,typeOf<BreedSize>() to NavType.EnumType(BreedSize::class.java))) {val arguments = it.toRoute<DogDetailRoute>()DogDetailScreen(dog = arguments.dog,breedSize = arguments.breedSize)}
navController.navigate 直接放入带自定义参数的 route,在接收端,通过 toRoute直接获取组装后的带自定义参数的route,但是前提条件是,需要注册号typeMap

 typeMap = mapOf(
                                typeOf<Dog>() to CustomNavType.DogType,
                                typeOf<BreedSize>() to NavType.EnumType(BreedSize::class.java)

通过CustomNavType.DogType告诉navigator怎么对dog进行转换

object CustomNavType {val DogType = object : NavType<Dog>(isNullableAllowed = false) {override fun get(bundle: Bundle, key: String): Dog? {return Json.decodeFromString(bundle.getString(key) ?: return null)}override fun parseValue(value: String): Dog {return Json.decodeFromString(Uri.decode(value))}override fun serializeAsValue(value: Dog): String {return Uri.encode(Json.encodeToString(value))}override fun put(bundle: Bundle, key: String, value: Dog) {bundle.putString(key, Json.encodeToString(value))}}
}

其中 使用URI编码主要用于将URI中的特殊字符转化为一种通用的格式

相关文章:

compose navigation 自定义navtype

Jetpack compose navigation with custom NavType https://www.youtube.com/watch?vqBxaZ071N0c&t182s 定义两个路由 Serializable data object DogListRouteSerializable data class DogDetailRoute(val dog: Dog,val breedSize: BreedSize ) 即两个页面&#xff0c;…...

实现对redis过期键监听案例

开发背景 为了实现当经纪人A提交分佣后如果三天后其他经纪人没有确认分佣就自动确认分佣&#xff0c;如果经纪人A修改分佣后再次提交分佣&#xff0c;时间重置为三天 实现方式 第一步&#xff1a;引入依赖 <dependency> <groupId>redis.clients</groupId> …...

yocto基础 -- bb 文件字段解析

Yocto .bb 文件字段解析 本文详细讲解了 Yocto .bb 文件中各字段的作用和用法&#xff0c;包括 SECTION、SRC_URI、SUMMARY 等&#xff0c;旨在帮助开发者更好地理解和使用 Yocto 构建系统。 目录 1. SECTION 字段 1.1 SECTION 的作用1.2 SECTION 的用法1.3 如何使用 SECTIO…...

Android开发相关的重要网站

本文整理Android相关的重要网站&#xff0c;欢迎大家分享别的网站。 AOSP 官网谷歌官方Android源码搜索Android Issue Tracker 如果在开发过程中遇到与 Android 相关的问题或发现了系统的 bug&#xff0c;可以在这个网站上提交反馈&#xff0c;也可以查询是否存在类似的问题。…...

MySQL 中utfmb3和utfmb4字符集区别

目录 一&#xff1a;utf-8二&#xff1a;utf8mb3三&#xff1a;uft8mb4 一&#xff1a;utf-8 unicode 定义了一套规范来存储各种字符&#xff0c;但是它没有定义这些字符在计算机中应该如何存储。所以基于这种原因&#xff0c;后续基于 Unicode 字符集发展出了多种字符的存储规…...

【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)

文章目录 一、什么是文件1.程序文件2.数据文件 二、数据文件1.文件名2.数据文件的分类文本文件二进制文件 三、文件的打开和关闭1.流和标准流流标准流 2.文件指针3.文件的打开和关闭文件的打开文件的关闭 四、文件的顺序读写1.fgetc函数2.fputc函数3.fgets函数4.fputs函数5.fsc…...

今日总结10.18

Exception 和Error 有什么区别 Exception和Error都是Java等编程语言中异常处理机制的重要组成部分&#xff0c;它们都继承自Throwable类。以下是两者的主要区别&#xff1a; 定义与性质 Error&#xff1a; 1.表示严重的系统级错误&#xff0c;如内存溢出&#xff08;OutOfM…...

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写&#xff0c;挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…...

RabbitMQ 入门(六)SpringAMQP五种消息类型(Direct Exchange)

一、发布订阅-DirectExchange&#xff08;路由模式&#xff09; 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 Direct Exchan…...

2062:【例1.3】电影票

【题目描述】 已知一位小朋友的电影票价是10元&#xff0c;计算x位小朋友的总票价是多少&#xff1f; 【输入】 输入x。 【输出】 人数和电影票总价&#xff0c;中间用一个空格隔开。 【输入样例】 2 【输出样例】 2 20 Code #include<iostream> using namespace st…...

Python | Leetcode Python题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; class Solution:def totalHammingDistance(self, nums: List[int]) -> int:n len(nums)ans 0for i in range(30):c sum(((val >> i) & 1) for val in nums)ans c * (n - c)return ans...

Leecode刷题之路第25天之K个一组翻转链表

题目出处 25-K个一组翻转链表-题目出处 题目描述 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保…...

nuxtjs3 使用tailwindcss做自适应

步骤 1: 安装 Tailwind CSS npm install tailwindcss postcss autoprefixer nuxtjs/tailwindcss步骤 2: 配置 Tailwind CSS 这将生成一个 tailwind.config.js 文件。 npx tailwindcss init步骤 3: 配置 nuxt.config.ts // https://nuxt.com/docs/api/configuration/nuxt-con…...

数据资产目录构建方法与应用

一、引言随着大数据、云计算、人工智能等技术的飞速发展&#xff0c;数据驱动已经成为企业发展的新引擎。数据资产目录作为数据管理的核心工具&#xff0c;不仅能够帮助企业更好地掌握自身数据资源的状况&#xff0c;还能为数据资产的全生命周期管理提供有力支撑。因此&#xf…...

【Python爬虫实战】从文件到数据库:全面掌握Python爬虫数据存储技巧

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、文本文件数据存储的基础 二、如何将爬取的数据存储为.txt文件 三、如何…...

断其一指,无惧!ProFusion3D: 相机或者激光失效仍高效的多传感器融合3D目标检测算法

Abstract 多传感器融合在自动驾驶中的3D目标检测中至关重要&#xff0c;摄像头和激光雷达是最常用的传感器。然而&#xff0c;现有方法通常通过将两种模态的特征投影到鸟瞰视角&#xff08;BEV&#xff09;或透视视角&#xff08;PV&#xff09;来进行单视角的传感器融合&…...

CCS字体、字号更改+CCS下载官方链接

Step1、 按照图示箭头操作 step2 Step3 点击确定&#xff0c;点击Apply(应用)&#xff0c;点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载&#xff1a;官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…...

YOLO11改进|注意力机制篇|引入SEAM注意力机制

目录 一、【SEAM】注意力机制1.1【SEAM】注意力介绍1.2【SEAM】核心代码二、添加【SEAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【SEAM】注意力机制 1.1【SEAM】注意力介绍 下图是【SEAM】的结构图,让我们简单分析一下…...

简历修订与求职经历 - Chap04

节后第一周有点山中无甲子的状况。Oct08&#xff0c;节后第一天几乎全天处于心流状态。上午下午很快时间就结束了。 周五&#xff0c;按照既有的面试频次&#xff0c;感觉可以做点别的。然后就联系了附近的驾校&#xff0c;打算把摩托车驾驶证拿了。然后几乎到了驾校&#xff…...

鸿蒙开发案例:推箱子

推箱子游戏&#xff08;Sokoban&#xff09;的实现。游戏由多个单元格组成&#xff0c;每个单元格可以是透明的、墙或可移动的区域。游戏使用Cell类定义单元格的状态&#xff0c;如类型&#xff08;透明、墙、可移动区域&#xff09;、圆角大小及坐标偏移。而MyPosition类则用于…...

OpenClaw 本地 AI 智能体 Windows 11 部署指南 | 全流程无代码 无需输命令

项目介绍 OpenClaw 是 GitHub 星标 28W 的开源本地 AI 智能体&#xff0c;支持电脑自动操控、文件整理、浏览器自动化、办公自动化等功能&#xff0c;被国内用户称作小龙虾&#xff0c;部署操作也被形象称为养虾。该工具支持本地运行&#xff0c;数据全程保存在本地电脑&…...

UE4 UI设计:Size Box的5个实用技巧与常见坑点解析

UE4 UI设计&#xff1a;Size Box的5个实用技巧与常见坑点解析 在虚幻引擎4&#xff08;UE4&#xff09;的UI开发中&#xff0c;精确控制元素尺寸是构建响应式界面的关键。Size Box作为基础布局控件之一&#xff0c;看似简单却隐藏着许多实用技巧和潜在陷阱。本文将深入剖析Size…...

如何深度调试AMD Ryzen系统:SMUDebugTool完整指南与故障排除

如何深度调试AMD Ryzen系统&#xff1a;SMUDebugTool完整指南与故障排除 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

OpenGL插值曲线实战:从二次到四次的参数化绘制与矩阵求解

1. 为什么我们需要插值曲线&#xff1f; 在图形学和动画制作中&#xff0c;我们经常需要创建平滑的过渡效果。想象一下你在设计一个游戏角色移动的轨迹&#xff0c;或者制作一个UI元素的动画效果&#xff0c;直接使用折线会显得非常生硬。这时候插值曲线就派上用场了。 插值曲线…...

YOLO26改进 - 注意力机制 | Polarized Self-Attention 极化自注意力:高分辨率保持机制优化细节表征,助力小目标检测

前言 本文介绍了极化自注意力(PSA)模块及其在YOLO26中的结合应用。PSA模块旨在解决细粒度计算机视觉任务中的像素级回归问题,其融合了极化过滤和增强两个关键设计。极化过滤在通道和空间维度保持高分辨率,减少信息损失;增强采用细粒度回归输出分布的非线性函数。我们将Po…...

手把手教你准备Kubernetes 1.29.4离线安装包:从containerd到etcd的完整下载清单

Kubernetes 1.29.4离线部署全攻略&#xff1a;构建企业级私有化容器平台的必备清单 在金融、军工、能源等对网络隔离要求严格的行业&#xff0c;或是边缘计算、生产车间等网络条件受限的场景中&#xff0c;离线部署Kubernetes集群成为刚需。但面对containerd、CNI插件、etcd等…...

若依框架单体应用版:从建表到增删改查,代码生成器实战指南

1. 若依框架单体应用版快速上手 第一次接触若依框架时&#xff0c;我被它的代码生成器功能惊艳到了。作为一个长期奋战在业务开发一线的程序员&#xff0c;最头疼的就是重复编写那些千篇一律的增删改查代码。若依的单体应用版&#xff08;前后端不分离&#xff09;特别适合中小…...

SEO优化工作总结对网站的品牌推广有何影响_SEO优化工作总结如何推动网站排名的提升

SEO优化工作总结对网站的品牌推广有何影响 在当前的数字化时代&#xff0c;网站的SEO优化工作不仅仅是为了提升网站在搜索引擎中的排名&#xff0c;更是对整个品牌推广的重要支撑。SEO优化工作总结能够帮助企业深刻理解自己的优势和不足&#xff0c;从而制定更有效的品牌推广策…...

balance_callbacks及cpu offline的相关细节

一、背景 之前的博客 cpu的possible present online active的mask细节 和 cpu hotplug的调用链整理 里,我们讲述了cpu online的状态及相关细节,cpu online和offline的状态,其实就是镜像地的逻辑,这篇博客里我们讲述__schedule函数,如下图里的__balance_callbacks的相关细…...

ESP32+PHP+MySQL:构建云端物联网数据可视化看板

1. 从零搭建ESP32物联网数据采集系统 第一次接触ESP32时&#xff0c;我被它强大的WiFi和蓝牙功能惊艳到了。这块售价仅几十元的小开发板&#xff0c;居然能轻松实现传感器数据采集和无线传输。今天我要分享的&#xff0c;就是如何用ESP32构建一个完整的物联网数据可视化系统。 …...