1. Para começar a lógica do check, nós vamos começar modificando a função de check, que está dentro de “EditHabit”. “Src → Components → Home → EditHabit → index.jsx”

  2. Nós vamos primeiro excluir o console e adicionar uma verificação, fazendo com que se o habitCheck for igual a 0, a gente comece usar o código.

    // ... Outros códigos
    
    function handleCheck() {
      if (habitCheck === 0) {
      }
    }
    
    // ... Outros códigos
    
  3. Agora vamos criar dois estados, o primeiro será um para checar se o hábito está ou não checado, que pode começar vazio. O outro será a imagem de check do hábito, ele vai começar como o da mente e vamos mudar de acordo com o hábito.

    import React, { useState } from "react";
    
    // ... Outros códigos
    
    export default function EditHabit({ habit, checkColor }) {
      const navigation = useNavigation();
      const [habitCheck, setHabitCheck] = useState();
      const [checkImage, setCheckImage] = useState(
        require("../../../assets/icons/Mind.png")
      );
    
    	function handleEdit() {
        navigation.navigate("HabitPage", {
          create: false,
          habit,
        });
      }
    
      function handleCheck() {
        if (habitCheck === 0) {
        }
      }
    
    // ... Outros códigos
    
  4. Agora nós iremos dentro do handleCheck mudar o “habitCheck” de vazio para 1, que é igual a “true”. Nós iremos colocar com números, pois o nosso boolean do SQLite interpreta assim, como 1 e 0. E usaremos esse número para mandar para o banco.

    // ... Outros códigos
    
    export default function EditHabit({ habit, checkColor }) {
      const navigation = useNavigation();
      const [habitCheck, setHabitCheck] = useState();
      const [checkImage, setCheckImage] = useState(
        require("../../../assets/icons/Mind.png")
      );
    
    	function handleEdit() {
        navigation.navigate("HabitPage", {
          create: false,
          habit,
        });
      }
    
      function handleCheck() {
        if (habitCheck === 0) {
    			setHabitCheck(1);
        }
      }
    
    // ... Outros códigos
    
  5. Com isso feito vamos modificar o código e a imagem com renderização condicional. Iremos começar criando um useEffect, que vai modificar a nossa imagem de check. (Ainda na página EditHabit)

  6. Nós vamos primeiro colocar o hábito como checado ou não, se ele estiver, nós vamos marcar como sim, e caso ele não esteja, ficará 0. Depois nós iremos ver qual é a área que está vindo, e dependendo da área nós vamos modificar a imagem dentro de “checkImage”

    import React, { useEffect, useState } from "react";
    
    // ... Outros códigos
    
    export default function EditHabit({ habit, checkColor }) {
      const navigation = useNavigation();
      const [habitCheck, setHabitCheck] = useState();
      const [checkImage, setCheckImage] = useState(
        require("../../../assets/icons/Mind.png")
      );
    
    	function handleEdit() {
        navigation.navigate("HabitPage", {
          create: false,
          habit,
        });
      }
    
      function handleCheck() {
        if (habitCheck === 0) {
    			setHabitCheck(1);
        }
      }
    
    	useEffect(() => {
        setHabitCheck(habit?.habitIsChecked);
        if (habit?.habitArea === "Financeiro") {
          setCheckImage(require("../../../assets/icons/Money.png"));
        }
        if (habit?.habitArea === "Corpo") {
          setCheckImage(require("../../../assets/icons/Body.png"));
        }
        if (habit?.habitArea === "Humor") {
          setCheckImage(require("../../../assets/icons/Fun.png"));
        }
      }, []);
    
    // ... Outros códigos
    
  7. Agora, nós iremos fazer uma renderização condicional no botão de acordo com o nosso “habitCheck”. Se ele for 0, nós iremos mostrar o botão de check padrão, caso seja 1, iremos mostrar um que será a imagem, e o usuário não vai poder desmarcar, pois o botão de check mexe com toda a nossa aplicação (Barra de progresso, imagens e banco de dados).

    import { Text, TouchableOpacity, StyleSheet, View, Image } from "react-native";
    
    // ... Outros códigos
    
    return (
      <TouchableOpacity
        activeOpacity={0.9}
        style={styles.button}
        onPress={handleEdit}
      >
        <View style={styles.habitText}>
          <Text style={styles.habitTitle}>{habitName}</Text>
          <Text style={styles.habitFrequency}>{textNotification}</Text>
        </View>
        {habitCheck === 0 ? (
          <TouchableOpacity
            style={[styles.check, { borderColor: checkColor }]}
            onPress={handleCheck}
          />
        ) : (
          <TouchableOpacity onPress={handleCheck}>
            <Image source={checkImage} style={styles.checked} />
          </TouchableOpacity>
        )}
       </TouchableOpacity>
      );
    }
    
    const styles = StyleSheet.create({
      button: {
        backgroundColor: "#151515",
        borderRadius: 5,
        width: 320,
        marginVertical: 10,
        paddingVertical: 10,
        paddingRight: 20,
        paddingLeft: 10,
        flexDirection: "row",
        alignItems: "center",
        justifyContent: "space-between",
      },
      habitTitle: {
        color: "white",
        fontWeight: "bold",
        paddingRight: 30,
      },
      habitFrequency: {
        color: "white",
      },
      check: {
        width: 25,
        height: 25,
        borderWidth: 1,
        borderRadius: 12,
      },
      checked: {
        width: 25,
        height: 25,
      },
    });
    
  8. Ao fazermos isso podemos clicar no botão e marcar o hábito como checado, isso será temporário, pois ainda não fizemos a verificação no banco de dados, mas já terá efeito visual.