おすすめ!プログラミング学習サービス5選!詳しくはこちら

Flutterエラー対応)Error: type ‘Null’ is not a subtype of type ‘String’ in type cast

Flutter のアプリ開発で以下のエラーでtype ‘Null’ is not a subtype of type ‘String’ in type castと表示されて、どう対応したら良いのか分からない。

この記事で分かること!
  • type ‘Null’ is not a subtype of type ‘String’ in type castエラーの対処法
  • nullsafetyとは
目次

事象「Flutterエラー対応)Error: type ‘Null’ is not a subtype of type ‘String’ in type cast」

開発環境

モデルMacBook Air 2020
CPU・GPUM1(GPU8コア GPU8コア)
メモリ16GB
SSD512GB
Flutter3.3.0
Dart2.18.0

エラー内容

======== Exception caught by widgets library =======================================================
The following _CastError was thrown building XXXX(dirty):
type 'Null' is not a subtype of type 'String' in type cast

原因:Null Safety

エラー原因のソースコード

import 'package:flutter/material.dart';
import './question.dart';
import './answer.dart';

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> questions;
  final int questionIndex;
  final Function answerQuestion;

  Quiz({
    required this.questions,
    required this.answerQuestion,
    required this.questionIndex
  });

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(
          questions[questionIndex]['questionText']as String
        ),
        ...(questions[questionIndex]['answers'] as List<Map<String,Object>>).map((answer) {
          return Answer(() => answerQuestion(answer['score']), answer['text']as String);
        }).toList()
      ],
    );
  }
}

dart 2.12 からNull Safetyになった。Null Safetyとはコンパイル時にエラーとなる。dart 2.12 より前は、アプリ実行時にNullPointerExceptionとなりシステムエラーとなってしまう。

対処方法:to String

対応後のソースコード

import 'package:flutter/material.dart';
import './question.dart';
import './answer.dart';

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> questions;
  final int questionIndex;
  final Function answerQuestion;

  Quiz({
    required this.questions,
    required this.answerQuestion,
    required this.questionIndex
  });

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(
          questions[questionIndex]['questionText'].toString(),
        ),
        ...(questions[questionIndex]['answers'] as List<Map<String,Object>>).map((answer) {
          return Answer(() => answerQuestion(answer['score']), answer['text'].toString());
        }).toList()
      ],
    );
  }
}

as stringの箇所を.tostring()に修正し正常に動作。

まとめ:type ‘Null’ is not a subtype of type ‘String’ in type castはto Stringで対応

今回の記事では、Flutter のアプリ開発で以下のエラーで
type ‘Null’ is not a subtype of type ‘String’ in type cast
と表示されて、どう対応したら良いのか分からない時の対処法について解説しました。

対処方法は?
  • to Stringで対応


最後まで読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次