How to stop Dart's .forEach()?

You can also use a for/in, which implicitly uses the iterator aptly demonstrated in the other answer:

List data = [1,2,3];

for(final i in data){
  print('$i');
  if (i == 2){
    break;
  }
}

It is also possible to implement your example using forEach() and takeWhile().

var data = [1, 2, 3];
data.takeWhile((val) => val != 2).forEach(print);