ui-label icon indicating copy to clipboard operation
ui-label copied to clipboard

Runtime error when using text-shadow CSS property on Android

Open rdlauer opened this issue 2 months ago • 6 comments

When I use text-shadow on a ui-label 1.3.41 element, I get a runtime error on Android (works on iOS):

Cannot read properties of undefined (reading 'toDevicePixels')

Here is some example CSS:

text-shadow: 0 1 2 black;

rdlauer avatar Dec 19 '25 17:12 rdlauer

Hmmm I just found the same issue when using padding-right on a ui-label element on Android.

rdlauer avatar Dec 19 '25 17:12 rdlauer

@rdlauer please share simple example and logs (full stack)

farfromrefug avatar Dec 19 '25 20:12 farfromrefug

Sure, it's pretty simple for me to replicate. Here is the text-shadow example:

<lbl:Label autoFontSize="true" maxFontSize="24" text="{{ user_name }}" textWrap="false" class="text-shadow" />

and the CSS class:

.text-shadow {
  text-shadow: 0 1 2 black;
}

rdlauer avatar Dec 19 '25 20:12 rdlauer

@farfromrefug Just realized I never sent you the stack trace:

 System.err: An uncaught Exception occurred on "main" thread.
  System.err: Calling js method onCreateView failed
  System.err: TypeError: Cannot read properties of undefined (reading 'toDevicePixels')
  System.err:
  System.err: StackTrace:
  System.err: [paddingRight:setNative](file:///data/data/com.groovapp.app/files/app/vendor.mjs:6223:175)
  System.err:   at applyAllNativeSetters(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34151:37)
  System.err:   at initNativeView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34076:9)
  System.err:   at onResumeNativeUpdates(file:///data/data/com.groovapp.app/files/app/vendor.mjs:35255:68)
  System.err:   at onResumeNativeUpdates(file:///data/data/com.groovapp.app/files/app/vendor.mjs:5980:15)
  System.err:   at onResumeNativeUpdates(file:///data/data/com.groovapp.app/files/app/vendor.mjs:6238:15)
  System.err:   at _resumeNativeUpdates(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34697:18)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34652:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:37326:15)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:36086:15)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:74)
  System.err:   at callFunctionWithSuper(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34732:9)
  System.err:   at callLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:14)
  System.err:   at loadView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34904:18)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34654:18)
  System.err:   at eachChildView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:47258:28)
  System.err:   at eachChild(file:///data/data/com.groovapp.app/files/app/vendor.mjs:38083:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34653:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:37326:15)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:36086:15)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:74)
  System.err:   at callFunctionWithSuper(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34732:9)
  System.err:   at callLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:14)
  System.err:   at loadView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34904:18)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34654:18)
  System.err:   at eachChildView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:47258:28)
  System.err:   at eachChild(file:///data/data/com.groovapp.app/files/app/vendor.mjs:38083:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34653:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:37326:15)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:36086:15)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:74)
  System.err:   at callFunctionWithSuper(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34732:9)
  System.err:   at callLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:14)
  System.err:   at loadView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34904:18)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34654:18)
  System.err:   at eachChildView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:32034:13)
  System.err:   at eachChildView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:50149:15)
  System.err:   at eachChild(file:///data/data/com.groovapp.app/files/app/vendor.mjs:38083:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34653:14)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:37326:15)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:36086:15)
  System.err:   at onLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:49950:15)
  System.err:   at (file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:74)
  System.err:   at callFunctionWithSuper(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34732:9)
  System.err:   at callLoaded(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34738:14)
  System.err:   at loadView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34904:18)
  System.err:   at _addViewCore(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34895:18)
  System.err:   at _addView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:34880:14)
  System.err:   at onCreateView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:42003:23)
  System.err:   at onCreateView(file:///data/data/com.groovapp.app/files/app/vendor.mjs:40384:32)
  System.err:   at com.tns.Runtime.callJSMethodNative(Native Method)
  System.err:   at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1384)
  System.err:   at com.tns.Runtime.callJSMethodImpl(Runtime.java:1270)
  System.err:   at com.tns.Runtime.callJSMethod(Runtime.java:1257)
  System.err:   at com.tns.Runtime.callJSMethod(Runtime.java:1235)
  System.err:   at com.tns.Runtime.callJSMethod(Runtime.java:1231)
  System.err:   at com.tns.FragmentClass.onCreateView(FragmentClass.java:55)
  System.err:   at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3119)
  System.err:   at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:577)
  System.err:   at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:286)
  System.err:   at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2214)
  System.err:   at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2109)
  System.err:   at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2052)
  System.err:   at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:703)
  System.err:   at android.os.Handler.handleCallback(Handler.java:995)
  System.err:   at android.os.Handler.dispatchMessage(Handler.java:103)
  System.err:   at android.os.Looper.loopOnce(Looper.java:248)
  System.err:   at android.os.Looper.loop(Looper.java:338)
  System.err:   at android.app.ActivityThread.main(ActivityThread.java:9067)
  System.err:   at java.lang.reflect.Method.invoke(Native Method)
  System.err:   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
  System.err:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

rdlauer avatar Jan 15 '26 22:01 rdlauer

@rdlauer you are using Nativescript v9?

farfromrefug avatar Jan 16 '26 09:01 farfromrefug

Yes

rdlauer avatar Jan 16 '26 15:01 rdlauer

FYI @farfromrefug I'm pretty sure this is the fix that is needed. I'm not as familiar with the NativeScript internals though:

Instead of:

import { Length } from '@nativescript/core/ui/styling/style-properties';
// ...
Length.toDevicePixels(value, 0)

It should be this for v9:

import { Utils } from '@nativescript/core';
// ...
Utils.layout.toDevicePixels(value, 0)

rdlauer avatar Jan 30 '26 19:01 rdlauer

@farfromrefug I'm still pretty stuck on this issue. Do you know if this is actually a bug or maybe it's a new problem w/ my code?

rdlauer avatar Feb 24 '26 01:02 rdlauer

@rdlauer it is actually a bug in N i think (v9 is messy) because i dont even have import { Length } from '@nativescript/core/ui/styling/style-properties'; in the code anymore. Yet i fixed it in this plugin. Hopefully it should work for you in the new version (up in 10 min max)

EDIT: in fact the plugin code is correct! It should work with NS v9

farfromrefug avatar Feb 25 '26 10:02 farfromrefug