Flutterで「Unhandled Exception: type 'String' is not a subtype of type 'int'」エラーが表示されたときの解決方法
投稿日 2024年09月02日 更新日 2024年09月07日
Flutter
エラー解決
Flutter開発中に「Unhandled Exception: type 'String' is not a subtype of type 'int'」というエラーに遭遇した経験はありませんか?このエラーは、期待される整数型(int)の代わりに文字列型(String)が使用されている場合に発生します。本記事では、このエラーの原因と具体的な解決方法について詳しく解説します。
エラーの原因
このエラーは主に以下の状況で発生します:
1. JSONデータをパースする際に、整数値が文字列として渡されている
2. テキスト入力フィールドから取得した値を直接整数として扱おうとしている
3. APIレスポンスで期待される整数値が文字列として返ってきている
解決方法
1. 型変換を行う
最も簡単な解決方法は、文字列を整数に変換することです。Dartでは`int.parse()`メソッドを使用できます。
String stringValue = "123";
int intValue = int.parse(stringValue);
ただし、変換できない文字列の場合は`FormatException`が発生するので注意が必要です。
2. null安全性を考慮した変換
null安全性を考慮する場合は、`int.tryParse()`メソッドを使用すると良いでしょう。
String? stringValue = "123";
int? intValue = int.tryParse(stringValue ?? "");
このメソッドは変換できない場合に`null`を返すため、より安全に処理を行えます。
3. JSONデコード時の対応
JSONデータを扱う際は、`Map`型を使用し、適切に型変換を行います。
Map<String, dynamic> json = jsonDecode(jsonString);
int id = json['id'] is String ? int.parse(json['id']) : json['id'];
4. フォームデータの処理
テキスト入力フィールドからの値を処理する場合は、以下のように対応します:
TextEditingController _controller = TextEditingController();
// 使用時
int? value = int.tryParse(_controller.text);
if (value != null) {
// 整数値として使用
} else {
// エラー処理
}
エラー防止のためのベストプラクティス
1. 型アノテーションを適切に使用し、期待される型を明示する
2. nullableな値を扱う際は、null安全性を考慮した処理を行う
3. APIレスポンスの型を事前に確認し、必要に応じて型変換を行う
4. ユーザー入力を扱う際は、常にバリデーションと適切な型変換を行う
まとめ
「type 'String' is not a subtype of type 'int'」エラーは、適切な型変換と慎重なデータ処理によって回避できます。本記事で紹介した方法を参考に、エラーのない安定したFlutterアプリケーションの開発を目指しましょう。型の扱いに注意を払うことで、より堅牢なコードを書くことができ、長期的にはメンテナンス性の高いアプリケーションを構築できます。
関連記事

新着記事
5
6
7
関連記事
5
6
7


60秒で完了