diff --git a/app/(tabs)/ask.tsx b/app/(tabs)/ask.tsx
index 51c0964..ca78968 100644
--- a/app/(tabs)/ask.tsx
+++ b/app/(tabs)/ask.tsx
@@ -18,7 +18,8 @@ import {
TouchableOpacity,
View
} from 'react-native';
-import { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
+import { Gesture, GestureDetector } from "react-native-gesture-handler";
+import { runOnJS, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
import { useSafeAreaInsets } from "react-native-safe-area-context";
export default function AskScreen() {
@@ -40,147 +41,147 @@ export default function AskScreen() {
}>();
// 创建一个可复用的滚动函数
- // const scrollToEnd = useCallback((animated = true) => {
- // if (chatListRef.current) {
- // setTimeout(() => chatListRef.current?.scrollToEnd({ animated }), 100);
- // }
- // }, []);
+ const scrollToEnd = useCallback((animated = true) => {
+ if (chatListRef.current) {
+ setTimeout(() => chatListRef.current?.scrollToEnd({ animated }), 100);
+ }
+ }, []);
// 右滑
- // const gesture = Gesture.Pan()
- // .onEnd((event) => {
- // const { translationX } = event;
- // const threshold = 100; // 滑动阈值
+ const gesture = Gesture.Pan()
+ .onEnd((event) => {
+ const { translationX } = event;
+ const threshold = 100; // 滑动阈值
- // if (translationX > threshold) {
- // // 从左向右滑动,跳转页面
- // runOnJS(router.replace)("/memo-list");
- // }
- // })
- // .minPointers(1)
- // .activeOffsetX([-10, 10]); // 在 X 方向触发的范围
+ if (translationX > threshold) {
+ // 从左向右滑动,跳转页面
+ runOnJS(router.replace)("/memo-list");
+ }
+ })
+ .minPointers(1)
+ .activeOffsetX([-10, 10]); // 在 X 方向触发的范围
- // useEffect(() => {
- // if (!isHello && userMessages.length > 0) {
- // scrollToEnd();
- // }
- // }, [userMessages, isHello, scrollToEnd]);
+ useEffect(() => {
+ if (!isHello && userMessages.length > 0) {
+ scrollToEnd();
+ }
+ }, [userMessages, isHello, scrollToEnd]);
- // useEffect(() => {
- // const keyboardDidShowListener = Keyboard.addListener(
- // 'keyboardDidShow',
- // (e) => {
- // setTimeout(() => {
- // if (!isHello) {
- // scrollToEnd();
- // }
- // }, 100);
- // }
- // );
+ useEffect(() => {
+ const keyboardDidShowListener = Keyboard.addListener(
+ 'keyboardDidShow',
+ (e) => {
+ setTimeout(() => {
+ if (!isHello) {
+ scrollToEnd();
+ }
+ }, 100);
+ }
+ );
- // const keyboardDidHideListener = Keyboard.addListener(
- // 'keyboardDidHide',
- // () => {
- // setTimeout(() => {
- // if (!isHello) {
- // scrollToEnd(false);
- // }
- // }, 100);
- // }
- // );
+ const keyboardDidHideListener = Keyboard.addListener(
+ 'keyboardDidHide',
+ () => {
+ setTimeout(() => {
+ if (!isHello) {
+ scrollToEnd(false);
+ }
+ }, 100);
+ }
+ );
- // return () => {
- // keyboardDidShowListener.remove();
- // keyboardDidHideListener.remove();
- // };
- // }, [isHello]);
+ return () => {
+ keyboardDidShowListener.remove();
+ keyboardDidHideListener.remove();
+ };
+ }, [isHello]);
- // useFocusEffect(
- // useCallback(() => {
- // webSocketManager.connect();
+ useFocusEffect(
+ useCallback(() => {
+ webSocketManager.connect();
- // const handleChatStream = (message: WsMessage) => {
- // if (message.type === 'ChatStream') {
- // setUserMessages(prevMessages => {
- // const newMessages = [...prevMessages];
- // const lastMessage = newMessages[newMessages.length - 1];
+ const handleChatStream = (message: WsMessage) => {
+ if (message.type === 'ChatStream') {
+ setUserMessages(prevMessages => {
+ const newMessages = [...prevMessages];
+ const lastMessage = newMessages[newMessages.length - 1];
- // if (lastMessage && lastMessage.role === Assistant) {
- // if (typeof lastMessage.content === 'string') {
- // if (lastMessage.content === 'keepSearchIng') {
- // // 第一次收到流式消息,替换占位符
- // lastMessage.content = message.chunk;
- // } else {
- // // 持续追加流式消息
- // lastMessage.content += message.chunk;
- // }
- // } else {
- // // 如果 content 是数组,则更新第一个 text 部分
- // const textPart = lastMessage.content.find(p => p.type === 'text');
- // if (textPart) {
- // textPart.text = (textPart.text || '') + message.chunk;
- // }
- // }
- // }
- // return newMessages;
- // });
- // }
- // };
+ if (lastMessage && lastMessage.role === Assistant) {
+ if (typeof lastMessage.content === 'string') {
+ if (lastMessage.content === 'keepSearchIng') {
+ // 第一次收到流式消息,替换占位符
+ lastMessage.content = message.chunk;
+ } else {
+ // 持续追加流式消息
+ lastMessage.content += message.chunk;
+ }
+ } else {
+ // 如果 content 是数组,则更新第一个 text 部分
+ const textPart = lastMessage.content.find(p => p.type === 'text');
+ if (textPart) {
+ textPart.text = (textPart.text || '') + message.chunk;
+ }
+ }
+ }
+ return newMessages;
+ });
+ }
+ };
- // const handleChatStreamEnd = (message: WsMessage) => {
- // if (message.type === 'ChatStreamEnd') {
- // setUserMessages(prevMessages => {
- // const newMessages = [...prevMessages];
- // const lastMessage = newMessages[newMessages.length - 1];
- // if (lastMessage && lastMessage.role === Assistant) {
- // // 使用最终消息替换流式消息,确保 message.message 存在
- // if (message.message) {
- // newMessages[newMessages.length - 1] = message.message as Message;
- // } else {
- // // 如果最终消息为空,则移除 'keepSearchIng' 占位符
- // return prevMessages.filter(m => !(typeof m.content === 'string' && m.content === 'keepSearchIng'));
- // }
- // }
- // return newMessages;
- // });
- // }
- // };
+ const handleChatStreamEnd = (message: WsMessage) => {
+ if (message.type === 'ChatStreamEnd') {
+ setUserMessages(prevMessages => {
+ const newMessages = [...prevMessages];
+ const lastMessage = newMessages[newMessages.length - 1];
+ if (lastMessage && lastMessage.role === Assistant) {
+ // 使用最终消息替换流式消息,确保 message.message 存在
+ if (message.message) {
+ newMessages[newMessages.length - 1] = message.message as Message;
+ } else {
+ // 如果最终消息为空,则移除 'keepSearchIng' 占位符
+ return prevMessages.filter(m => !(typeof m.content === 'string' && m.content === 'keepSearchIng'));
+ }
+ }
+ return newMessages;
+ });
+ }
+ };
- // const handleError = (message: WsMessage) => {
- // if (message.type === 'Error') {
- // console.log(`WebSocket Error: ${message.code} - ${message.message}`);
- // // 可以在这里添加错误提示,例如替换最后一条消息为错误信息
- // setUserMessages(prev => {
- // // 创建新的数组和新的消息对象
- // return prev.map((msg, index) => {
- // if (index === prev.length - 1 &&
- // typeof msg.content === 'string' &&
- // msg.content === 'keepSearchIng') {
- // // 返回新的消息对象
- // return {
- // ...msg,
- // content: getWebSocketErrorMessage(message.code, t)
- // };
- // }
- // return msg;
- // });
- // });
- // }
- // };
+ const handleError = (message: WsMessage) => {
+ if (message.type === 'Error') {
+ console.log(`WebSocket Error: ${message.code} - ${message.message}`);
+ // 可以在这里添加错误提示,例如替换最后一条消息为错误信息
+ setUserMessages(prev => {
+ // 创建新的数组和新的消息对象
+ return prev.map((msg, index) => {
+ if (index === prev.length - 1 &&
+ typeof msg.content === 'string' &&
+ msg.content === 'keepSearchIng') {
+ // 返回新的消息对象
+ return {
+ ...msg,
+ content: getWebSocketErrorMessage(message.code, t)
+ };
+ }
+ return msg;
+ });
+ });
+ }
+ };
- // webSocketManager.subscribe('ChatStream', handleChatStream);
- // webSocketManager.subscribe('ChatStreamEnd', handleChatStreamEnd);
- // webSocketManager.subscribe('Error', handleError);
+ webSocketManager.subscribe('ChatStream', handleChatStream);
+ webSocketManager.subscribe('ChatStreamEnd', handleChatStreamEnd);
+ webSocketManager.subscribe('Error', handleError);
- // return () => {
- // webSocketManager.unsubscribe('ChatStream', handleChatStream);
- // webSocketManager.unsubscribe('ChatStreamEnd', handleChatStreamEnd);
- // webSocketManager.unsubscribe('Error', handleError);
- // // 可以在这里选择断开连接,或者保持连接以加快下次进入页面的速度
- // // webSocketManager.disconnect();
- // };
- // }, [])
- // );
+ return () => {
+ webSocketManager.unsubscribe('ChatStream', handleChatStream);
+ webSocketManager.unsubscribe('ChatStreamEnd', handleChatStreamEnd);
+ webSocketManager.unsubscribe('Error', handleError);
+ // 可以在这里选择断开连接,或者保持连接以加快下次进入页面的速度
+ // webSocketManager.disconnect();
+ };
+ }, [])
+ );
// 创建动画样式
const welcomeStyle = useAnimatedStyle(() => {
@@ -217,13 +218,13 @@ export default function AskScreen() {
}
}, [sessionId, newSession]);
- // useEffect(() => {
- // if (!isHello) {
- // // 不再自动关闭键盘,让用户手动控制
- // // 这里可以添加其他需要在隐藏hello界面时执行的逻辑
- // scrollToEnd(false);
- // }
- // }, [isHello]);
+ useEffect(() => {
+ if (!isHello) {
+ // 不再自动关闭键盘,让用户手动控制
+ // 这里可以添加其他需要在隐藏hello界面时执行的逻辑
+ scrollToEnd(false);
+ }
+ }, [isHello]);
useFocusEffect(
useCallback(() => {
@@ -235,41 +236,41 @@ export default function AskScreen() {
);
return (
- //
-
- {/* 导航栏 */}
-
- {
- try {
- if (TextInput.State?.currentlyFocusedInput) {
- const input = TextInput.State.currentlyFocusedInput();
- if (input) input.blur();
+
+
+ {/* 导航栏 */}
+
+ {
+ try {
+ if (TextInput.State?.currentlyFocusedInput) {
+ const input = TextInput.State.currentlyFocusedInput();
+ if (input) input.blur();
+ }
+ } catch (error) {
+ console.log('失去焦点失败:', error);
}
- } catch (error) {
- console.log('失去焦点失败:', error);
- }
- Keyboard.dismiss();
- router.push('/memo-list');
- }}
- >
-
-
- { router.push('/owner') }}>MemoWake
-
-
+ Keyboard.dismiss();
+ router.push('/memo-list');
+ }}
+ >
+
+
+ { router.push('/owner') }}>MemoWake
+
+
-
- {/* 欢迎页面 */}
-
-
-
+
+ {/* 欢迎页面 */}
+
+
+
- {/* 聊天页面 */}
- {/*
scrollToEnd()}
/>
*/}
-
-
- {/* 输入框区域 */}
-
-
-
-
-
- //
+
+ {/* 输入框区域 */}
+
+
+
+
+
+
+
);
}