First: every very young child I've worked with hits this point at some time or another. We should even name this phase: "Guess What I'm Going To Eat Today".
You will always guess wrong. Just know this now so you don't feel bad about it.
This is often about toddlers expressing their autonomy and digging their heels in, exerting their personality. And we adults, myself included, get emotionally dragged in at times when it's around food.
First, I'm going to say this very mean thing and I know it's going to be hard, but here it is: Stop giving him choices. Decide for him. Three things on the plate. Let him choose from there.
Do not grab substitutions. I always suggest serving two things he would readily eat and one 'wild card' food. If he liked mac-n-cheese three days ago, you know he ate it and didn't die. Serve that with apple slices and a veg. (This is just an example, by the way.) And then let him do what he is going to do.
Here's my thinking on it.... at this phase, it's all hit or miss. Kids at this age are really not good at following through on their choices because they are just learning how to make choices. So when we ask them beforehand and do it verbally, they think "Oh, she doesn't know what I should eat" instead of "she's asking me my preference". I know this sounds silly, but this is how toddlers think--"Why is this adult asking me? Don't *they* know?" And then, because they are little people and very silly and inexperienced at making decisions, they are going to drive us out of our wits by changing their mind or not being happy with their decision.
So-- don't let them make the decision. You decide, and then follow through.
One strong hint I would give is to avoid packaged foods as much as possible because toddlers get fixated with packaging and then they will "only" want the prepackaged milk, juice, single serving yogurt, the single cheese slice.... and then they'll take two bites out of it and then at the next meal... they'll want to open up a whole new one. And you will be pissed off.
As you can tell, I've done this phase with a lot of kids and don't have a whole lot of good to say about it. :) But I do have a sense of humor.
Remember to stock your cupboard with healthy foods, to buy the large carton/block of cheese, etc. and serve it in a dish or on a plate, and then, just stick to what you are serving. No running around serving substitutions. Unless your child has a serious sensory issue, they are not going to starve. They will eventually start to eat veggies again.
My son went through this and he is a great veggie eater. He's five now and had been doing great on it since about four. Please give it some time, give yourself a break and let this journey be on him to explore-- or not. All you can do is offer the good food, the rest is up to him. (And yes, stop giving sweets. The longer you get away from it, the more their sweet tooth subsides.)