stringFrom method
Copies a java.lang.String back into Dart.
Returns null when string holds a Java null, mirroring the Java side
rather than collapsing null into ''.
Implementation
String? stringFrom(JavaRef string) {
if (string.isNull) return null;
final env = this.env;
final getLength = Jvm.fnSlotOf(env, JniFn.getStringLength)
.cast<NativeFunction<GetStringLengthC>>()
.asFunction<GetStringLengthDart>();
final getChars = Jvm.fnSlotOf(
env,
JniFn.getStringChars,
).cast<NativeFunction<GetStringCharsC>>().asFunction<GetStringCharsDart>();
final releaseChars = Jvm.fnSlotOf(env, JniFn.releaseStringChars)
.cast<NativeFunction<ReleaseStringCharsC>>()
.asFunction<ReleaseStringCharsDart>();
final length = getLength(env, string.pointer);
final chars = getChars(env, string.pointer, nullptr);
if (chars == nullptr) {
checkException();
return null;
}
try {
// `asTypedList` views VM-owned memory; copy out before releasing it.
return String.fromCharCodes(chars.asTypedList(length));
} finally {
releaseChars(env, string.pointer, chars);
}
}