Skip to content

Instantly share code, notes, and snippets.

View bmc08gt's full-sized avatar

Brandon McAnsh bmc08gt

View GitHub Profile
@bmc08gt
bmc08gt / 00_ComposeViewController.kt
Last active March 29, 2024 20:15
Compose UI component in SwiftUI that respects intrinsic sizing
private fun measuredViewController(
onMeasured: (Double, Double) -> Unit,
content: @Composable () -> Unit,
): UIViewController = ComposeUIViewController {
Box(
modifier = Modifier.onGloballyPositioned {
onMeasured(it.size.width.toDouble(), it.size.height.toDouble())
},
) {
content()
@bmc08gt
bmc08gt / gist:ff600c505c4a41ce3a66ac513909c003
Created March 8, 2024 23:58
Xcode Crash Pod dependent on a KMM XCFramework
0x112535f04 <+0>: stp x28, x27, [sp, #-0x20]!
0x112535f08 <+4>: stp x29, x30, [sp, #0x10]
0x112535f0c <+8>: add x29, sp, #0x10
0x112535f10 <+12>: sub sp, sp, #0x5f0
0x112535f14 <+16>: mov x8, #0x0
0x112535f18 <+20>: str x8, [sp, #0x5e0]
0x112535f1c <+24>: movi.16b v0, #0x0
0x112535f20 <+28>: str q0, [sp, #0x410]
0x112535f24 <+32>: str q0, [sp, #0x5d0]
0x112535f28 <+36>: str q0, [sp, #0x5c0]
@bmc08gt
bmc08gt / Kotlin+Gif.kt
Created February 22, 2024 04:49
SwiftyGif Kotlin Style
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import platform.CoreFoundation.CFDataRef
import platform.CoreGraphics.CGImageRef
import platform.Foundation.CFBridgingRelease
import platform.Foundation.CFBridgingRetain
import platform.Foundation.NSData
import platform.Foundation.NSDictionary
@bmc08gt
bmc08gt / SettingsSection.kt
Created December 14, 2023 17:29
SettingsSectionScope
interface SettingsSectionScope {
fun item(
icon: ImageVector? = null,
title: String,
subtitle: String? = null,
endSlot: @Composable () -> Unit = { },
onClick: (() -> Unit)? = null,
)
@Composable
@bmc08gt
bmc08gt / 1_Screen.kt
Last active December 6, 2023 17:45
FKScaffold with accessory view triggers
FKScaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
FKLargeTopAppBar(title = name)
},
) { padding, triggerAccessoryView ->
ItemForm(
modifier = Modifier.padding(top = padding.calculateTopPadding()),
state = state,
dispatch = viewModel::dispatchEvent
@bmc08gt
bmc08gt / IntSize.kt
Created December 5, 2023 15:31
M.measured {}
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.IntSize
fun IntSize.toDp(density: Density): DpSize = with(density) { DpSize(width = width.toDp(), height = height.toDp()) }
@bmc08gt
bmc08gt / 1_parent.kt
Last active December 4, 2023 14:22
Parent shared component with own VM
@Composable
fun ActionMenuContentDecorator(
modifier: Modifier = Modifier,
viewModel: ActionMenuViewModel = hiltViewModel(),
content: @Composable () -> Unit, // A
// content: @Composable (PaddingValues) -> Unit, // B
) {
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
// some parent container type (Scaffold, ModalBottomSheetLayout, etc.)
@bmc08gt
bmc08gt / SegmentedControl.android.kt
Last active March 18, 2024 09:27
Compose Multiplatform Segmented Control
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme
@bmc08gt
bmc08gt / GoogleMap.issue.kt
Last active November 20, 2023 09:25
Compose Map Markers Not Clearing Fix
@Composable
actual fun MapView(
modifier: Modifier,
contentPadding: PaddingValues,
userLocation: LatLong?,
resultLocations: List<Stay.Minimal>,
useTotalPrice: Boolean,
onMarkerSelectionChange: (String?) -> Unit,
onMapMoved: () -> Unit,
) {
@bmc08gt
bmc08gt / Currency.kt
Last active November 2, 2023 18:14
All Global currencies in a nice easy use to enum
@Suppress("EnumEntryName")
@Serializable
enum class Currency(
val code: String,
val symbol: String,
) {
Australian_dollar("AUD", "$"),
Brazilian_real("BRL", "R$"),
Bulgarian_lev("BGN", "лв."),
Canadian_dollar("CAD", "$"),