🔖

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

2023/02/15に公開約1,200字

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

ログインするとコメントできます