postComment method
Implementation
Future<bool> postComment(String content) async {
final text = content.trim();
final pubkey = ndk.accounts.getPublicKey();
if (text.isEmpty || pubkey == null || !canComment || _state.posting) {
return false;
}
_setState(_state.copyWith(posting: true, clearError: true));
try {
final event = Nip01Event(
pubKey: pubkey,
kind: 1111,
tags: [
['A', applicationAddress, ...relays.take(1)],
['K', softwareApplicationKind.toString()],
['P', release.event.pubKey],
['a', releaseAddress, ...relays.take(1)],
['k', softwareReleaseKind.toString()],
['p', release.event.pubKey],
],
content: text,
);
final responses = await ndk.broadcast
.broadcast(
nostrEvent: event,
specificRelays: relays.isEmpty ? null : relays,
)
.broadcastDoneFuture;
if (!responses.any((response) => response.broadcastSuccessful)) {
final relayErrors = responses
.map((response) => response.msg.trim())
.where((message) => message.isNotEmpty)
.toSet()
.join('; ');
throw StateError(
relayErrors.isEmpty
? 'No relay accepted the comment.'
: 'No relay accepted the comment: $relayErrors',
);
}
_setState(_state.copyWith(posting: false));
final activeLoad = _loadFuture;
if (activeLoad != null) await activeLoad;
await load();
return true;
} catch (error) {
_setState(
_state.copyWith(
posting: false,
error: error.toString(),
errorFromPosting: true,
),
);
return false;
}
}