At the bare minimum, you need to use the native widgets on each OS.
It's baffling to me that Flutter didn't even learn this lesson from 20 years of agony with Swing.
Flutter can do the same. There is not much difference, except that Flutter strives to do the unique part better.
On the Windows desktop your application must be coherent with other applications, since they share a big screen, or rather a workspace.
Either way you want to adhere to the design language of the OS, because it tends to work better than what you can come up with, and also provides familiarity. On Android you don't have to use the prebuilt widgets to adhere to the material design.
Flutter also comes with widgets that look and feel very similar to the Android and iOS ones, so you don't have to reinvent the whole wheel.
It can be made to look quite well, but yes the defaults are not the best and it requires graphics programming knowledge.