結論
動きとしては下記のようになる。
final List<dynamic> foo = [1, 2.3];
final baz = foo as List<num>; // これはできない
final hoge = <String, dynamic>{'a': 'a'};
final fuga = hoge as Map<String, String>; // これもできない
final List<dynamic> foo = [1, 2.3];
final baz = foo.cast<num>(); // これはできる
final hoge = <String, dynamic>{'a': 'a'};
hoge.cast<String, String>(); // これもできる
Effective Dart
ただし下記に記載されているように、直接castメソッドを使うことは避けたほうが良い。
AVOID using cast().
DON’T use cast() when a nearby operation will do.
終わりに
Flutter触り始めたときにハマったので書きました。