From 2047b101ca551fc5d82c4dea2ffdd517e38aa562 Mon Sep 17 00:00:00 2001 From: xuqm Date: Mon, 14 Jul 2025 20:30:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(navigation):=20=E5=AE=9E=E7=8E=B0=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E5=AF=BC=E8=88=AA=E6=A8=A1=E5=9D=97=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 NavigationManager 和 NavigationPackage 类,实现原生导航功能 - 更新 MainApplication,集成导航模块- 修改 App.tsx,使用新导航模块进行页面跳转 - 优化 NavigationHelper,使用新的消息格式 - 更新 Hospital.tsx,改进页面展示 - 引入 babel-plugin-module-resolver 和更新 tsconfig,优化项目路径配置 --- .../java/com/trust/ywx/MainApplication.kt | 3 +- .../{ => navigation}/NavigationManager.kt | 8 +- .../ywx/specs/navigation/NavigationPackage.kt | 31 ++++++ babel.config.js | 15 +++ package.json | 1 + src/app/App.tsx | 5 +- src/common/NavigationHelper.ts | 4 +- src/hospital/Hospital.tsx | 3 +- tsconfig.json | 24 ++++- yarn.lock | 101 +++++++++++++++++- 10 files changed, 183 insertions(+), 12 deletions(-) rename android/app/src/main/java/com/trust/ywx/specs/{ => navigation}/NavigationManager.kt (79%) create mode 100644 android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationPackage.kt diff --git a/android/app/src/main/java/com/trust/ywx/MainApplication.kt b/android/app/src/main/java/com/trust/ywx/MainApplication.kt index ef11c75..0606264 100644 --- a/android/app/src/main/java/com/trust/ywx/MainApplication.kt +++ b/android/app/src/main/java/com/trust/ywx/MainApplication.kt @@ -9,6 +9,7 @@ import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost import com.facebook.react.defaults.DefaultReactNativeHost +import com.trust.ywx.specs.navigation.NavigationPackage class MainApplication : Application(), ReactApplication { @@ -17,7 +18,7 @@ class MainApplication : Application(), ReactApplication { override fun getPackages(): List = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) + add(NavigationPackage()) } override fun getJSMainModuleName(): String = "index" diff --git a/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationManager.kt similarity index 79% rename from android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt rename to android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationManager.kt index e9c017b..dde878f 100644 --- a/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt +++ b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationManager.kt @@ -1,12 +1,10 @@ -package com.trust.ywx.specs - +package com.trust.ywx.specs.navigation import android.content.Intent import com.facebook.react.bridge.ReactApplicationContext import com.trust.ywx.AppManager import com.trust.ywx.BuzActivity import com.trust.ywx.specs.NativeNavigationManagerSpec -import com.trust.ywx.specs.navigation.NavigationHelper class NavigationManager(reactContext: ReactApplicationContext) : NativeNavigationManagerSpec(reactContext) { @@ -20,4 +18,8 @@ class NavigationManager(reactContext: ReactApplicationContext) : } + override fun getName() = NAME + companion object { + const val NAME = "NavigationManager" + } } \ No newline at end of file diff --git a/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationPackage.kt b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationPackage.kt new file mode 100644 index 0000000..f9a2fcb --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationPackage.kt @@ -0,0 +1,31 @@ +package com.trust.ywx.specs.navigation + +import com.facebook.react.BaseReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider + +class NavigationPackage : BaseReactPackage() { + override fun getModule( + name: String, + reactContext: ReactApplicationContext + ): NativeModule? = if (name == NavigationManager.NAME) { + NavigationManager(reactContext) + } else { + null + } + + override fun getReactModuleInfoProvider() = ReactModuleInfoProvider { + mapOf( + NavigationManager.NAME to ReactModuleInfo( + name = NavigationManager.NAME, + className = NavigationManager.NAME, + canOverrideExistingModule = false, + needsEagerInit = false, + isCxxModule = false, + isTurboModule = true + ) + ) + } +} \ No newline at end of file diff --git a/babel.config.js b/babel.config.js index f7b3da3..989aa34 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,18 @@ module.exports = { presets: ['module:@react-native/babel-preset'], + plugins: [ + [ + 'module-resolver', + { + root: ['.'], + alias: { + '@': './src', + '@ywx': './src/ywq', + '@app': './src/app', + '@hospital': './src/hospital', + '@common': './src/common', + }, + }, + ], + ], }; diff --git a/package.json b/package.json index be774f2..b24c4a2 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "dependencies": { "@react-native-async-storage/async-storage": "^2.2.0", "@react-native/new-app-screen": "0.80.1", + "babel-plugin-module-resolver": "^5.0.2", "react": "19.1.0", "react-native": "0.80.1", "react-native-storage": "^1.0.1" diff --git a/src/app/App.tsx b/src/app/App.tsx index 90e549b..2a8b827 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -12,7 +12,7 @@ import { useColorScheme, View, } from 'react-native'; -import { pushByName } from '../common/NavigationHelper.ts'; +import * as navigation from '@common/NavigationHelper.ts'; function App() { const isDarkMode = useColorScheme() === 'dark'; @@ -24,7 +24,8 @@ function App() {