calling enum State to change correctly but it is not changing

I did everything correctly but getting this error in my shop script:
public class shop : MonoBehaviour
{

  public TMPro.TextMeshProUGUI scoreText;
  public GameObject Item1;
  public GameObject Item2;
  public GameObject Item3;
  public GameObject Item4;
  public TMPro.TextMeshProUGUI notenough;
  public TMPro.TextMeshProUGUI notenough1;
  public TMPro.TextMeshProUGUI notenough2;
  public TMPro.TextMeshProUGUI notenough3;
  public GameObject buyButton;
  public GameObject buyButton1;
  public GameObject buyButton2;
  public GameObject buyButton3;
  public GameObject equipButton;
  public GameObject equipButton1;
  public GameObject equipButton2;
  public GameObject equipButton3;
  public float sec = 14f;
  public static bool isSold = false;
  public static bool isSold1 = false;
  public static bool isSold2 = false;
  public static bool isSold3 = false;
  /*public ButtonState state;
  public ButtonState1 state1;
  public ButtonState2 state2;
  public ButtonState3 state3;*/
  public LoadEveryThing someName;

  private Dictionary<GameObject, float> ItemPrices;


void Start ()
{
    scoreText.text = "Score : " + ((int)PlayerPrefs.GetFloat ("Highscore")).ToString();

  ItemPrices = new Dictionary<GameObject, float>()
  {
   { Item1, 50f },
   { Item2, 80f },
   {Item3, 3500f},
   { Item4, 5000f },
   };
   notenough.enabled = false;
   notenough1.enabled = false;
   notenough2.enabled = false;
   notenough3.enabled = false;
   
}

public void PurchaseItem(GameObject Item)

{
foreach(KeyValuePair<GameObject, float> item in ItemPrices)
{
if (item.Key == Item)
{

         float price = item.Value;
         float val = PlayerPrefs.GetFloat ("Highscore"); 
         if(val >= price)
         {
         val -= item.Value;
          PlayerPrefs.SetFloat("Highscore", val);
          scoreText.text = "Score : " + ((int)PlayerPrefs.GetFloat ("Highscore")).ToString();
              buyButton.SetActive(false);
              equipButton.SetActive(true);
              isSold = true;
              someName.state = ButtonState.Equip;
             // Take away the cost of the item from the player's currency
             //PlayerPrefs.GetFloat ("Highscore") -= item.Value;
         }
         else
         {
             Debug.Log("not enough money");
              notenough.enabled = true;
              notenough1.enabled = true;
              notenough2.enabled = true;
              notenough3.enabled = true;
             Invoke("noen", 2);
             isSold = false;
             someName.state = ButtonState.Buy;
         }
        }     
   }

}

public void PurchaseItem1(GameObject Item)

{
foreach(KeyValuePair<GameObject, float> item in ItemPrices)
{
if (item.Key == Item)
{

         float price = item.Value;
         float val = PlayerPrefs.GetFloat ("Highscore"); 
         if(val >= price)
         {
         val -= item.Value;
          PlayerPrefs.SetFloat("Highscore", val);
          scoreText.text = "Score : " + ((int)PlayerPrefs.GetFloat ("Highscore")).ToString();
              buyButton1.SetActive(false);
              equipButton1.SetActive(true);
              isSold1 = true;
              
             // Take away the cost of the item from the player's currency
             //PlayerPrefs.GetFloat ("Highscore") -= item.Value;
         }
         else
         {
             Debug.Log("not enough money");
              notenough.enabled = true;
              notenough1.enabled = true;
              notenough2.enabled = true;
              notenough3.enabled = true;
             Invoke("noen", 2);
             isSold1 = false;
         }
        }     
   }

}

public void PurchaseItem2(GameObject Item)

{
foreach(KeyValuePair<GameObject, float> item in ItemPrices)
{
if (item.Key == Item)
{

         float price = item.Value;
         float val = PlayerPrefs.GetFloat ("Highscore"); 
         if(val >= price)
         {
         val -= item.Value;
          PlayerPrefs.SetFloat("Highscore", val);
          scoreText.text = "Score : " + ((int)PlayerPrefs.GetFloat ("Highscore")).ToString();
              buyButton2.SetActive(false);
              equipButton2.SetActive(true);
              isSold2 = true;
             
             // Take away the cost of the item from the player's currency
             //PlayerPrefs.GetFloat ("Highscore") -= item.Value;
         }
         else
         {
             Debug.Log("not enough money");
              notenough.enabled = true;
              notenough1.enabled = true;
              notenough2.enabled = true;
              notenough3.enabled = true;
             Invoke("noen", 2);
             isSold2 = false;
         }
        }     
   }

}

public void PurchaseItem3(GameObject Item)

{
foreach(KeyValuePair<GameObject, float> item in ItemPrices)
{
if (item.Key == Item)
{

         float price = item.Value;
         float val = PlayerPrefs.GetFloat ("Highscore"); 
         if(val >= price)
         {
         val -= item.Value;
          PlayerPrefs.SetFloat("Highscore", val);
          scoreText.text = "Score : " + ((int)PlayerPrefs.GetFloat ("Highscore")).ToString();
           buyButton3.SetActive(false);
              equipButton3.SetActive(true);
              isSold3 = true;
              
             // Take away the cost of the item from the player's currency
             //PlayerPrefs.GetFloat ("Highscore") -= item.Value;
         }
         else
         {
             Debug.Log("not enough money");
              notenough.enabled = true;
              notenough1.enabled = true;
              notenough2.enabled = true;
              notenough3.enabled = true;
             Invoke("noen", 2);
             isSold3 = false;
         }
        }     
   }

}

/*public void buy()
{

  if (val >= price)
  {
    PurchaseItem();
  }
  else
  {
    
  }*/

public void noen()
{
notenough.enabled = false;
notenough1.enabled = false;
notenough2.enabled = false;
notenough3.enabled = false;

}

}
this is the loadeverthing script:

