自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

源码推送到Github,走完 CI/CD,新版本上线了。但是需要在群里通知更新,这样很不优雅也很不高级,本文将使用 Nginx 静态 JSON 方案,从零搭建一套轻量、可控的功能。

2026-04-05 16:05:15 539

原创 【无标题】

本文介绍了Flutter状态管理库Riverpod的核心特性及其在MVI架构中的应用。Riverpod作为Provider的重写版本,具有编译时安全、无需BuildContext、支持多类型Provider等优势。文章详细对比了Riverpod与Provider、Bloc的区别,并阐述了Riverpod如何完美契合MVI架构的单向数据流模式。通过具体代码示例展示了Model层的不可变状态定义和Intent层的Notifier实现,体现了Riverpod在开发效率、错误减少和测试覆盖方面的显著优势。最后提供了

2026-03-03 13:58:48 635

原创 Flutter URL Scheme 跨平台跳转

提示词优化器V2.1.1版本新增AI应用一键跳转功能,通过URL Scheme跨平台跳转和剪贴板联动技术,将传统的三步操作(复制-切换-粘贴)简化为单次点击。该功能支持Android、iOS和Web/Desktop平台,采用分层降级策略优先使用Scheme跳转,失败后自动降级为包名或应用商店引导。系统采用Clean Architecture分层设计,核心组件包括状态管理、领域服务和数据持久化层,通过剪贴板优先策略确保跨应用数据传递的可靠性,并内置统一数据模型支持自定义应用配置。

2026-02-28 17:04:27 1187

原创 Flutter Riverpod + MVI 状态管理实现的提示词优化器

本文介绍了使用Riverpod和MVI架构开发AI提示词优化器的实现方案。MVI架构通过将状态(Model)、视图(View)和用户操作(Intent)分离,使代码更加清晰和可维护。核心思路是将所有状态集中在一个不可变的OptimizationState类中,通过Notifier处理用户操作并更新状态。这种方法相比传统状态管理减少了状态变量数量,提高了类型安全性,并支持流式响应处理。文章展示了关键代码实现,包括状态定义、用户操作处理以及流式数据累积等核心功能。

2026-02-22 19:29:45 917

原创 Flutter SSE 流式响应用 Dio 实现 OpenAI 兼容接口的逐 Token 输出

在做 AI 提示词优化器时,等 10 秒一次性返回大段文本”的体验通常很差。更好的体验是:模型一边生成,你的 UI 一边展示(像打字机逐字出现)

2026-02-20 10:35:57 1224

原创 基于Flutter+Riverpod+MVI 实现的跨平台「AI 提示词优化工具」

🤔同样的需求,不同的表述方式,AI 的回答质量差异巨大。所以我写了一个AI提示词优化器:基于 Flutter + MVI 架构优雅地实现提示词优化的开源项目

2026-02-18 18:31:51 1410

原创 100行 python实现Android与windows局域网文件夹同步

最近在使用Obsidian搭建个人云笔记 尽管我使用腾讯云COS图床+gitee实现了云备份,但是在Android上使的Obsidian备份有点麻烦。所以,我写一个局域网文件夹同步工具,来解决这个问题

2023-09-24 21:19:31 814

原创 java解压tar.gz文件

java解压tar.gz文件

2023-09-13 12:11:09 724

原创 Jetpack Compose 自定义 好看的TabRow Indicator

Jetpack Compose提供了强大的 Material Design组件,但是默认的TabRow样式可能无法满足所有场景,所以我们有时需要自定义 TabRow 的样式

2023-09-01 22:03:40 1970

原创 Jetpack Compose实现 验证码输入框

Jetpack Compose 作为 Android 的新一代 UI 开发框架,提供了非常强大的工具来构建用户界面。今天,我们就利用 Compose 来实现一个炫酷的验证码输入框

2023-06-28 15:05:59 735

原创 Jetpack Compose实现的一个优雅的 Toast 组件——简单易用~

优雅-简洁-动画 才是我的风格 使用Compose组件来实现一个 优雅-简洁-动画 的 Toast

2023-06-25 15:31:51 2367

原创 如何使用Python生成跑马灯视频

在这篇博客中,我们学习了如何使用Python语言生成一个简单的跑马灯视频。我们使用了OpenCV和Pillow两个库来实现这个功能。

2023-06-10 14:01:59 710 1

原创 Jetpack Compose 实现了一个丝滑流畅的页面展开和关闭的效果动画

Jetpack Compose 将动画实现的门槛降低了,不过Compose目前还不支持共享元素过渡。)的动画效果的实现。

2023-05-24 11:06:20 1246

原创 我用Jetpack Compose +Room开发的本地笔记本,代码开源

