added guardian letters with chat and multiple answer functionalities
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
/// `type` of the visible Connect push for a parent letter. Its data carries
|
||||
/// the letter under [parentLetterIdKey].
|
||||
const String parentLetterPushType = 'parent-letter';
|
||||
const String parentLetterIdKey = 'parentLetterId';
|
||||
|
||||
/// Where a tapped notification leads.
|
||||
sealed class PushTarget {
|
||||
const PushTarget();
|
||||
}
|
||||
|
||||
class ParentLetterTarget extends PushTarget {
|
||||
final String letterId;
|
||||
const ParentLetterTarget(this.letterId);
|
||||
}
|
||||
|
||||
class NewsletterTarget extends PushTarget {
|
||||
final String newsletterId;
|
||||
const NewsletterTarget(this.newsletterId);
|
||||
}
|
||||
|
||||
class ChatTarget extends PushTarget {
|
||||
final String chatToken;
|
||||
const ChatTarget(this.chatToken);
|
||||
}
|
||||
|
||||
/// Resolves the data of a tapped notification — the payload of a locally
|
||||
/// rendered one as well as the data of an FCM message. Null when it names no
|
||||
/// known target.
|
||||
PushTarget? resolvePushTarget(Map<String, dynamic> data) {
|
||||
String? value(String key) {
|
||||
final value = data[key];
|
||||
return value is String && value.isNotEmpty ? value : null;
|
||||
}
|
||||
|
||||
if (value(parentLetterIdKey) case final letterId?) {
|
||||
return ParentLetterTarget(letterId);
|
||||
}
|
||||
if (value('newsletterId') case final newsletterId?) {
|
||||
return NewsletterTarget(newsletterId);
|
||||
}
|
||||
for (final key in const ['chatToken', 'token', 'roomToken']) {
|
||||
if (value(key) case final chatToken?) return ChatTarget(chatToken);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user