When you have been with someone for a good amount of time, it is hard to see life without them. Not that you think you won't be able to live without them, it's just that you don't want to. But sometimes the person you saw yourself with for your "happily ever after" it is not the same one that is standing in front of you now.
When you first started dating, it was sweaty palms and nervous giggles. He picked you up every time you went out together and a text message from him could leave a smile on your face for hours. You stayed together for a while and the nervous giggles disappeared, but the way he made you feel when he walked into the room did not and this is why you thought "this is it". You were unbelievably happy and could not imagine never feeling that way with the person that made you feel different than all the others.
But then life happened. Schedules got busier, the relationship got messy, and the future you want is clearly disappearing. Your tears when you argue don't affect him anymore and the words you thought he would never say to you, he is saying right now. But you continue to take it because you love him and you can't imagine going through something like this without there being a good reason...
For so long you up focused on putting someone else first, it is time to do that for yourself. Even though it will be one of the hardest things for you to do, let him go. You have voiced your opinions, you have clearly stated what you needed from the relationship, you had given all the help and tools you could possibly have in order to help this other person want to prosper with you but something is still off. You can't make someone want to try for you and it is miserable if you do. Stop letting someone else hinder your happiness. If you wanted to be the one for you, he would be trying by now.
Of course this is all easier said than done because you love him so you see the good in him. You see his potential how happy he once made you, which makes it harder to see that the way he is treating you now is not right. But you should not feel second-best when you are with someone. You should not have to prove you are worth the time of another individual. You are worthy and wonderful and you should not have to suffer simply because you know he was once great to you so you hope he will see how he should be great to you now. Sometimes people change without realizing it, or maybe they just have not grown up as quick as you. So let him go.
Maybe in time he will find himself and realize you were the one that got away and will try his best to keep you next time, or maybe he will realize things he did wrong with you and use that as notes for the next relationship. The idea sucks, but you will do the same. All past relationships are a learning experience. It is hard to label someone you love so dearly as that, but when you find the right person you will understand. Stay focused on what you want and the rest will follow.