My son is 3 years 11 months old.  He's been potty trained for about 10 months now.  Things were just fine early on, he would go potty when we asked him to with no complaint.  For the last few months though, every single time we ask him to go potty he complains.  He complains even when he clearly needs to go and knows he needs to go (dancing around, etc.).  On good days, he'll whine a lot but end up going to the bathroom about the third time we ask him.  On bad days, he absolutely melts down and won't go to the bathroom for many minutes.

Once in the bathroom, he usually takes forever.  After he pees, he often just stands around in the bathroom doing nothing in particular.  Virtually every time, we have to go in to ask him to flush the toilet and wash his hands and just generally get on with his life.

He has consistent potty times that he understands by now: after waking up, he hugs everyone and then has to go potty.  Before we go out somewhere, he has to go potty.  And then obviously before bed he goes potty (this one is often a double-fight, since he also fights going to bed sometimes but not as bad as he fights going to the bathroom).

If my son has a very urgent need to go potty (like, about to pee or poop himself), he usually goes to the bathroom by himself without any asks from us.  But he doesn't always, and so we still ask him to go to the bathroom to avoid frequent accidents.

How can I help my son not fight us to go to the bathroom?