Enhance responsive design and update dependencies

- Added expo-screen-orientation package to manage screen orientation.
- Updated react-native-gesture-handler to version 2.27.1 for improved gesture handling.
- Implemented responsive design features across multiple screens using the new useResponsive hook.
- Refactored DetailScreen, HomeScreen, SearchScreen, and PlayScreen to adapt layouts based on screen size.
- Introduced PlayerControlsMobile for optimized playback controls on mobile devices.
- Adjusted button styles in StyledButton for better responsiveness.
This commit is contained in:
zimplexing
2025-07-09 17:23:46 +08:00
parent d42a3e014e
commit 803fc87fd9
10 changed files with 428 additions and 97 deletions

View File

@@ -6,6 +6,7 @@ import VideoCard from "@/components/VideoCard.tv";
import { api, SearchResult } from "@/services/api";
import { Search } from "lucide-react-native";
import { StyledButton } from "@/components/StyledButton";
import { useResponsive } from "@/hooks/useResponsive";
export default function SearchScreen() {
const [keyword, setKeyword] = useState("");
@@ -15,6 +16,10 @@ export default function SearchScreen() {
const textInputRef = useRef<TextInput>(null);
const colorScheme = "dark"; // Replace with useColorScheme() if needed
const [isInputFocused, setIsInputFocused] = useState(false);
const { isMobile, screenWidth, numColumns } = useResponsive();
const itemWidth = isMobile ? screenWidth / numColumns(150, 16) - 24 : screenWidth / 5 - 24;
const calculatedNumColumns = numColumns(150, 16);
useEffect(() => {
// Focus the text input when the screen loads
@@ -48,15 +53,17 @@ export default function SearchScreen() {
};
const renderItem = ({ item }: { item: SearchResult }) => (
<VideoCard
id={item.id.toString()}
source={item.source}
title={item.title}
poster={item.poster}
year={item.year}
sourceName={item.source_name}
api={api}
/>
<View style={{ width: itemWidth, margin: 8 }}>
<VideoCard
id={item.id.toString()}
source={item.source}
title={item.title}
poster={item.poster}
year={item.year}
sourceName={item.source_name}
api={api}
/>
</View>
);
return (
@@ -99,7 +106,8 @@ export default function SearchScreen() {
data={results}
renderItem={renderItem}
keyExtractor={(item, index) => `${item.id}-${item.source}-${index}`}
numColumns={5} // Adjust based on your card size and desired layout
numColumns={calculatedNumColumns}
key={calculatedNumColumns}
contentContainerStyle={styles.listContent}
ListEmptyComponent={
<View style={styles.centerContainer}>