A cross-platform Dart package for retrieving the local machine's hostname on major desktop and mobile platforms.
This project is a minimal, cross-platform demonstration of how to use Dart's build hooks, with code assets and dart:ffi to call a simple function from a system API. This project uses gethostname from the system APIs. Note that Windows has a different system API than the Unix-based systems.
The build hook (hook/build.dart) declares how the system APIs should be called. On Unix-systems the native code should already be loaded into the process, and on Windows the system API is available in a .dll which is available on every Windows machine.
The Dart FFI bindings to the C code are generated by tool/ffigen.dart. FFIgen generates Dart FFI bindings from src/unix.h and src/windows.h into lib/src/third_party/unix.dart and lib/src/third_party/windows.dart. Note that the system APIs for Windows are not available on Unix and vice versa. Hence, tool/ffigen.dart only generates the bindings it can. If extra system APIs are added, FFIgen will need to be re-run on multiple machines. This is expected with cross-platform system APIs that differ on different platforms.
The Dart code in lib/src/host_name.dart uses the generated FFI bindings to provide a Dart API (not exposing any C types).