2

I build a e-commerce app and i try to get params in a custom drawer from screen and i want to implement a remember Me function for the login page so i try to use AsyncStorage but i don't succeed to get the params from the login to my customdrawer logout button and i have a second issue when i logout from the homepage the useEffect don't work. i have to reload the app to get the storage credentials.

Here my code:

LoginScreen:

const LoginScreen = ({ navigation }) => {
  const [show, setShow] = useState(false);
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [isSignUp, setIsSignUp] = useState(true);
  const [haveAccount, setHaveAccount] = useState(true);
  const [token, setToken] = useState("");
  const [rememberMe, setRememberMe] = useState(true);

  useEffect(() => {
    getCredentials();
  }, []);


  const handleRemember = () => {
    setRememberMe(!rememberMe);
    console.log(rememberMe);
  };

  const handleRegister = () => {
    setHaveAccount(!haveAccount);
    console.log("change");
  };

  const getCredentials = async () => {
    try {
      const value = await AsyncStorage.getItem("token");
      const username = await AsyncStorage.getItem("email");
      const storedPassword = await AsyncStorage.getItem("password");
      if (value !== null) {
        setToken(value);
        console.log("token recupéré:", value);
        if (username !== null) {
          setEmail(username);
          console.log(email);
        }
        if (storedPassword !== null) {
          setPassword(storedPassword);
          console.log(password);
        }
      } else {
        console.log("aucun token");
      }
    } catch (error) {
      console.log(error);
    }
  };

  const storeCredentials = async () => {
    try {
      let newToken = Math.random()
        .toString(36)
        .substring(2);
      setToken(newToken);
      console.log("newTok", newToken);
      await AsyncStorage.setItem("token", newToken);
      await AsyncStorage.setItem("email", email);
      await AsyncStorage.setItem("password", password);
      console.log("userToken", newToken);
      console.log("emailRegistered", email);
      console.log("passwordUser : ", password);
    } catch (error) {
      console.log(error);
    }
  };


  const handleSignIn = (e) => {
    e.preventDefault();
    signInWithEmailAndPassword(authentification, email, password)
      .then((userCredential) => {
        console.log("Signed In!");
        const user = userCredential.user;
        if (rememberMe === true) {
          storeCredentials();
        }
        setEmail("");
        setPassword("");
        navigation.navigate("HomePage", {
          storage: rememberMe,
        });
      })
      .catch((error) => {
        console.log(error);
        Alert.alert(error.message);
      });
  };

My Drawer:

const Drawer = createDrawerNavigator();

export const DrawerNavigator = ({ navigation, route }) => {
  //const { storage } = route.params.storage;

  return (
    <Drawer.Navigator
      drawerContent={(props) => <CustomDrawer {...props} />}
      screenOptions={{ headerShown: false }}
    >
      <Drawer.Screen
        name="BottomHome"
        component={BottomTabNav}
        options={{
          title: "Accueil",
          drawerIcon: () => (
            <AntDesign name="home" size={24} color={Colors.purple} />
          ),
          drawerActiveTintColor: "#5956E9",
        }}
      />

and my Custom Drawer:

const CustomDrawer = (props) => {
  useEffect(() => {
    console.log("test :", props);
  }, []);
  const navigation = useNavigation();
  const route = useRoute();

  const handleLogout = async () => {
    navigation.goBack("Login");
    //if (storageCred === false) {
    //await AsyncStorage.clear();
    //console.log("cache effacé");
    //}
  };

How i can get the params from my LoginScreen to my CustomDrawer LogoutButton?

Ganzo
  • 198
  • 1
  • 3
  • 16

0 Answers0