import { View, Text, ScrollView } from "@tarojs/components"; import './layout.scss' import { NaviBarTitleShowType, TemplateType } from "@/utils/types"; import { useEffect, useRef, useState } from "react"; import Taro, { usePageScroll } from "@tarojs/taro"; import { rpxToPx } from "@/utils/tools"; let useNavigation; let GradientText let RefreshControl; let ScrollViewRN; if (process.env.TARO_ENV == 'rn') { ScrollViewRN = require("react-native").ScrollView RefreshControl = require("react-native").RefreshControl GradientText = require('@/components/basic/GradientText').default useNavigation = require("@react-navigation/native").useNavigation } export default function Layout(props: { children: React.ReactNode, type: TemplateType, refresh?: Function, more?: Function, triggered?: boolean, title?: string, titleColor?: string, header?: React.ReactNode, secondPage?: boolean, isFastSleepTheme?: boolean, titleShowStyle: NaviBarTitleShowType, showPullToRefresh?: boolean, // ref?: any }) { const { children, type, triggered } = props; const [isRefreshing, setIsRefreshing] = useState(false) const scrollRef = useRef(null); const [scrollTop, setScrollTop] = useState(0) const [showTitle, setShowTitle] = useState(props.titleShowStyle == NaviBarTitleShowType.alwayShow) let navigation; if (useNavigation) { navigation = useNavigation() } useEffect(() => { Taro.setNavigationBarTitle({ title: showTitle ? props.title ? props.title : '' : '' }) if (navigation) { navigation.setOptions({ headerTitle: showTitle ? props.title ? props.title : '' : '', }); } // setTimeout(() => { // if (process.env.TARO_ENV == 'rn') { // setScrollTop(100) // // debugger // // (scrollRef.current as any).scrollToOffset(100,true) // } // }, 8000) }, [showTitle, props.title]) function onRefresh() { if (props.refresh) { props.refresh() } setIsRefreshing(true) setTimeout(() => { setIsRefreshing(false) }, 1000) } function onScroll(e) { if (props.titleShowStyle == NaviBarTitleShowType.scrollToShow) { if (e.nativeEvent){ const {contentOffset} = e.nativeEvent if (contentOffset.y > 70) { setShowTitle(true) } else { setShowTitle(false) } } else { if (e.detail.scrollTop > 70) { setShowTitle(true) } else { setShowTitle(false) } } } if (e.nativeEvent){ const { contentSize, contentOffset, layoutMeasurement } = e.nativeEvent; const isAtTheBottom = contentSize.height - contentOffset.y <= layoutMeasurement.height; if (isAtTheBottom && props.more){ props.more() } } } usePageScroll((e) => { if (props.titleShowStyle == NaviBarTitleShowType.scrollToShow) { if (e.scrollTop > 70) { setShowTitle(true) } else { setShowTitle(false) } } }) function fastSleepTitle() { if (process.env.TARO_ENV == 'rn') { return {props.title} } return {props.title} } function pageDetail() { return { props.title && { props.isFastSleepTheme ? fastSleepTitle() : {props.title} } } { children } } switch (type) { case TemplateType.flex: return {/* */} { process.env.TARO_ENV == 'weapp' ? pageDetail() : { pageDetail() } } case TemplateType.customHeader: if (process.env.TARO_ENV == 'rn') { return : null } showsVerticalScrollIndicator={false}> { props.header } {children} } return {/* */} { props.header } {children} } return }