项目中完全kotlin编写,采用学习的协程和MVI架构;随意切换主题颜色,适配深色模式等。

2023-05-23 22:46:35 550

原创 java获取随机时间戳

【代码】java获取随机时间戳。

2023-05-06 09:47:01 536

原创 docker-compose安装nginx配置hppts 报错

docker-compose安装nginx配置hppts 报错

2023-01-17 13:34:42 1304

原创 Jetpack Compose 重写TopAppBar 实现标题多行折叠

想用compose实现类似掘金的文章详细页面的标题栏 便使用了MediumTopAppBar一开始用着没什么问题,但是标题字数多了,MediumTopAppBar就不支持了

2022-11-16 14:46:44 1344

原创 MotionLayout自定义一个开关按钮

是一个非常新的类,它来自库中,主要目的是为了帮助Android开发人员在应用中降低使用手势和组件动画的难度。

2022-11-06 18:32:49 753

原创 【安卓笔记】view触摸缩放

view触摸缩小,抬起恢复。

2022-08-24 13:33:16 1049

原创 ViewDataBinding找不到自定义view的类

ViewDataBinding找不到自定义view的类。原因是main文件夹下的java文本我改成了kotlin。文件名kotlin改回java。

2022-07-24 17:40:36 999

原创 Jetpack Compose DropdownMenu跟随手指点击位置显示

DropdownMenu显示时默认会避开点击的view通常默认显示在左下方本篇文章教你实现跟随手指按下位置显示

2022-06-21 15:35:57 1434 1

原创 compose设置状态栏字体颜色

boolean :true 白色字体boolean :flase 黑色字体ViewCompat.getWindowInsetsController(LocalView.current)?.isAppearanceLightStatusBars = boolean

2022-01-21 15:51:07 1796

原创 Jetpack Compose 实现渐显爱心

