How to make timer wait before resetting?

So I want to make a ball turn green (to indicate a power up in size) at a random time for a couple of seconds, and then return to its white color. Right now I have it set up so that the ball turns green at interval between 4 and 8 seconds, but it only flashes green for a split second because it resets the timer. Is there a way to make the timer wait? How do I go about this? Here’s my code:

 public float speed = 10f;
    public int scoreValue = 1;

    public bool canPowerUpSize;
    public float timeBeforeNextSizePowerUp;
    public float powerUpSizeTimer = 0f;
    public float powerUpSizeDuration = 4f;
    public float sizeMinTime = 4f;
    public float sizeMaxTime = 8f;

    public float timer = 0f;

    void Start()
    {
        GetComponent<Rigidbody>().velocity = new Vector3(speed * 1, speed * 1, 0f);
        timer = 0f;
        powerUpSizeTimer = 0f;
    }

    void Update()
    {
        
        if (canPowerUpSize == true)
        {
            timeBeforeNextSizePowerUp = Random.Range(sizeMinTime, sizeMaxTime);
            gameObject.GetComponent<Renderer>().material.color = Color.white;
            powerUpSizeTimer = 0f;
            canPowerUpSize = false;
        }
        else
        {
            powerUpSizeTimer += Time.deltaTime;
            if (powerUpSizeTimer >= timeBeforeNextSizePowerUp)
            {
                canPowerUpSize = true;
                gameObject.GetComponent<Renderer>().material.color = Color.green;
            }
        }

    }

Good day,

You have the Invoke method, which allow to invoke a method in the same script in X seconds

void Update()
{
 if(something)
   {
     Invoke ("TheMethodIWant", 2.5f);
   }
 }

void TheMethodIWant()
  {
   do something;
  }

Byee!!!