Dart エラー「Error: The argument type ‘List‘ can’t be assigned to the parameter type ‘Iterable‘.」が発生した場合の対処法

  • 作成日 2022.10.21
  • 更新日 2022.11.01
  • Dart
Dart エラー「Error: The argument type ‘List<xxx>‘ can’t be assigned to the parameter type ‘Iterable<xxx>‘.」が発生した場合の対処法

Dartで、エラー「Error: The argument type ‘List<xxx>’ can’t be assigned to the parameter type ‘Iterable<xxx>’.」が発生した場合の対処法を記述してます。リスト同士の結合時に、型が違う際に発生します。「dynamic」型についても少し記述してます。

環境

  • OS windows11 home
  • Dart 2.18.1

エラー全文

以下のコードを実行時に発生。

void main() {
  
  List<int> List1 = [ 1, 2, 3 ];
  List<String> List2 = [ 'aaa', 'bbb', 'ccc' ];

  List1.addAll(List2);
  
  print( List1 ); // [1, 2, 3, aaa, bbb]

}

エラー全文

Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<int>'.
 - 'List' is from 'dart:core'.
 - 'Iterable' is from 'dart:core'.
  List1.addAll(List2);

原因

「list」同士の方が違うため

対処法

動的な型宣言「dynamic」型を使用する

void main() {
  
  List<dynamic> List1 = [ 1, 2, 3 ];
  List<String> List2 = [ 'aaa', 'bbb', 'ccc' ];

  List1.addAll(List2);
  
  print( List1 ); // [1, 2, 3, aaa, bbb]

}

実行結果

「dynamic」型

通常は、型が異なる値を再代入するとエラーになりますが、

void main() {
  var name = 'hoge';
  name = 1; 

  print(name); 
  // Error: A value of type 'int' can't be assigned to a variable of type 'String'.
}

「dynamic」型の場合は、再代入できます。

void main() {
  dynamic name = 'hoge';
  name = 1; 

  print(name); 
  // 1
}

ただし型推論「var」も初期値を指定してなければエラーにならない

void main() {
  var name;
  name = 1; 
  name = 'hoge';

  print(name); // hoge

  name = 2; 

  print(name); // 2
}