Not enough specifications. Depending of what you need to use it for, it may work, or it may not.
What is the destination of that circuit?
As shown there, it is a switched on/off circuit, there is no constant current. If the load is OK with that, then go on, but if the load is sensitive and can not stand the max current, than a new design is needed, with the MOSFET working in the linear regime.
The box named "Circuit" can be a simple resistor. There are internal protection diodes on the microcontroller pins.
About the amplification for ADC, apart from the default 5V Vref for the ADC, most of the Arduino type of boards have 1.1V internal reference, and also is possible to have an external reference voltage smaller than 1.1V, so an amplifier might be avoided. Also, there is the oversampling trick, in order to increase the resolution of the ADC. Again, depends of the precision and the speed specifications (that are missing from the initial description of your circuit) if there is enough time to do that, or not.
I did something very similar recently, a constant current discharger for AA batteries, in order to measure how much energy they really store. Didn't used PWM, implemented a PDM instead (Pulse Density Modulation), because I needed adjustable resolution much bigger than an 8 bits PWM. Used this technique for PDM:
https://hackaday.io/project/6356-delta-sigma-versus-pwm and implemented it with interrupts on an Arduino nano.
Making a digital control loop with a microcontroller (to keep your current constant) is a very complex task. Sometimes it might not even be possible, depending on how good and how fast the control loop needs to stabilize the load current.
You didn't say the range of the current, and how fast should the whole loop stabilize. Those are very important for digital control. An analog current control loop will be much simpler to design, and more robust.