import {CommonActions, useNavigation} from '@react-navigation/native'; import {INavigation, NavParams} from "./nav"; import NavScreen, {INavScreen, NavScreenType, NavScreenTypeData, NavScreenData} from "./screen"; import NavBottomTabs, { navBottomTabs, INavBottomTabs, NavBottomTabsData, NavBottomTabsParams } from './bottomTabs'; class Nav implements INavigation { private _navigation: any constructor(navigation?: any) { if (navigation) this._navigation = navigation; } setNav(navigation: any) { this._navigation = navigation; } /** * 判断是否有可用返回 */ canGoBack(): boolean { return this._navigation.canGoBack(); } back(params?: NavParams): void { this._executeFunc(() => { this._navigation.goBack(); }, params); } empty(routeName: string, params?: NavParams): void { this._executeFunc(() => { this._navigation.dispatch(CommonActions.reset({ index: 0, routes: [{name: routeName}] })); }, params); } go(routeName: string, data?: object, params?: NavParams): void { this._executeFunc(() => { this._navigation.navigate(routeName, data ?? {}) }, params); } popToTop(params?: NavParams): void { this._executeFunc(() => { this._navigation.popToTop(); }, params); } private _executeFunc = (success: () => void, params?: NavParams) => { params = params || {}; if (typeof params.callback === "function") params.callback(); if (typeof params.timer === "number" && params.timer) setTimeout(() => success(), params.timer) else success(); } } const useNav = () => { const nav = useNavigation(); return new Nav(nav); } export default Nav export { useNav, NavScreen, NavBottomTabs, navBottomTabs, } export type { INavigation, NavParams, INavScreen, NavScreenType, NavScreenTypeData, NavScreenData, INavBottomTabs, NavBottomTabsData, NavBottomTabsParams }