There is an official video by the Flutter team about extension methods now.

## Static extension members

Here is an intuitive example of how extension methods work:

```
extension FancyNum on num {
num plus(num other) => this + other;
num times(num other) => this * other;
}
```

I simply extend `num`

here and add methods to the class. This could be used like this:

```
print(5.plus(3)); // Equal to "5 + 3".
print(5.times(8)); // Equal to "5 * 8".
print(2.plus(1).times(3)); // Equal to "(2 + 1) * 3".
```

Note that the name `FancyNum`

is optional and the following is valid too:

```
extension on num {}
```

When you use your extension in another file, you **must** give it a name.

The extension above will make use of implicit extension member invocations as you do not have to explicitly declare your `num`

to be a `FancyNum`

.

You can also explicitly declare your extension, but this is not needed in most cases:

```
print(FancyNum(1).plus(2));
```

## Flex childCount

The desired behavior from the question can be achieved by extending `Row`

or `Column`

, or even better: you can extend `Flex`

, which is the super class of `Row`

*and* `Column`

:

```
extension ExtendedFlex on Flex {
int get childCount => this.children.length;
}
```

`this.`

can also be omitted if `children`

is not defined in the current lexical scope of `childCount`

, which means that `=> children.length`

is also valid.

With this *static extension* of `Flex`

imported, you can call it on any `Flex`

, i.e. also on every `Row`

and `Column`

.

`Row(children: const [Text('one'), Text('two')]).childCount`

will evaluate to `2`

.