You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从Firestore获取数据并转换为AddressModel的Future方法?

从Firestore获取AddressModel数据的问题与解决方法

我尝试创建一个返回类型为AddressModel的Future方法,用于从Firestore中获取地址数据,但遇到了问题。

AddressModel类

class AddressModel{
  int pinCode,contactNum;
  String fullName,apartment,city,state;
  String? area;
  String? landmark;

  AddressModel({
    required this.pinCode,
    required this.contactNum,
    required this.fullName,
    required this.apartment,
    required this.city,
    required this.state,
    this.area,
    this.landmark,
  });

  Map<String, dynamic> toMap() {
    return {
      'pinCode': pinCode,
      'contactNum': contactNum,
      'fullName': fullName,
      'apartment': apartment,
      'area': area,
      'landmark': landmark,
      'city': city,
      'state': state,
    };
  }

  factory AddressModel.fromMap(Map<String, dynamic> map) {
    return AddressModel(
      pinCode: map['pinCode'] as int,
      contactNum: map['contactNum'] as int,
      fullName: map['fullName'] as String,
      apartment: map['apartment'] as String,
      area: map['area'] as String,
      landmark: map['landmark'] as String,
      city: map['city'] as String,
      state: map['state'] as String,
    );
  }
}

初始Future方法(存在问题)

Future<AddressModel?> getAddress(BuildContext context)async{
    try{
      DocumentSnapshot snapshot = await _fireStore.collection("users").doc(currentUser!.uid).get();
      
      //---------------此处遇到问题----------------//
      
    }on FirebaseException catch(e){
      showSnackBar(context, e.code.toString());
      return null;
    }
  }

Firestore文档结构

Firestore文档结构

解决方法

QuerySnapshot snapshot = await _fireStore.collection("users").where("uId",isEqualTo: currentUser!.uid).get();

if(snapshot.docs.isNotEmpty){
  return AddressModel.fromMap(snapshot.docs[0]['address']);
}
return null;

内容的提问来源于stack exchange,提问作者Vivek Chib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:27:36