У меня есть этот код:
RaisedButton(
child: Text('Add'),
onPressed: () async {
if (_formKey.currentState.validate()) {
DocumentReference docRef =
await DatabaseServices().addUserProperty(
user.userUid,
_currentPropertyName,
_currentPropertyNotes,
_currentPropertyZone,
_currentPropertyAddress `enter code here`,
_currentPropertyLandArea,
_currentPropertyDatePurchased,
_currentPropertyRatesBillingCode,
_currentPropertyInsurancePolicy,
_currentPropertyInsuranceSource,
_currentPropertyInsuranceExpiryDate `enter code here`,
_currentPropertyLegalDescription,
_currentPropertyValuation,
_currentPropertyValuationSource,
false,
Timestamp.now(),
Timestamp.now(),
);
await DatabaseServices().addPropertyUnit(
user.userUid,
docRef.documentID,
'Single unit',
'',
'',
0,
false,
false,
Timestamp.now(),
Timestamp.now(),
);
Navigator.pop(context);
}
})
, где я пытаюсь использовать 'docRef.documentID' из только что созданного documentId для addUserProperty. Я хочу сохранить это как поле в addPropertyUnit. Я получаю сообщение об ошибке «Получатель« documentID »был вызван на ноль» в строке docRef.documentID. Что мне делать?
Спасибо за предложение ralemos. Я поместил второе ожидание et c внутри .then (). Теперь у меня есть этот код:
RaisedButton(
child: Text('Add'),
onPressed: () async {
if (_formKey.currentState.validate()) {
DocumentReference docRef = await DatabaseServices()
.addUserProperty(
user.userUid,
_currentPropertyName,
_currentPropertyNotes,
_currentPropertyZone,
_currentPropertyAddress,
_currentPropertyLandArea,
_currentPropertyDatePurchased,
_currentPropertyRatesBillingCode,
_currentPropertyInsurancePolicy,
_currentPropertyInsuranceSource,
_currentPropertyInsuranceExpiryDate,
_currentPropertyLegalDescription,
_currentPropertyValuation,
_currentPropertyValuationSource,
false,
Timestamp.now(),
Timestamp.now(),
)
.then((docRef) async {
await DatabaseServices().addPropertyUnit(
user.userUid,
'nnnnnnnnnn',
// docRef.documentID,
'Single unit',
'',
'',
0,
false,
false,
Timestamp.now(),
Timestamp.now(),
);
return null;
});
// print('docRef: ${docRef.documentID}');
Navigator.pop(context);
}
})
, который работает в том, что он сохраняет новый PropertyUnit, но как мне передать docRef.documentID из .addUserProperty в .addPropertyUnit ()? В настоящее время он просто сохраняет 'nnnnnnnnnnn'. Если я определю 'DocumentReference docRef;' чуть ниже 'Widget build (BuildContext context) {', docRef.documentID доступен в .addPropertyUnit, но все еще получает ошибку времени выполнения 'Getter' documentID 'был вызван для null'.
Код для addPropertyUnit is:
// add a unit to a property
Future addPropertyUnit(
String userUid,
String unitPropertyUid,
String unitName,
String unitNotes,
String unitLeaseDescription,
num unitArea,
bool unitResidential,
bool unitArchived,
Timestamp unitRecordCreatedDateTime,
Timestamp unitRecordLastEdited,
) async {
return await userUnitCollection.document().setData(
{
'userUid': userUid,
'propertyUid': unitPropertyUid,
'unitName': unitName,
'unitNotes': unitNotes,
'unitLeaseDescription': unitLeaseDescription,
'unitArea': unitArea,
'unitResidential': unitResidential,
'unitArchived': unitArchived,
'unitRecordCreatedDateTime': unitRecordCreatedDateTime,
'unitRecordLastEdited': unitRecordLastEdited,
},
);
}
И addUserProperty:
// add a property
Future addUserProperty(
String userUid,
String propertyName,
String propertyNotes,
String propertyZone,
String propertyAddress,
double propertyLandArea,
DateTime propertyDatePurchased,
String propertyRatesBillingCode,
String propertyInsurancePolicy,
String propertyInsuranceSource,
DateTime propertyInsuranceExpiryDate,
String propertyLegalDescription,
double propertyValuation,
String propertyValuationSource,
bool propertyArchived,
Timestamp propertyRecordCreatedDateTime,
Timestamp propertyRecordLastEdited,
) async {
return await userPropertyCollection.document().setData(
{
'userUid': userUid,
'propertyName': propertyName,
'propertyNotes': propertyNotes,
'propertyZone': propertyZone,
'propertyAddress': propertyAddress,
'propertyLandArea': propertyLandArea,
'propertyDatePurchased': propertyDatePurchased,
'propertyRatesBillingCode': propertyRatesBillingCode,
'propertyInsurancePolicy': propertyInsurancePolicy,
'propertyInsuranceSource': propertyInsuranceSource,
'propertyInsuranceDate': propertyInsuranceExpiryDate,
'propertyLegalDescription': propertyLegalDescription,
'propertyMarketValuation': propertyValuation,
'propertyMarketValuationSource': propertyValuationSource,
'propertyArchived': propertyArchived,
'propertyRecordCreatedDateTime': propertyRecordCreatedDateTime,
'propertyRecordLastEdited': propertyRecordLastEdited,
},
);
}