升级@stripe/stripe-react-native后Android端打开CardField崩溃
解决Android端CardField崩溃问题(windowRecomposer错误)
升级@stripe/stripe-react-native从0.22.1到0.33.0后,Android端打开含CardField的视图出现Cannot locate windowRecomposer崩溃,本质是新版本Stripe改用Jetpack Compose实现CardField,与React Native视图生命周期存在绑定冲突,以下是可行解决方案:
1. 延迟CardField渲染
等视图完全挂载后再初始化CardField,避免ComposeView在未附加窗口时启动:
import { useState, useEffect } from 'react'; import { CardField } from '@stripe/stripe-react-native'; const PaymentScreen = () => { const [isViewMounted, setIsViewMounted] = useState(false); useEffect(() => { setIsViewMounted(true); return () => setIsViewMounted(false); }, []); return ( <> {isViewMounted && <CardField />} </> ); };
2. 对齐Jetpack Compose依赖版本
Stripe 0.33.0依赖特定版本的Compose库,确保项目依赖与之一致:
- 在项目根目录
build.gradle中定义统一版本:
buildscript { ext { compose_version = '1.4.3' } }
- 在
app/build.gradle中启用Compose并配置版本:
android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion compose_version } }
3. 临时降级到过渡版本
若上述方案无效,可先降级到兼容性更好的0.30.x版本,待Stripe修复该问题后再升级:
npm install @stripe/stripe-react-native@0.30.0 # 或使用yarn:yarn add @stripe/stripe-react-native@0.30.0
4. 检查Activity配置
确保对应Activity继承自AppCompatActivity,为Compose提供正确的窗口环境:
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize"> </activity>
内容的提问来源于stack exchange,提问作者RadekR
相关产品推荐
相关产品推荐

