setMultipleCredentials method
Like setCredentials, but accepts multiple credentials.
However, does not support SyncCredentials.none().
Implementation
void setMultipleCredentials(List<SyncCredentials> credentials) {
if (credentials.isEmpty) {
throw ArgumentError.value(
credentials, "credentials", "Provide at least one credential");
}
var length = credentials.length;
for (int i = 0; i < length; i++) {
final isLast = i + 1 == length;
var credential = credentials[i];
if (credential is _SyncCredentialsNone) {
throw ArgumentError.value(credentials, "credentials",
"SyncCredentials.none() is not supported, use setCredentials() instead");
}
try {
if (credential is _SyncCredentialsUserPassword) {
withNativeString(
credential._user,
(userCStr) => withNativeString(
credential._password,
(passwordCStr) => checkObx(
C.sync_credentials_add_user_password(_ptr,
credential._type, userCStr, passwordCStr, isLast))));
} else if (credential is SyncCredentialsSecret) {
withNativeBytes(
credential.data,
(Pointer<Uint8> credsPtr, int credsSize) => checkObx(
C.sync_credentials_add(
_ptr, credential._type, credsPtr, credsSize, isLast)));
}
} catch (e) {
// To make exceptions related to a credential easier to attribute,
// wrap in an ArgumentError and give the position in the list.
if (e is StateError) {
// State errors should not be specific to a credential, so rethrow
rethrow;
} else {
throw ArgumentError.value(credential, "credentials[$i]", "$e");
}
}
}
}