https://kotlinlang.org logo
#compose
Title
# compose
s

Se7eN

11/10/2020, 3:19 PM
Is there something like weight sum for Row or Column?
g

Grigorii Yurkov

11/10/2020, 3:28 PM
Out of curiosity, why do you need it?
s

Se7eN

11/10/2020, 3:29 PM
For grids where the items in each row can vary.
Something like this:
Copy code
Column {
    rows.forEach { rowItems ->
        Row {
            rowItems.forEach {
               item(Modifier.weight(1f))
            }
         }
    }
}
g

Grigorii Yurkov

11/10/2020, 3:36 PM
And
rowItems
in each row has different size?
s

Se7eN

11/10/2020, 3:36 PM
Yep
a

Adam Powell

11/10/2020, 3:40 PM
You can approximate it by optionally including a Box with a weight of
targetWeight - rowItems.size
if the value of that expression is > 0
g

Grigorii Yurkov

11/10/2020, 3:42 PM
I think
Spacer
is better if I get you correctly
s

Se7eN

11/10/2020, 3:43 PM
Yeah I'm drawing boxes right now. Just wanted to know if there was weight sum. Thanks
Spacer could be better but it doesn't really matter since it's not a significant difference
g

Grigorii Yurkov

11/10/2020, 3:52 PM
Yeah, and you can also hammer in nails with a microscope 🙂
s

Se7eN

11/10/2020, 3:53 PM
We can hammer in nails with glasses on/off 😄
I had nulls in the list before to indicate empty positions but I trying Adam's approach and getting this weird error:
Copy code
java.lang.IllegalStateException: Attempted to realize group twice
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$BlockScope$markCoalescableGroup$1$1.invoke(ComposableFunctionBodyTransformer.kt:3457)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$BlockScope$markCoalescableGroup$1$1.invoke(ComposableFunctionBodyTransformer.kt:3409)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$BlockScope.realizeCoalescableGroup(ComposableFunctionBodyTransformer.kt:3503)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$BlockScope.realizeCoalescableGroup(ComposableFunctionBodyTransformer.kt:3505)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$BlockScope.realizeGroup(ComposableFunctionBodyTransformer.kt:3416)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.visitRestartableComposableFunction(ComposableFunctionBodyTransformer.kt:1090)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.visitFunctionInScope(ComposableFunctionBodyTransformer.kt:642)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.visitFunction(ComposableFunctionBodyTransformer.kt:610)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitSimpleFunction(IrElementTransformerVoid.kt:58)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitSimpleFunction(IrElementTransformerVoid.kt:59)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitSimpleFunction(IrElementTransformerVoid.kt:24)
	at org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl.accept(IrFunctionImpl.kt:137)
	at org.jetbrains.kotlin.ir.declarations.IrDeclaration$DefaultImpls.transform(IrDeclaration.kt:45)
	at org.jetbrains.kotlin.ir.declarations.impl.IrDeclarationBase.transform(IrDeclarationBase.kt:27)
	at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.transformChildren(IrFileImpl.kt:64)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoidKt.transformChildrenVoid(IrElementTransformerVoid.kt:292)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.transformChildrenVoid(IrElementTransformerVoid.kt:287)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.transformChildren(IrElementTransformerVoid.kt:25)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitPackageFragment(IrElementTransformerVoid.kt:34)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:37)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.visitFile(ComposableFunctionBodyTransformer.kt:1754)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:38)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid.visitFile(IrElementTransformerVoid.kt:24)
	at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.accept(IrFileImpl.kt:56)
	at org.jetbrains.kotlin.ir.declarations.IrFile$DefaultImpls.transform(IrFile.kt:49)
	at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.transform(IrFileImpl.kt:30)
	at org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl.transformChildren(IrModuleFragmentImpl.kt:49)
	at org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoidKt.transformChildrenVoid(IrElementTransformerVoid.kt:292)
	at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.lower(ComposableFunctionBodyTransformer.kt:446)
	at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:100)
	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade$doGenerateFiles$1.invoke(JvmBackendFacade.kt:72)
	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade$doGenerateFiles$1.invoke(JvmBackendFacade.kt:34)
	at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:98)
	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFiles(JvmBackendFacade.kt:87)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:40)
	at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:616)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:203)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:164)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:51)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:86)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:346)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:102)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:240)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:39)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:81)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:93)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:601)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:93)
	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1633)
	at jdk.internal.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at java.base/java.lang.Thread.run(Thread.java:832)
The code is:
Copy code
val rows = items.chunked(numColumns)
Column(modifier) {
    rows.forEach { items ->
        Row(horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterHorizontally)) {
            items.forEach {
                itemContent(Modifier.weight(1f))
            }

            val weight = numColumns - items.size
            if(weight > 0) {
                Spacer(Modifier.weight(weight.toFloat()))
            }
        }
    }
}
Looks like a compiler problem?
4 Views