Description
Hi,
I've come across and issue where the frameStack
is empty on some Android devices. I'm not sure if this an issue for nativescript-vue-navigator
or nativescript-vue
or neither and something else is in my code is causing this issue. But I'll explain anyway and hopefully it'll help others at least.
Starting here
nativescript-vue-navigator/index.js
Lines 73 to 74 in 5f80c73
When this.$navigate
is called we go into its definition at https://github.com/nativescript-vue/nativescript-vue/blob/c0e6f959096e81dd544cee01f8be4cebfd89eb87/platform/nativescript/plugins/navigator-plugin.js#L69.
On line 77 (https://github.com/nativescript-vue/nativescript-vue/blob/c0e6f959096e81dd544cee01f8be4cebfd89eb87/platform/nativescript/plugins/navigator-plugin.js#L77), we call getFrameInstance
. Then go to its definition at https://github.com/nativescript-vue/nativescript-vue/blob/c0e6f959096e81dd544cee01f8be4cebfd89eb87/platform/nativescript/plugins/navigator-plugin.js#L37.
On line 32 (https://github.com/nativescript-vue/nativescript-vue/blob/c0e6f959096e81dd544cee01f8be4cebfd89eb87/platform/nativescript/plugins/navigator-plugin.js#L32), when the result of require('@nativescript/core').Frame.getFrameById(frame)
is undefined
, causing undefined
to be assigned to the frame
variable.
The later call involving frame.id
(https://github.com/nativescript-vue/nativescript-vue/blob/c0e6f959096e81dd544cee01f8be4cebfd89eb87/platform/nativescript/plugins/navigator-plugin.js#L37) throws an error Cannot read property 'id' of undefined
and causes the navigation to never work.
Work around:
/// navigation.mixin.js
import { isAndroid } from '@nativescript/core';
import Vue, { navigateTo, NavigationEntryVue } from 'nativescript-vue';
import Component from 'vue-class-component';
@Component
export default class NavigationMixin extends Vue {
public $navigator_navigate_override(
route: string,
options: NavigationEntryVue
): navigateTo {
if (isAndroid) {
// HACK: Android is broken on some devices
options = {
...options,
frame: {
nativeView: {
id: options.frame || 'navigator'
}
}
};
}
return this.$navigator.navigate(route, {
...options
});
}
}
Which will get around frame.id
being undefined when the navigator
frame should always be defined when using the nativescript-vue-navigator
plugin.
Possibly associated to: