Performance of RegExp vs Rune Loop
I don't know Dart, but I haven't had any problems with Javascript regular expression speed, so I don't see why it would be a problem with Dart.

If you format strings are long -- which is probably unlikely -- then scanning the whole string once for each substitution string is not ideal. It's also buggy. Consider the calls:

formatStringListRegExp(['{0} {1}', '{1}', 'foo']) 
formatStringListRegExp(['{0} {1}', 'foo', '{0}'])


So what I'd do is this (all error checking removed for brevity):

String formatStringListRegExp(List&lt;String&gt; args)
{
  return args[0].replaceAllMapped(new RegExp(r'{(\d+)}'),
                                  (Match m) =&gt; args[int.parse(m[1])+1])
}