Skip to content
This repository was archived by the owner on Dec 27, 2024. It is now read-only.
This repository was archived by the owner on Dec 27, 2024. It is now read-only.

MotionLayout is crashing  #526

Open
Open
@robertlevonyan

Description

@robertlevonyan

The motion layout is crashing with this error.

java.lang.IllegalArgumentException: Failed requirement.
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:177)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38)
        at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201)
        at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:662)
        at androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default(Owner.kt:182)
        at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:846)
        at android.view.View.draw(View.java:22648)
        at android.view.View.updateDisplayListIfDirty(View.java:21520)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21476)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21476)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21476)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
        at android.view.View.updateDisplayListIfDirty(View.java:21476)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:4438)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4166)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3326)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2143)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8665)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
        at android.view.Choreographer.doCallbacks(Choreographer.java:845)
        at android.view.Choreographer.doFrame(Choreographer.java:780)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7839)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

this is my code

  var sectionsState: Boolean by rememberSaveable { mutableStateOf(false) }

  val collapsedSet = getCollapsedConstraints()
  val expandedSet = getExpandedConstraints()

  val progress by animateFloatAsState(
    targetValue = if (sectionsState) 1f else 0f,
    animationSpec = tween(150)
  )

MotionLayout(
      start = collapsedSet,
      end = expandedSet,
      progress = progress,
      modifier = Modifier.fillMaxSize(),
    ) {
...
}



private fun getCollapsedConstraints(): ConstraintSet = ConstraintSet {
  val title = createRefFor("title")
  val subtitle = createRefFor("subtitle")
  val toggle = createRefFor("toggle")
  val sections = createRefFor("sections")
  val timers = createRefFor("timers")


  constrain(title) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    end.linkTo(parent.end)
    start.linkTo(parent.start)
    top.linkTo(parent.top)
  }
  constrain(subtitle) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    end.linkTo(parent.end)
    start.linkTo(parent.start)
    top.linkTo(title.bottom)
  }
  constrain(sections) {
    width = Dimension.matchParent
    height = Dimension.wrapContent
    start.linkTo(parent.start)
    end.linkTo(parent.end)
    bottom.linkTo(parent.top)
  }
  constrain(toggle) {
    end.linkTo(parent.end)
    top.linkTo(sections.bottom)
  }
  constrain(timers) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    start.linkTo(parent.start)
    end.linkTo(parent.end)
    bottom.linkTo(parent.bottom)
  }
}

private fun getExpandedConstraints(): ConstraintSet = ConstraintSet {
  val title = createRefFor("title")
  val subtitle = createRefFor("subtitle")
  val toggle = createRefFor("toggle")
  val sections = createRefFor("sections")
  val timers = createRefFor("timers")


  constrain(title) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    end.linkTo(parent.end)
    start.linkTo(parent.start)
    top.linkTo(parent.top)
  }
  constrain(subtitle) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    end.linkTo(parent.end)
    start.linkTo(parent.start)
    top.linkTo(title.bottom)
  }
  constrain(sections) {
    width = Dimension.matchParent
    height = Dimension.wrapContent
    start.linkTo(parent.start)
    end.linkTo(parent.end)
    top.linkTo(parent.top)
  }
  constrain(toggle) {
    end.linkTo(parent.end)
    top.linkTo(sections.bottom)
  }
  constrain(timers) {
    width = Dimension.wrapContent
    height = Dimension.wrapContent
    start.linkTo(parent.start)
    end.linkTo(parent.end)
    bottom.linkTo(parent.bottom)
  }
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions