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アプリケーションの開発を目指しましょう。型の扱いに注意を払うことで、より堅牢なコードを書くことができ、長期的にはメンテナンス性の高いアプリケーションを構築できます。
Resumy AI監修者
監修者: RESUMY.AI編集部

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

監修者: RESUMY.AI編集部
Resumy AI監修者

ヨーロッパのテックハブであるロンドンにて、シニアデベロッパーとしてチームを率いた後、オンライン教育プラットフォームUdemyでモダン技術に関する講義を配信する「Daiz Academy」を設立。現在はAIテクノロジー企業 Chott, Inc.を運営しています。

AI職務経歴書作成サービス RESUMY.AIAI職務経歴書作成サービス RESUMY.AI
60秒で完了