public class LoadEveryThing : MonoBehaviour
{
// Types of buttons
public GameObject BuyButton;
/* public GameObject BuyButton1;
public GameObject BuyButton2;
public GameObject BuyButton3;*/
public GameObject EquipButton;
/public GameObject EquipButton1;
public GameObject EquipButton2;
public GameObject EquipButton3;
/

 public ButtonState state;

  void Start()
 {
     // What file to read save data from
     string path = Application.persistentDataPath + "\\buttonstate.save";

     // Get data and set state to that data
     if (File.Exists(path))
     {
         string data = File.ReadAllText(path);
         
         if (Enum.TryParse(data, out ButtonState State))
             state = State;
     }

     // Copy button properties onto this button
     // depending on the state
     switch (state)
     {
         case ButtonState.Buy:
             SetButton(BuyButton);
             break;
         case ButtonState.Equip:
             SetButton(EquipButton);
             break;

     }

      
     /*if(shop.isSold == true)
     {
         state = ButtonState.Equip;
         Debug.Log("working");
     }
     else if(shop.isSold == false)
     {
         state = ButtonState.Buy;
         Debug.Log(" buy working");
     }*/

 }

 void Update()
 {
 }

 void SetButton(GameObject button)
 {
     // Set on-click method of button
     Button myButton = GetComponent<Button>();
     Button targetButton = button.GetComponent<Button>();

     myButton.onClick = targetButton.onClick;

     // Set text of button
     TMPro.TextMeshProUGUI myText = GetComponentInChildren<TMPro.TextMeshProUGUI>();
     TMPro.TextMeshProUGUI targetText = button.GetComponentInChildren<TMPro.TextMeshProUGUI>();

     myText.text = targetText.text;
 }

  /*public static void SetEquipButton()
 {
  
 }

 public static void SetBuyButton()
 {
     
 }*/

}

saveeveything script:

using UnityEngine;
using System.IO;

public class SaveEverything : MonoBehaviour
{
// What script to save
public LoadEveryThing MyButton;

 public void Save()
 {
     // What data to save
     string saveData = MyButton.state.ToString();
    

     // Where the data is stored
     string path = Application.persistentDataPath + "\\buttonstate.save";

     
      // Writes data to file
      if (File.Exists(path))
      {
         File.WriteAllText(path, saveData/*, saveData1, saveData2, saveData3, 5*/);
      }
      else
      {
         File.Create(path).Close();
         File.WriteAllText(path, saveData/*, saveData1, saveData2, saveData3, 5*/);
      }
}   

}

public enum ButtonState
{
Buy,
Equip
}

error I am getting:

NullReferenceException: Object reference not set to an instance of an object shop.PurchaseItem (UnityEngine.GameObject Item) (at Assets/scripts/shop.cs:78) UnityEngine.Events.InvokableCall1[T1].Invoke (T1 args0) (at <49f4e7e791cc4fffacd88f729e2b1e4c>:0)
UnityEngine.Events.CachedInvokableCall1[T].Invoke (System.Object[] args) (at <49f4e7e791cc4fffacd88f729e2b1e4c>:0) UnityEngine.Events.UnityEvent.Invoke () (at <49f4e7e791cc4fffacd88f729e2b1e4c>:0) UnityEngine.UI.Button.Press () (at C:/Users/anjaliP/Desktop/2020.1.3f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:68) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/Users/anjaliP/Desktop/2020.1.3f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:110) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/Users/anjaliP/Desktop/2020.1.3f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction1[T1] functor) (at C:/Users/anjaliP/Desktop/2020.1.3f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update() (at C:/Users/anjaliP/Desktop/2020.1.3f1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/EventSystem.cs:376)`

When setting any variable from another script:-

  1. The variable needs to be public or protected. The former is easier.
  2. You need to store a reference the game object containing the script. The syntax for which is public "Script name" "Script variable name";
  3. In order to set the variable:- "Script variable name"."Name of the variable you want to set";

In your case, you would need to:-

Create a instance of Load Every Thing using public LoadEveryThing someName; in the script in which you are setting state, and set it in the inspector.
Then type someName.state = ButtonState.Equip;