🔖

type 'Null' is not a subtype of type 'Map<String, dynamic>' error対応

2023/02/15に公開1

Flutterでハマったエラーと解決策について記しておきます。

発生した問題

  • 対象のコード
static Future<dynamic> getUser(String uid) async {
    try{
      DocumentSnapshot documentSnapshot = await users.doc(uid).get();
      Map<String?, dynamic> data = documentSnapshot.data() as Map<String?, dynamic>;
      Account myAccount = Account(
        id: uid,
        name: data['name'],
        userId: data['user_id'],
        selfIntroduction: data['self_introduction'],
        imagePath: data['image_path'],
        createdTime: data['created_time'],
        updatedTime: data['updated_time']
      );
      Authentication.myAccount = myAccount;
      print('ユーザー取得完了');
      return true;
    } on FirebaseException catch(e) {
      print('ユーザー取得エラー:$e');
      return false;
    }
}
  • エラーメッセージ
type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast as map string

こちらのエラーメッセージでは、NULL値をMap<String, dynamic>型にキャストしようとしていることを許可してないと意味しています。
言い換えれば、NULL値をMapのように扱おうとしていますが、それは不可能ということです。

解決策

このエラーを修正するには、キャストする前に、キャストしようとしている値がNULLであるかどうかを確認する必要があります。

これを行うには、以下のようなNULLチェックを使用します。

if(documentSnapshot.data() != null) {
    Map<String, dynamic> data = documentSnapshot.data() as Map<String, dynamic>;  
}

if文では、documentSnapshot.data()がNULLであるかどうかをチェックしています。

Discussion

caelldesigncaelldesign

はじめまして!
今全く同じところで沼っている状態で、こちらのブログを見つけました。
下記ソースがどこの箇所に入るのかを教えていただけないでしょうか?
flutter初めてまだ1年もたたない素人です。
if(documentSnapshot.data() != null) {
Map<String, dynamic> data = documentSnapshot.data() as Map<String, dynamic>;
}

何卒よろしくお願いいたします。