The Dart compiler has many modes, but one of them is to run in a Dart Virtual Machine (VM), so the build model for Dart is closer to that of Java than C or C++.
There are no .o files, or .a files, or .lib's, .dlls, or .so's that you have to deal with, only libraries and packages, and those are composed only of source code that is parsed, compiled and "Just In Time" optimized on demand at runtime when Dart is running in a VM.
When Dart is run in an "Ahead of Time" (AOT) compilation mode, it gets parsed, compiled and optimized at compile time. In AOT mode, the compiler can generate a "snapshot", which is akin to a dynamic library or executable that the runtime loads when it runs, which is about the only build product that gets physically manifested on disk (I'm simplifying this a bit: there are .dill (yes, with an "i") intermediate files, but you don't generally need to create or care about those).
When being converted to JavaScript to run in a browser, it gets parsed, optimized, and compiled into JavaScript, and the JavaScript JIT VM takes care of more optimization.
I know is seems odd to go straight from source to executable, but in regular usage you basically don't need to care about any intermediate forms for the language: the Dart runtime/compiler should handle it for you. How you build/run Dart code depends a lot on your use case for it. For Flutter apps, you shouldn't need to care more than telling the flutter tool where to find the entry point .dart file (main.dart), and where to put the built application.
It sounds like your main roadblock of splitting up files has more to do with structuring of your source code directories and importing other files into your main.dart, as Michael pointed out.
You probably just need to add something like
import 'my_other_file.dart';
in your main.dart (assuming the files are next to each other in the same directory).
I'd suggest looking at some more concrete examples, like maybe starting with using flutter create to make a "hello world" that you can look at.
-Greg.