Dart Code extends VS Code with support for the Dart programming language, and provides tools for effectively editing, refactoring, running, and reloading Flutter mobile apps, and AngularDart web apps.
Dart Code can be installed from the Visual Studio Code Marketplace. Open VS Code Quick Open (Ctrl+P
) and paste the following and press enter:
ext install dart-code
- Debug Dart command line apps
- Debug Flutter mobile apps
- Support for flutter
hot reload
(use the debuggerRestart
button) - Select from multiple devices for Flutter debugging (select from the status bar)
- Support for debugging "just my code" or SDK/libraries too (
dart.debugSdkLibraries
anddart.debugExternalLibraries
) - Automatically finds Dart and Flutter SDKs from
PATH
or workspace folders - Notification of new stable Dart SDK releases
- Syntax highlighting
- Code completion
- Snippets
- Realtime errors/warnings/TODOs reported in problems window and with squiggles
- Hovers/tooltip information
- Go to Definition
- Find References
- Code fixes/lightbulb
- Type hierarchy
- Rename refactoring
- Organize directives
- Sort members
- Flutter Doctor command
- Format document
- Support for format-on-save (
editor.formatOnSave
) - Support for format-on-type (
editor.formatOnType
) - Workspace-wide symbol search
- Automatic closing braces/quotes
- Document symbol list/search with highlighting
- Generation of analysis error reports for easy reporting to the Dart team
pub get
andpub upgrade
commands (and flutter equivilents)- Automatically run
pub get
whenpubspec.yaml
is saved - Supports strong mode and linting (configured in
analysis_options.yaml
or.analysis_options
) - Other references to symbol under cursor are highlighted
dart.allowAnalytics
: Whether to send analytics such as startup timings, frequency of use of features and analysis server crashes. Defaults totrue
.dart.closingLabels
: Whether to show annotations against constructor, method invocations and lists that span multiple lines. Defaults totrue
.dart.checkForSdkUpdates
: Whether to check you are using the latest version of the Dart SDK at startup. Defaults totrue
.dart.debugSdkLibraries
: Whether SDK libraries should be marked as debuggable. Defaults tofalse
.dart.debugExternalLibraries
: Whether libraries should be marked as debuggable. Defaults tofalse
.dart.flutterHotReloadOnSave
: Whether to automatically send a 'hot reload' request during a Flutter debug session when saving files. Defaults totrue
.dart.flutterSdkPath
: Override the detected Flutter SDK to allow you to run from another location.dart.insertArgumentPlaceholders
: Whether to insert argument placeholders during code completions. Defaults totrue
.dart.lineLength
: The maximum length of a line of code. This is used by the document formatter. Defaults to80
.dart.pubAdditionalArgs
: Additional args to pass topub get
andpub upgrade
commands (eg.--packages-dir
).dart.runPubGetOnPubspecChanges
: Whether to automatically runpub get
whenever pubspec.yaml is saved. Defaults totrue
.dart.promptToFetchPackages
: Whether to prompt to fetch packages when opening a project with out of date packages. Defaults totrue
.dart.sdkPath
: If the Dart SDK is not automatically found on your machine from yourPATH
you can enter the path to it here.dart.sdkPaths
: If you often switch between multiple Dart SDKs, setting this option to an array of Dart SDK folders or folders that contain multiple Dart SDKs in sub-folders will allow fast switching by clicking the Dart SDK version in the status bar.dart.showLintNames
: Whether to show the names of linter rules in the problems panel to make it easier to// ignore:
.dart.showTodos
: Whether to show TODOs in the Problems list. Defaults totrue
.
This extension reports some basic events and timings to help inform development decisions, such as:
- Extension load and analysis times
- Whether you have disabled some settings (such as showing TODOs in Problems Window or Closing Labels)
- Frequency of use of features like Hot Reload, Full Restart and Open Observatory
- Crashes in the Dart analysis server
These events will include your platform (Win/Linux/Mac) and also extension/SDK version numbers.
This can be disabled via the dart.allowAnalytics
setting.
Some colors in Dart Code can be customised using the workbench.colourCustomizations
section in settings. Supported colors are:
dart.closingLabels
- The color of the "closing label" annotations against constructor, method invocations and lists that span multiple lines
Code v1.20 gained the ability to keybind quickfixes. To do this you should edit your keybindings.json
file and include the ID of the refactor as found below. If the kind
for the keybind is set to just a segment of the ID (for example 'refactor.surround') then all actions sharing that prefix will appear in a filtered menu (or if only one, the action invoked immediately). You can control this behaviour with the apply
argument see docs.
The list of refactors comes from the Dart analysis server and therefore may change over time. Once this list is available somewhere centrally the readme will be updated to link there.
Note: These IDs are only provided by recent versions of the Dart analysis server and will not work with older v1 builds.
refactor.addPartDirective
- Add 'part' directiverefactor.addTypeAnnotation
- Add type annotationrefactor.assignToVariable
- Assign value to new local variablerefactor.convert.blockComment
- Convert to block documentation commentrefactor.convert.lineComment
- Convert to line documentation commentrefactor.convert.bodyToAsync
- Convert to async function bodyrefactor.convert.bodyToBlock
- Convert to block bodyrefactor.convert.bodyToExpression
- Convert to expression bodyrefactor.convert.forEachToForIndex
- Convert to for-index looprefactor.convert.getterToFinalField
- Convert to final fieldrefactor.convert.toGenericFunctionSyntax
- Convert into 'Function' syntaxrefactor.convert.finalFieldToGetter
- Convert to getterrefactor.convert.isNot
- Convert to is!refactor.convert.isNotEmpty
- Convert to 'isNotEmpty'refactor.convert.partOfToPartUri
- Convert to use a URIrefactor.convert.toDoubleQuotedString
- Convert to double quoted stringrefactor.convert.toConstructorFieldParameter
- Convert to field formal parameterrefactor.convert.toConstructorNormalParameter
- Convert to normal parameterrefactor.convert.toSingleQuotedString
- Convert to single quoted stringrefactor.encapsulateField
- Encapsulate fieldrefactor.exchangeOperands
- Exchange operandsrefactor.extractClass
- Extract class into filerefactor.flutter.convert.childToChildren
- Convert to children:refactor.flutter.convert.toStatefulWidget
- Convert to StatefulWidgetrefactor.flutter.move.down
- Move widget downrefactor.flutter.move.up
- Move widget uprefactor.flutter.removeWidget
- Remove widgetrefactor.flutter.swap.withChild
- Swap with childrefactor.flutter.swap.withParent
- Swap with parentrefactor.flutter.wrap.center
- Center widgetrefactor.flutter.wrap.column
- Wrap with Columnrefactor.flutter.wrap.generic
- Wrap with new widgetrefactor.flutter.wrap.padding
- Add paddingrefactor.flutter.wrap.row
- Wrap with Rowrefactor.addShowCombinator
- Add explicit 'show' combinatorrefactor.introduceLocalCast
- Introduce new local with tested typerefactor.invertIf
- Invert 'if' statementrefactor.joinWithInnerIf
- Join 'if' statement with inner 'if' statementrefactor.joinWithOuterIf
- Join 'if' statement with outer 'if' statementrefactor.joinVariableDeclaration
- Join variable declarationrefactor.removeTypeAnnotation
- Remove type annotationrefactor.convert.conditionalToIfElse
- Replace conditional with 'if-else'refactor.convert.ifElseToConditional
- Replace 'if-else' with conditional ('c ? x : y')refactor.splitIfConjunction
- Split && conditionrefactor.splitVariableDeclaration
- Split variable declarationrefactor.surround.block
- Surround with blockrefactor.surround.doWhile
- Surround with 'do-while'refactor.surround.forEach
- Surround with 'for'refactor.surround.forIn
- Surround with 'for-in'refactor.surround.if
- Surround with 'if'refactor.surround.tryCatch
- Surround with 'try-catch'refactor.surround.tryFinally
- Surround with 'try-finally'refactor.surround.while
- Surround with 'while'
For full release notes, see the changelog.