Lerp doesn't work

I did a timer that counts from 3 to 0, in seconds. When it gets to zero, i want a black screen to appear and then disappear, like a flash, but not at once.
I tried using lerp, but when the timer hits 0 the image just become black, and doesn’t go invisible with the lerp.
Here’s what I’m doing:

using System.Collections;

public class timer : MonoBehaviour
{
    public float timeRemaining;
    public Image blackScreen;
    public float flashSpeed = 5f;
    public Color flashColor = new Color(1f, 1f, 1f, 1f);

    Text text;

    void Start()
    {
        text = GetComponent<Text>();
        InvokeRepeating("decreaseTimeRemaining", 1, 1);
        blackScreen.color = Color.clear;
    }

    void Update()
    {
        if (timeRemaining <= 0)
        {
            text.text = "lel";
            blackScreen.color = Color.Lerp(flashColor, Color.clear, flashSpeed * Time.deltaTime);
        }
        if (timeRemaining > 0)
        {
            text.text = timeRemaining + "";
        }

    }

    void decreaseTimeRemaining()
    {
        timeRemaining--;
    }
}

This script is attached to the Text (Timer). The black screen is an image. Both timer and balckscreen are children of the HUDCanvas.

blackScreen.color = Color.Lerp(flashColor, Color.clear, flashSpeed * Time.deltaTime);

Is probably your problem. flashSpeed * Time.deltaTime is going to be a value really close to 0, so the color Lerp will return will be flashColor.

If you went

if ((int)timeRemaining == 0)
      blackScreen.color = flashColor;
if (timeRemaining <= 0)
      blackScreen.color = Color.Lerp(blackScreen.color, Color.clear, flashSpeed * Time.deltaTime);

You should observe your effect. Granted not easy to control.

I would recommend you check out Tweening sometime later (HoTween, iTween etc.). They’re libraries that let you do everything you’ve done in this class in one line of code.