Flutterアプリ開発中に「Unhandled Exception: FormatException: Invalid double」エラーに遭遇した経験はありませんか?このエラーは数値の変換に関連して発生することが多く、開発者を悩ませる厄介な問題です。本記事では、このエラーの原因と具体的な解決方法を詳しく解説します。
エラーの原因
「FormatException: Invalid double」エラーは、主に文字列を double 型に変換しようとしたときに、その文字列が有効な double 値として解釈できない場合に発生します。例えば:
- 空の文字列
- 数字以外の文字を含む文字列
- ロケールに応じた小数点の表記の違い
解決方法
1. null チェックの実施
データが null でないことを確認してから変換を行います。
String? value = '3.14';
double? result = value != null ? double.tryParse(value) : null;2. double.tryParse() の使用
`double.parse()` の代わりに `double.tryParse()` を使用することで、変換に失敗した場合に例外ではなく null を返すようになります。
String value = '3.14';
double? result = double.tryParse(value);
if (result != null) {
// 変換成功
} else {
// 変換失敗
}3. 入力値の検証
ユーザー入力を受け取る場合は、正規表現などを使用して入力値が有効な数値形式であることを事前に確認します。
bool isValidDouble(String value) {
return RegExp(r'^\d*\.?\d+$').hasMatch(value);
}4. ロケール対応
国際化対応が必要な場合は、`NumberFormat` クラスを使用して適切なロケールでの変換を行います。
import 'package:intl/intl.dart';
String value = '3,14'; // ヨーロッパ式の小数点表記
double result = NumberFormat.decimalPattern('fr_FR').parse(value) as double;5. エラーハンドリング
try-catch ブロックを使用して、エラーを適切に処理します。
try {
double result = double.parse(value);
} on FormatException catch (e) {
print('Invalid number format: $e');
}まとめ
「FormatException: Invalid double」エラーは、適切な入力値の検証とエラーハンドリングを実装することで回避できます。null 安全性を考慮し、`double.tryParse()` を活用することで、より堅牢なコードを書くことができます。また、国際化対応が必要な場合は、`NumberFormat` クラスの使用を検討してください。
これらの方法を適切に組み合わせることで、Flutterアプリケーションの安定性と信頼性を向上させることができます。エラー処理は面倒に感じるかもしれませんが、ユーザー体験を向上させるために不可欠な要素です。適切なエラーハンドリングを実装し、スムーズに動作するアプリケーションを提供しましょう。