नीचे दी गई तस्वीर दिखाती है कि मेरा डीबी कैसे संरचित है। प्रत्येक मॉडल वर्ग एक शीर्ष स्तरीय संग्रह है।

how my firebase is structured

मेरे उपयोगकर्ता डेटा संग्रह में, मैं उपयोगकर्ताओं के बारे में अतिरिक्त जानकारी सहेजता हूं जब वे पहली बार साइन अप करते हैं जैसे नाम, पता, फोन नंबर इत्यादि। मैं सफलतापूर्वक फायरबेस को लिख सकता हूं लेकिन मुझे फायरबेस से मेरे फॉर्म फ़ील्ड में पढ़ने में समस्या हो रही है।

मैंने अपना UserData वर्ग मॉडल और नोटिफ़ायर वर्ग नीचे चिपकाया है ताकि आप देख सकें कि मैंने क्या किया है।

कृपया मुझे अपने getUserData() में क्या याद आ रहा है? या मैं यह सब गलत कर रहा हूँ? क्या कोई मुझे फ़ायरबेस से उपयोगकर्ता डेटा में वर्तमान लॉग इन पढ़ने के लिए बेहतर तरीका दिखा सकता है?

class User {
 final String uid;
 final String email;
 final String password;
 User({this.uid, this.email, this.password});
}

class UserData {
  String id;
  String firstName;
  String lastName;
  String phoneNumber;
  String role;
  String businessName;
  String businessType;
  String streetAddress;
  String city;
  String state;
  String postcode;
  String country;
  Timestamp createdAt;
  Timestamp updatedAt;
  UserData(
    this.id,
    this.firstName,
    this.businessType,
    this.businessName,
    this.city,
    this.country,
    this.createdAt,
    this.lastName,
    this.phoneNumber,
    this.postcode,
    this.role,
    this.state,
    this.streetAddress,
    this.updatedAt,
  );
  UserData.fromMap(Map<String, dynamic> data) {
    id = data['id'];
    firstName = data['first_name'];
    lastName = data['last_name'];
    phoneNumber = data['phone_number'];
    role = data['role'];
    businessName = data['business_name'];
    businessType = data['business_type'];
    streetAddress = data['street_address'];
    city = data['city'];
    postcode = data['postcode'];
    state = data['state'];
    country = data['country'];
    createdAt = data['created_at'];
    updatedAt = data['updated_at'];
  }
  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'first_name': firstName,
      'last_name': lastName,
      'phone_number': phoneNumber,
      'role': role,
      'business_name': businessName,
      'business_type': businessType,
      'street_address': streetAddress,
      'city': city,
      'postcode': postcode,
      'state': state,
      'country': country,
      'created_at': createdAt,
      'updated_at': updatedAt,
    };
  }
}

// UserDataNotifier वर्ग

class UserDataNotifier with ChangeNotifier {

  UserData _currentLoggedInUserData;

  CollectionReference userDataRef = Firestore.instance.collection('userData');

  UserData get currentLoggedInUserData => _currentLoggedInUserData;

  Future<UserData> getUserData() async {
    String userId = (await FirebaseAuth.instance.currentUser()).uid;
    DocumentSnapshot variable =
        await Firestore.instance.collection('userData').document(userId).get();
    _currentLoggedInUserData = variable.data as UserData;
    notifyListeners();
  }

  Future createOrUpdateUserData(UserData userData, bool isUpdating) async {
    String userId = (await FirebaseAuth.instance.currentUser()).uid;
    if (isUpdating) {
      userData.updatedAt = Timestamp.now();
      await userDataRef.document(userId).updateData(userData.toMap());
      print('updated userdata with id: ${userData.id}');
    } else {
      userData.createdAt = Timestamp.now();
      DocumentReference documentReference = userDataRef.document(userId);
      userData.id = documentReference.documentID;
      await documentReference.setData(userData.toMap(), merge: true);
      print('created userdata successfully with id: ${userData.id}');
    }
    notifyListeners();
  }
}
0
hermie_brown 19 नवम्बर 2020, 16:52

1 उत्तर

सबसे बढ़िया उत्तर
_currentLoggedInUserData = variable.data() as UserData; 

वैरिएबल.डेटा को वेरिएबल के रूप में कॉल करें। डेटा ()

अगर काम नहीं कर रहा है,

UserData.fromMap(Map<String, dynamic> data) => UserData(
    id: data['id'];
    firstName: data['first_name'];
    lastName: data['last_name'];
    phoneNumber: data['phone_number'];
    role: data['role'];
    businessName: data['business_name'];
    businessType: data['business_type'];
    streetAddress: data['street_address'];
    city: data['city'];
    postcode: data['postcode'];
    state: data['state'];
    country: data['country'];
    createdAt: data['created_at'];
    updatedAt: data['updated_at'];
  })

_currentLoggedInUserData = UserData.fromMap(variable.data());
2
Rajitha Udayanga 19 नवम्बर 2020, 14:26