28
votes

I want to use the new spread syntax in Dart.

I'm using Android Studio for Flutter development and I receive this error.

This requires the --spread-collections experiment to be enabled

ListView(children: [...listTiles, MyWidget()])

However, I didn't find anywhere where I could specify this option.

I couldn't even make it work on the command line. flutter --spread-collections run gives Could not find an option named "spread-collections"..

flutter --version
Flutter 1.3.8 • channel beta • https://github.com/flutter/flutter.git
Framework • revision e5b1ed7a7f (4 weeks ago) • 2019-03-06 14:23:37 -0800
Engine • revision f4951df193
Tools • Dart 2.2.1 (build 2.2.1-dev.0.0 571ea80e11)
9
You need to be on master branchRémi Rousselet
The experimental features are only on master branch. By default you are on stable branch. You can see channels using flutter channel. Read github.com/flutter/flutter/wiki/Flutter-build-release-channels for more info.Doc
if you still can't get it to work, this worked for me: stackoverflow.com/questions/59458433/…Matjaz Hirsman

9 Answers

24
votes

In my case, I have followed these two steps and It worked for me.

  1. run "flutter upgrade"

  2. changing the sdk in the environment in pubspec.yaml

    environment:
      sdk: ">=2.6.0 <3.0.0"
    
20
votes

You need to create an analysis_options.yaml file in the root of your flutter app and write something like

analyzer:
  enable-experiment:
    - spread-collections

Also make sure to switch to the correct channel where the new feature is included eg (dev, beta or master)

flutter channel dev

And also make sure you have a recent enough version of flutter

flutter upgrade

Ensure you are on the right version of flutter and dart that allows that feature by running

flutter --version

you may also have to manually change your pubspec.yaml file to specify the correct dart sdk (if so rerun flutter upgrade)

environment:
  sdk: ">=2.10.0-0 <3.0.0"
14
votes

With the new version of flutter it became an error - but it can easily be fixed by updating the sdk version:

environment:
  sdk: ">=2.7.0 <3.0.0" 

Just don't forget to restart VisualStudio Code or whatever IDE you're using.

4
votes

You are running an old version of flutter

Spreading is available starting at flutter 1.5 and dart 2.3

Run:

flutter upgrade
3
votes

Here's some fix you can try out :

1) Keep the analysis_options.yaml in your root folder with this code:

analyzer:
  enable-experiment:
    - control-flow-collections

2) Don't use brackets {} in between your for loops Ex:

<Widget>[
  for (final category in categories) 
    CategoryWidget(category: category)
],

3) Important step which is probably why it's not working for you: Change your Dart version constraint in the pubspec.yml file in your root folder to 2.5.2 or above.

environment:
  sdk: ">=2.5.2 <3.0.0"
3
votes

The current answer that is working in the latest Flutter 1.17.1 or Dart 2.8.2

Create a analysis_options.yaml in the directory of the pubspec.yaml file

Write this code inside the file:

include: package:pedantic/analysis_options.1.8.0.yaml 

linter:
  rules:
    - prefer_spread_collections

For more information head to this documentation

0
votes

Something completely different yet the same. Our code was built in Flutter v1.12.13hotfix9. when we did a new installation with flutter 1.17.1 the build broke with a similar error. It seems that the new release of Flutter is not backwards compatible on certain parts. We fixed the problem by installing the older version.

0
votes

Run this command from your project's root directory:

dart --enable-experiment=spread-collections lib
0
votes

After updating the environment in pubspec.yml don't forget restart your IDE

environment:
  sdk: ">=2.7.2 <3.0.0"