flutter type_error ai_generated true

type 'Null' is not a subtype of type 'int' in type cast

ID: flutter/typeerror-null-not-subtype-int

Also available as: JSON · Markdown · 中文
88%Fix Rate
84%Confidence
1Evidence
2023-05-12First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Flutter 3.0 active
Flutter 3.3 active
Flutter 3.7 active

Root Cause

A null value was assigned or returned where a non-nullable int was expected, often due to missing null-safety handling in JSON parsing or API responses.

generic

中文

在期望非空 int 的地方分配或返回了 null 值,通常是由于 JSON 解析或 API 响应中缺少空安全处理。

Official Documentation

https://dart.dev/null-safety

Workarounds

  1. 90% success Use null-safe access with a fallback value: int value = (json['field'] as int?) ?? 0;
    Use null-safe access with a fallback value:
    int value = (json['field'] as int?) ?? 0;
  2. 95% success Use a JSON parsing library like 'json_serializable' with nullable fields defined properly: @JsonKey(name: 'field', defaultValue: 0) int field;
    Use a JSON parsing library like 'json_serializable' with nullable fields defined properly:
    @JsonKey(name: 'field', defaultValue: 0)
    int field;
  3. 85% success Add explicit null checks before casting: if (json['field'] != null) { int value = json['field'] as int; } else { // handle null case }
    Add explicit null checks before casting:
    if (json['field'] != null) {
      int value = json['field'] as int;
    } else {
      // handle null case
    }

中文步骤

  1. Use null-safe access with a fallback value:
    int value = (json['field'] as int?) ?? 0;
  2. Use a JSON parsing library like 'json_serializable' with nullable fields defined properly:
    @JsonKey(name: 'field', defaultValue: 0)
    int field;
  3. Add explicit null checks before casting:
    if (json['field'] != null) {
      int value = json['field'] as int;
    } else {
      // handle null case
    }

Dead Ends

Common approaches that don't work:

  1. Using 'as int' without null check 90% fail

    If the value is null, the cast will throw the same error.

  2. Ignoring null-safety and using 'dynamic' instead of 'int' 70% fail

    Defeats the purpose of null safety and can lead to runtime type errors elsewhere.

  3. Assuming the API will never return null for that field 80% fail

    APIs can change or return null for missing fields; brittle assumption.