Skip to content

Instantly share code, notes, and snippets.

View belinwu's full-sized avatar

吴上阿吉 belinwu

View GitHub Profile
@belinwu
belinwu / 3dSphereProjectionAnimation.kt
Created December 6, 2025 00:01 — forked from Rohit-554/3dSphereProjectionAnimation.kt
An interactive 3D rotating sphere where labels and colorful dots are positioned on the sphere's surface, drag and see the Jadu :)
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
@belinwu
belinwu / DateCarousel.kt
Created December 6, 2025 00:01 — forked from Rohit-554/DateCarousel.kt
This composable displays a horizontally scrollable week-style date selector with a 3D rotating dial effect. As the user scrolls, each date card scales, rotates, and fades based on its distance from the center, making the middle item appear highlighted. Tapping a date selects it and automatically scrolls The UI uses simple Material text styles, s…
// add this to your commonMain.dependencies
// implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1")
@OptIn(ExperimentalTime::class)
@Composable
fun CarouselCalendar() {
//// Clock.System.now() -> Output: 2025-11-15T14:30:45.123456789Z
//// (Year-Month-Day T Hour:Minute:Second.Nanoseconds Z for UTC)
sealed interface UserProfileEvent {
data object DeleteAccount : UserProfileEvent
data object ConsumeEffect : UserProfileEvent
}
sealed interface UserProfileEffect {
data class ShowError(val message: String) : UserProfileEffect
data object NavigateToLogin : UserProfileEffect
}
@belinwu
belinwu / JsonRpc.kt
Created April 16, 2025 08:07 — forked from ntoskrnl/JsonRpc.kt
Retrofit-style JSON-RPC client in Kotlin (with gson serialization/deserialization)
fun <T, B> createJsonRpcService(service: Class<T>,
client: JsonRpcClient<B>,
resultDeserializer: Deserializer<B>,
logger: (String) -> Unit = {}): T {
val classLoader = service.classLoader
val interfaces = arrayOf<Class<*>>(service)
val invocationHandler = createInvocationHandler(service, client, resultDeserializer, logger)
@Suppress("UNCHECKED_CAST")
@belinwu
belinwu / README.md
Created December 31, 2024 04:32 — forked from DewaldDeJager/README.md
Easy GitHub workflow for keeping a fork in sync with upstream

Sync Fork

This workflow uses the GitHub CLI to keep a forked repo in sync with the upstream repo. Add it to your repo as .github/workflows/sync-fork.yaml.

It runs daily to sync the default branch and can be triggered manually for any branch.

@belinwu
belinwu / KeyframesWithSpline.kt
Created December 18, 2024 04:27 — forked from riggaroo/KeyframesWithSpline.kt
KeyframesWithSpline Example
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.VectorConverter
import androidx.compose.animation.core.animateValue
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.keyframesWithSpline
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
@belinwu
belinwu / App.kt
Last active October 11, 2024 04:39 — forked from sergejsha/App.kt
Pure-Compose ViewModel (like Molecule, but without Molecule)
package de.halfbit.seventysix
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@belinwu
belinwu / RememberViewModelStoreOwner.kt
Created September 27, 2024 08:07 — forked from joost-klitsie/RememberViewModelStoreOwner.kt
rememberViewModelStoreOwner example implementation
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.*
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
@Composable
fun rememberViewModelStoreOwner(
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.RememberObserver
import androidx.compose.runtime.remember
import androidx.lifecycle.*
import androidx.lifecycle.viewmodel.CreationExtras
import androidx.lifecycle.viewmodel.MutableCreationExtras
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.viewModel
@belinwu
belinwu / LazyListAnimation.kt
Created August 15, 2024 04:31 — forked from darvld/LazyListAnimation.kt
This gist contains a simple implementation of animated item transitions for use with `LazyListScope` (`LazyColumn`/`LazyRow`).
package io.github.darvld.utils
import androidx.compose.animation.*
import androidx.compose.animation.core.ExperimentalTransitionApi
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.*
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.DiffUtil