我实际上有两个问题。
addWalletToUser(coinAddress) async {
final FirebaseUser user = (await FirebaseAuth.instance.currentUser());
try {
await Firestore.instance.collection('users').document(user.uid)
.updateData({
"cryptoAddresses": FieldValue.arrayUnion(coinAddress)
});
} catch (e) {
print('error caught: $e');
return null;
}
}
这将导致以下错误:flutter: type 'String' is not a subtype of type 'List<dynamic>'
addWalletToUser
时执行此if语句中的代码应返回 null :if (addWalletToUser(_textController.text) != null)
任何帮助将不胜感激!
答案 0 :(得分:2)
关于此错误:
flutter:“ String”类型不是“ List”类型的子类型
这意味着您正在尝试将字符串分配给列表(如list = string)。
arrayUnion
的参数类型为List<dynamic>
:
static FieldValue arrayUnion(List<dynamic> elements) =>
FieldValue._(FieldValueType.arrayUnion, elements);
因此,您需要执行以下操作:
"cryptoAddresses": FieldValue.arrayUnion(['data1','data2','data3'])
在您的情况下,可能是:
"cryptoAddresses": FieldValue.arrayUnion([coinAddress])
答案 1 :(得分:0)
我通过创建第三个函数解决了第二个问题:
Future storeValues(coinAddress) async {
final walletToUser = await addWalletToUser(coinAddress);
final wallet = await createWallet(coinAddress);
return [walletToUser,wallet];
}
,并使用.then()
调用该函数,如下所示:
storeValues(_textController.text).then((val) {
if (val[0] != null && val[1] != null) {
//do something here
}}