Reputation: 816
In my project I get a lot of those exceptions:
Fatal Exception: java.lang.IllegalStateException
Offset is unspecified
These exceptions only appear on Redmi devices (tablets and handheld). This issue is present from version 1.1.0 to the latest 1.2.0-beta03 of Jetpack Compose, so changing version is not an option.
There is a full stacktrace:
androidx.compose.ui.geometry.Offset.getX-impl (Offset.java:28)
androidx.compose.ui.platform.AndroidComposeView.recalculateWindowPosition (AndroidComposeView.java:2)
androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc (AndroidComposeView.java:6)
androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent (AndroidComposeView.java:62)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:496)
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1853)
android.app.Activity.dispatchTouchEvent (Activity.java:4072)
com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:454)
android.view.View.dispatchPointerEvent (View.java:13744)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:5601)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:5401)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5061)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5118)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:7654)
android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:7623)
android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:7584)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:7785)
android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:251)
android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (InputEventReceiver.java)
android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:213)
android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:7730)
android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:7809)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1031)
android.view.Choreographer.doCallbacks (Choreographer.java:854)
android.view.Choreographer.doFrame (Choreographer.java:782)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1016)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:223)
android.app.ActivityThread.main (ActivityThread.java:7562)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)
Anybody faced it?
Upvotes: 4
Views: 3180
Reputation: 41
I faced the same problem when using TextField and moving to a different screen with animation. To solve this, you have to clear the focus of the TextField before doing some animation or transition, like this:
val focusManager = LocalFocusManager.current
LaunchedEffect(key1 = someState) {
if (someState) {
focusManager.clearFocus()
}
}
Upvotes: 0
Reputation: 1
I got this issue without ever directly using the offset, but when using the ".rotate()" modifier, the problem was division by zero in the the .rotate() so it was trying to rotate by NaN.
Upvotes: 0
Reputation: 67443
I got this issue when i change touch area of a Composable dynamically when changing scale via Modifier.graphicsLayer{} and i also use Offset.Unspecified
to not draw on Canvas initially for drawing apps.
If the issue is something happens on small region and negligible use
if(offset != Offset.Unspecified) {
xCoor = offset.x
yCoor = offset.y
// or do drawing with offset here for valid values
If it's a behavior that never returns any value but Offset.Unspecified you should open an issue for it.
Upvotes: 2
Reputation: 355
I used to get this exception when my offset parameters are not a number.
Make sure that your Offset parameters are number.
Here is how you can check if it is a number :
if(offsetX.isNaN().not()){
//handle your code here
}
Upvotes: 1