blob: 8d1d385f5f16864f50caec6db84bdc37fe6ea197 [file] [log] [blame] [view]
# Dart
## Overview
Dart artifacts are not built the same way in Fuchsia as they are on other
Instead of relying on [`pub`][pub] to manage dependencies, sources of
third-party packages we depend on are checked into the tree under
This is to ensure we use consistent versions of our dependencies across multiple
Likewise, no build output is placed in the source tree as everything goes under
`out/`. That includes `.packages` files which are generated as part of the build
based on a target's dependency.
## Exiting Dart programs
The Dart runner for Fuchsia does not
monitor the FIDL channels opened by Dart programs and as a result does not end
the program normally, but rather waits for the explict call to `fuchsia.exit()`
to indicate the program should be ended.
Note: Calling exit() from dart:io will result in an exception since components
are not allowed to call this method since it would shutdown the dart_runner process.
import 'package:fuchsia/fuchsia.dart' as fuchsia;
void main(List<String> args) {
print('Hello Dart!');
## Targets
There are five gn targets for building Dart:
- [`dart_library`][target-library] defines a library that can be used by other
Dart targets;
- [`dart_app`][target-app] defines a Dart executable for Fuchsia;
- [`dart_tool`][target-tool] defines a Dart tool for the host;
- [`flutter_app`][target-flutter] defines a [Flutter][flutter] application;
- [`dart_test`][target-test] defines a group of test.
See the definitions of each of these targets for how to use them.
## Package layout
We use a layout very similar to the [standard layout][package-layout].
|-- pubspec.yaml # Empty, used as a marker [mandatory]
|-- # Contains all targets
|-- analysis_options.yaml # Analysis configuration [mandatory]
|-- lib/ # dart_library contents
|-- bin/ # dart_binary's (target) or dart_tool's (host)
|-- test/ # dart_test contents
## Going further
- [Running analysis](
- [Style](
- [Testing](
- [Logging](
- [Using FIDL](
- [Managing third_party dependencies](
- [IDEs](
[pub]: "Pub"
[package-layout]: "Package layout"
[target-library]: /build/dart/dart_library.gni "dart_library target"
[target-app]: "dart_app target"
[target-tool]: /build/dart/dart_tool.gni "dart_tool target"
[target-flutter]: "flutter_app target"
[target-test]: /build/dart/dart.gni "dart_test target"
[flutter]: "Flutter"