首先实现红色爱心图标Box() { Icon( Icons.Filled.Favorite, contentDescription = null, modifier = Modifier .align(Alignment.Center) .graphicsLayer( scaleX = 3.0f, scaleY = 3.0f,

2022-01-20 14:40:47 794

原创 Jetpack Compose 教你打造一个会动的按钮

先讲知识点ColumnScope:官方解释根据元素相对于列中其他加权同级元素的权重,调整元素高度的大小。父元素将在测量未加权的子元素后分割剩余的垂直空间,并根据该权重进行分配。当fill为true时,元素将被强制占据分配给它的整个高度。否则,允许元素更小-这将导致列更小,因为未使用的分配高度不会重新分配给其他同级。意思就是 它包含一个可组合控件,会自动调整元素高度的大小。能够对齐文本。FloatingActionButton( onClick = { expanded = !expand

2022-01-19 17:10:47 962

原创 Jetpack Compose自定义绘测 画太阳

要调用Canvas()的绘测方法`drawCircle方法:绘制圆形fun drawCircle( color: Color, radius: Float 圆的半径, center: Offset = 要绘制圆的中心坐标, /*@FloatRange(from = 0.0, to = 1.0)*/ alpha: Float = 1.0f, style: DrawStyle = Fill, colorFilter: ColorFilter? = 当

2022-01-18 15:44:00 517

原创 Jetpack Compose自定义view 画月亮

首先利用drawArc函数画扇形月亮由有个圆个一个小圆组成设置大圆心角为120°360-120 = 240 startAngle = 40F, sweepAngle = 240f,偏移40°增强画面感sweepAngle = 240f,获取画布宽高 val canvasWidth = size.width // 画布的宽 val canvasHeight = size.height // 画布的高这样画布的宽除2就是大圆的半径了接着求出小圆的直径,通过直径

2022-01-17 17:06:05 861

原创 利用DataBinding优雅的实现,文本选中切换字体背景的颜色效果

在build.gradle里面开启dataBinding buildFeatures { dataBinding true }定义颜色值colors.xml文件里面 <!-- 文本主色调 --> <color name="app_textTheme">@color/white</color> <!-- 文本选中颜色 --> <color name="app_textNormal"&g

2022-01-04 22:10:37 2995 2

原创 Android自动设置状态栏字体颜色

Android6.0以上系统可以把状态栏文字和图标换成深色,但是MIUI、Flyme例外所以我们封装一个根据状态栏颜色来自动设置状态栏字体颜色

2021-12-29 16:57:58 3622

原创 Caused by: kotlinx.serialization.SerializationException: Serializer for class ‘PostType‘ is not foun

log java.lang.IllegalArgumentException: Unable to create converter for com.jiulang.wordsfairy.net.NetResult<java.util.ArrayList<com.jiulang.wordsfairy.entity.PostType>> for method PostService.getHomepageClassifyList at retrofit

2021-12-27 02:04:50 2955

原创 koin 运行报错

No virtual method elapsedNow-UwyO8pc()D in class Lkotlin/time/TimeMark; or its super classes (declaration of ‘kotlin.time.TimeMark’ appears in /data/app/~~8ToQ39W1Gmvz79om2S69_Q==/xxx.xx.xx-dvGHvg3f2zzmurhXBKmXeA==/base.apk!classes22.dex)解决方法把 androidLo

2021-12-26 17:03:35 2400 1

原创 ActivityResultContracts优雅封装,打开文件管理器

XResultLauncheropen class XResultLauncher<I, O>(caller: ActivityResultCaller, contract: ActivityResultContract<I, O>) { private var launcher: ActivityResultLauncher<I>? = null private var callback: ActivityResultCallback<O&gt

2021-10-06 13:36:35 1064

原创 AppBarLayout自定义阴影

setTargetElevation()方法已经弃用,推荐使用StateListAnimator,不过要注意Api>=21才能使用res文件夹下新建一个animator资源文件夹,然后在这里用xml文件定义我们需要的StateListAnimator,在里面创建一个appbar_elevation.xml文件appbar_elevation.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:android=".

2021-10-02 22:23:00 461

原创 解决折叠状态栏+viewPager2嵌套带有下拉刷新的RecyclerView滑动冲突

CoordinatorLayout+AppBarLayout+viewPager2+fragment+下拉刷新的RecyclerView下滑上滑当手指下滑的时候,因为AppBarLayout还没有折叠,滑动事件会被PtrFrameLayout消费,但上滑是如果AppBarLayout还没有折叠,滑动事件也会被PtrFrameLayout消费但和AppBarLayout.Behavior的滑动产生冲突,会发生滑动抖动,网上说重写AppBarLayout.Behavior可以解决,或者重写PtrFra

2021-09-26 20:26:30 1657

原创 【安卓笔记】解决ViewPager2嵌套RecyclerView,上下滑动冲突

当ViewPager2嵌套RecyclerView上下滑动的事件会被RecyclerView分发下去到ViewPager2,所以会造成卡顿。所以重写RecyclerView的dispatchTouchEvent函数,拦截上下滑动事件就可以了Java代码 // 用于标记滑动的坐标 private int downX= 0; private int downY= 0; @Override public boolean dispatchTouchEvent(MotionEve

2021-09-14 11:27:34 4208 3

原创 微信小程序利用Bmob后端云实现:上拉刷新、下拉加载数据

微信小程序下拉加载实现在微信小程序下拉加载的基础上配合Bmob后端云注释在代码里面wxml <scroll-view scroll-y refresher-enabled refresher-triggered="{{isTriggered}}" bindrefresherrefresh = "handleRefresher" bindscrolltolower="handleToLower" style="height: {{windowHeight}

2021-08-30 14:16:46 626

原创 微信小程序下拉加载实现

Tip:一定要给scroll-view设置一个固定高度,不然scroll-view滑动的时候会不停的调用bindscrolltolower函数。wxml <scroll-view scroll-y bindscrolltolower="handleToLower" style="height: {{windowHeight}}px;"> <block wx:for="{{99}}" wx:key="index"> <view cl

2021-08-30 13:29:57 501

原创 【安卓笔记】android申请储存权限,读写文件

首先在AndroidManifest.xml中注册读取USB存储设备中的内容 <!-- 读取您的USB存储设备中的内容 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <!-- 修改或删除您的USB存储设备中的内容 --> <uses-permission android:name="android.permission.W

2021-08-28 15:18:34 4751

原创 【安卓笔记】打开系统文件管理器,选择文件

java打开系统文件过管理器class ResultContract extends ActivityResultContract<Boolean, Intent> { @NonNull @Override public Intent createIntent(@NonNull Context context, Boolean input) { Intent intent = new Intent();

2021-08-04 11:57:27 817

原创 【安卓笔记】上传文件到服务器

java private String uploadFile(String uploadUrl, String filename) { String end = "\r\n"; String twoHyphens = "--"; String boundary = "******"; try { URL url = new URL(uploadUrl); HttpURLConnection

2021-08-04 11:40:01 188

原创 android adb 远程调试

打开wifi详细查看ip地址ip:192.168.0.102打开USB调试模式接着在android studio的Terminal里输入:adb connect ipadb connect 192.168.0.102如果出现:由于目标计算机积极拒绝,无法连接。 (10061)打开开发者选项进入无限调试不用5555端口了直接adb connect 192.168.0.102:38405连接成功~...

2021-07-24 14:12:54 863 3

空空如也

空空如也

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

TA关注的人

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