feat(app-expo): 聊天键盘与列表滚动改用 keyboard-controller,并收敛 Web 构建配置
聊天(conversation/[id]) - 根布局挂载 KeyboardProvider,会话页使用 react-native-keyboard-controller 的 KeyboardAvoidingView(padding + 仅文字模式 enabled),替代手写 keyboardLift 与 RN KeyboardAvoidingView 分端逻辑,改善 Android 键盘遮挡与布局一致性。 - 键盘:keyboardDidShow 后 scrollToEnd;iOS 用 keyboardWillShow 提前更新键盘可见状态; 收起使用 WillHide/DidHide;监听在 effect 中统一移除。 - 输入框高度:ChatInputBar 通过 onInputDisplayHeightChange 在 inputDisplayHeight 变化时 触发滚到底;保留底部容器 onLayout 以覆盖连接提示与整块高度变化。 配置与构建 - app.config:移除 web 块与 expo-sqlite Web 所需的 COEP/COOP headers;expo-router 插件 改为无参;Android 显式 softwareKeyboardLayoutMode: resize。 - metro.config:移除 wasm 资源与 COOP/COOP dev server OC
This commit is contained in:
@@ -3,29 +3,6 @@ const { withNativeWind } = require('nativewind/metro');
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
// --- Web: Required for expo-sqlite ---
|
||||
// expo-sqlite on web uses SQLite compiled to WASM; Metro must treat .wasm as an asset.
|
||||
if (!config.resolver.assetExts.includes('wasm')) {
|
||||
config.resolver.assetExts.push('wasm');
|
||||
}
|
||||
|
||||
// --- Web: Required for expo-sqlite ---
|
||||
// SharedArrayBuffer (used by SQLite WASM) requires COEP/COOP headers.
|
||||
// Dev server: set here. Production: set via app.config.js expo-router headers.
|
||||
config.server = config.server ?? {};
|
||||
const existingEnhanceMiddleware = config.server.enhanceMiddleware;
|
||||
config.server.enhanceMiddleware = (middleware, server) => {
|
||||
const nextMiddleware = existingEnhanceMiddleware
|
||||
? existingEnhanceMiddleware(middleware, server)
|
||||
: middleware;
|
||||
|
||||
return (req, res, next) => {
|
||||
res.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');
|
||||
res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
|
||||
return nextMiddleware(req, res, next);
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = withNativeWind(config, {
|
||||
input: './src/global.css',
|
||||
inlineRem: 16,
|
||||
|
||||
Reference in New Issue
Block a user