Flutterでアプリを開発していると、時々予期せぬエラーに遭遇することがあります。その中でも「Unhandled Exception: type 'int' is not a subtype of type 'double'」というエラーは、特に数値を扱う際によく発生します。このエラーの原因と解決方法について、詳しく説明していきます。

エラーの原因

このエラーは、主に整数型(int)の値を小数点型(double)として扱おうとした際に発生します。Dartは強い型付け言語であり、異なる数値型の間で暗黙の型変換を行わないため、このような問題が起こります。

解決方法

1. 明示的な型変換

最も簡単な解決方法は、int型の値をdouble型に明示的に変換することです。

```dart

int intValue = 5;

double doubleValue = intValue.toDouble();

```

2. 数値リテラルの修正

数値を直接記述する際、小数点を追加することでdouble型として認識されます。

```dart

// 誤り

double value = 5;

// 正しい

double value = 5.0;

```

3. 除算演算子の使用

整数同士の除算を行う際、`/`演算子を使用すると結果が自動的にdouble型になります。

```dart

int a = 10;

int b = 3;

double result = a / b; // 3.3333...

```

4. パースする際の注意

文字列から数値に変換する際は、適切なメソッドを使用しましょう。

```dart

String numString = "5.5";

double numDouble = double.parse(numString);

```

5. ウィジェットのプロパティに注意

Flutterのウィジェットには、doubleを期待するプロパティがあります。これらに整数値を渡す際は注意が必要です。

```dart

// 誤り

Container(width: 100)

// 正しい

Container(width: 100.0)

```

注意点

  • 可能な限り、一貫した数値型の使用を心がけましょう。
  • 型アノテーションを適切に使用し、意図しない型の混在を防ぎましょう。
  • 外部データを扱う際は、常に適切な型変換を行うようにしましょう。

まとめ

「Unhandled Exception: type 'int' is not a subtype of type 'double'」エラーは、適切な型変換や正しい数値リテラルの使用により解決できます。Dartの型システムを理解し、慎重に数値を扱うことで、このようなエラーを未然に防ぐことができます。エラーメッセージが表示された際は、まず使用している数値の型を確認し、必要に応じて適切な変換を行いましょう。

Flutterでの開発をスムーズに進めるためには、このような基本的なエラー処理の知識が不可欠です。常に型の整合性を意識しながらコーディングを行うことで、より安定したアプリケーションの開発が可能になります。