🔖
type 'Null' is not a subtype of type 'Map<String, dynamic>' error対応
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