diff --git a/assets/image/civic_pass_card.png b/assets/image/civic_pass_card.png new file mode 100644 index 000000000..ca2bbbafb Binary files /dev/null and b/assets/image/civic_pass_card.png differ diff --git a/lib/app/shared/constants/image_strings.dart b/lib/app/shared/constants/image_strings.dart index 1e6c5b438..6f2cfbdef 100644 --- a/lib/app/shared/constants/image_strings.dart +++ b/lib/app/shared/constants/image_strings.dart @@ -69,6 +69,7 @@ class ImageStrings { '$imagePath/kyc_age_credential_card.png'; static const String kycCountryOfResidenceCard = '$imagePath/kyc_country_of_residence_card.png'; + static const String civicPassCard = '$imagePath/civic_pass_card.png'; static const String euDiplomaCard = '$imagePath/eu_diploma_card.png'; static const String defiComplianceCard = '$imagePath/defi-compliance-card.png'; diff --git a/lib/app/shared/constants/urls.dart b/lib/app/shared/constants/urls.dart index 2adcf9b31..4b4c22392 100644 --- a/lib/app/shared/constants/urls.dart +++ b/lib/app/shared/constants/urls.dart @@ -51,6 +51,9 @@ class Urls { static const String proofOfTwitterStatsUrl = 'https://issuer.talao.co/credential-manifest/polygonid/ProofOfTwitterStats'; + static const String civicPassCredentialUrl = + 'https://issuer.talao.co/credential-manifest/polygonid/civicpasscredential'; + static const String chainbornMembershipCardUrl = 'https://issuer.talao.co/chainborn/membershipcard/'; diff --git a/lib/app/shared/enum/type/credential_subject_type/credential_subject_type.dart b/lib/app/shared/enum/type/credential_subject_type/credential_subject_type.dart index 0889b2075..2d34724b5 100644 --- a/lib/app/shared/enum/type/credential_subject_type/credential_subject_type.dart +++ b/lib/app/shared/enum/type/credential_subject_type/credential_subject_type.dart @@ -63,4 +63,5 @@ enum CredentialSubjectType { voucher, walletCredential, proofOfTwitterStats, + civicPassCredential, } diff --git a/lib/app/shared/enum/type/credential_subject_type/credential_subject_type_extension.dart b/lib/app/shared/enum/type/credential_subject_type/credential_subject_type_extension.dart index 06f5113df..0678eeb58 100644 --- a/lib/app/shared/enum/type/credential_subject_type/credential_subject_type_extension.dart +++ b/lib/app/shared/enum/type/credential_subject_type/credential_subject_type_extension.dart @@ -84,6 +84,7 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { case CredentialSubjectType.euDiplomaCard: case CredentialSubjectType.euVerifiableId: case CredentialSubjectType.proofOfTwitterStats: + case CredentialSubjectType.civicPassCredential: return Colors.white; } } @@ -157,6 +158,7 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { case CredentialSubjectType.kycAgeCredential: case CredentialSubjectType.kycCountryOfResidence: case CredentialSubjectType.proofOfTwitterStats: + case CredentialSubjectType.civicPassCredential: return Icons.perm_identity; } } @@ -288,6 +290,8 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { return 'KYCCountryOfResidenceCredential'; case CredentialSubjectType.proofOfTwitterStats: return 'ProofOfTwitterStats'; + case CredentialSubjectType.civicPassCredential: + return 'CivicPassCredential'; case CredentialSubjectType.defaultCredential: return ''; } @@ -411,6 +415,8 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { return KYCCountryOfResidenceModel.fromJson(json); case CredentialSubjectType.proofOfTwitterStats: return ProofOfTwitterStatsModel.fromJson(json); + case CredentialSubjectType.civicPassCredential: + return CivicPassCredentialModel.fromJson(json); } } @@ -611,6 +617,8 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { return 'KYC Country of Residence'; case CredentialSubjectType.proofOfTwitterStats: return 'Proof Of Twitter Stats'; + case CredentialSubjectType.civicPassCredential: + return 'Civic Pass Credential'; case CredentialSubjectType.defaultCredential: return ''; } @@ -619,7 +627,6 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { bool get weCanRemoveItIfCredentialExist { switch (this) { case CredentialSubjectType.defiCompliance: - return true; case CredentialSubjectType.bloometaPass: return true; case CredentialSubjectType.troopezPass: @@ -732,6 +739,7 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { return false; case CredentialSubjectType.kycCountryOfResidence: case CredentialSubjectType.proofOfTwitterStats: + case CredentialSubjectType.civicPassCredential: return false; } } @@ -853,6 +861,7 @@ extension CredentialSubjectTypeExtension on CredentialSubjectType { return 0; case CredentialSubjectType.kycCountryOfResidence: case CredentialSubjectType.proofOfTwitterStats: + case CredentialSubjectType.civicPassCredential: return 0; } } diff --git a/lib/connection_bridge/wallet_connect/cubit/wallet_connect_cubit.dart b/lib/connection_bridge/wallet_connect/cubit/wallet_connect_cubit.dart index f47bf51ad..29f66167e 100644 --- a/lib/connection_bridge/wallet_connect/cubit/wallet_connect_cubit.dart +++ b/lib/connection_bridge/wallet_connect/cubit/wallet_connect_cubit.dart @@ -6,7 +6,6 @@ import 'package:altme/app/app.dart'; import 'package:altme/connection_bridge/connection_bridge.dart'; import 'package:altme/wallet/wallet.dart'; import 'package:bloc/bloc.dart'; -import 'package:convert/convert.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:json_annotation/json_annotation.dart'; diff --git a/lib/dashboard/connection/confirm_connection/cubit/confirm_connection_cubit.dart b/lib/dashboard/connection/confirm_connection/cubit/confirm_connection_cubit.dart index 8d15e25fb..fd90ff905 100644 --- a/lib/dashboard/connection/confirm_connection/cubit/confirm_connection_cubit.dart +++ b/lib/dashboard/connection/confirm_connection/cubit/confirm_connection_cubit.dart @@ -114,7 +114,7 @@ class ConfirmConnectionCubit extends Cubit { }; await walletConnectCubit.web3Wallet!.approveSession( - id: sessionProposalEvent!.id, + id: sessionProposalEvent.id, namespaces: walletNamespaces, ); diff --git a/lib/dashboard/connection/confirm_connection/view/confirm_connection_page.dart b/lib/dashboard/connection/confirm_connection/view/confirm_connection_page.dart index 2eadbec69..7b7f707e2 100644 --- a/lib/dashboard/connection/confirm_connection/view/confirm_connection_page.dart +++ b/lib/dashboard/connection/confirm_connection/view/confirm_connection_page.dart @@ -8,7 +8,6 @@ import 'package:beacon_flutter/beacon_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:secure_storage/secure_storage.dart' as secure_storage; -import 'package:walletconnect_flutter_v2/walletconnect_flutter_v2.dart'; class ConfirmConnectionPage extends StatelessWidget { const ConfirmConnectionPage({ diff --git a/lib/dashboard/home/tab_bar/credentials/models/civic_pass_credential/civic_pass_credential_model.dart b/lib/dashboard/home/tab_bar/credentials/models/civic_pass_credential/civic_pass_credential_model.dart new file mode 100644 index 000000000..61e9e345e --- /dev/null +++ b/lib/dashboard/home/tab_bar/credentials/models/civic_pass_credential/civic_pass_credential_model.dart @@ -0,0 +1,24 @@ +import 'package:altme/app/app.dart'; +import 'package:altme/dashboard/dashboard.dart'; +import 'package:json_annotation/json_annotation.dart'; + +part 'civic_pass_credential_model.g.dart'; + +@JsonSerializable(explicitToJson: true) +class CivicPassCredentialModel extends CredentialSubjectModel { + CivicPassCredentialModel({ + super.id, + super.type, + super.issuedBy, + super.offeredBy, + }) : super( + credentialSubjectType: CredentialSubjectType.civicPassCredential, + credentialCategory: CredentialCategory.polygonidCards, + ); + + factory CivicPassCredentialModel.fromJson(Map json) => + _$CivicPassCredentialModelFromJson(json); + + @override + Map toJson() => _$CivicPassCredentialModelToJson(this); +} diff --git a/lib/dashboard/home/tab_bar/credentials/models/discover_dummy_credential/discover_dummy_credential.dart b/lib/dashboard/home/tab_bar/credentials/models/discover_dummy_credential/discover_dummy_credential.dart index 1678a188f..da2829c14 100644 --- a/lib/dashboard/home/tab_bar/credentials/models/discover_dummy_credential/discover_dummy_credential.dart +++ b/lib/dashboard/home/tab_bar/credentials/models/discover_dummy_credential/discover_dummy_credential.dart @@ -304,6 +304,7 @@ class DiscoverDummyCredential extends Equatable { case CredentialSubjectType.kycAgeCredential: case CredentialSubjectType.kycCountryOfResidence: case CredentialSubjectType.proofOfTwitterStats: + case CredentialSubjectType.civicPassCredential: } return DiscoverDummyCredential( diff --git a/lib/dashboard/home/tab_bar/credentials/models/model.dart b/lib/dashboard/home/tab_bar/credentials/models/model.dart index 19e1ee9d7..85b72d39f 100644 --- a/lib/dashboard/home/tab_bar/credentials/models/model.dart +++ b/lib/dashboard/home/tab_bar/credentials/models/model.dart @@ -12,6 +12,7 @@ export 'bloometa/bloometa_pass_model.dart'; export 'bunny_pass/bunny_pass_model.dart'; export 'certificate_of_employment/certificate_of_employment_model.dart'; export 'chainborn_membership/chainborn_membership_model.dart'; +export 'civic_pass_credential/civic_pass_credential_model.dart'; export 'credential/credential.dart'; export 'credential/evidence.dart'; export 'credential/proof.dart'; diff --git a/lib/dashboard/home/tab_bar/credentials/polygon_id/polygon_id_credential_offer/view/polygon_id_credential_offer_view.dart b/lib/dashboard/home/tab_bar/credentials/polygon_id/polygon_id_credential_offer/view/polygon_id_credential_offer_view.dart index b343d9122..4dd4c7069 100644 --- a/lib/dashboard/home/tab_bar/credentials/polygon_id/polygon_id_credential_offer/view/polygon_id_credential_offer_view.dart +++ b/lib/dashboard/home/tab_bar/credentials/polygon_id/polygon_id_credential_offer/view/polygon_id_credential_offer_view.dart @@ -82,6 +82,13 @@ class PolygonIdCredentialOfferPage extends StatelessWidget { issuerName: '', value: '', ); + } else if (credentialSubjectType == + CredentialSubjectType.civicPassCredential) { + widget = const CredentialBaseWidget( + cardBackgroundImagePath: ImageStrings.civicPassCard, + issuerName: 'CIVIC', + value: '', + ); } else { widget = DefaultCredentialListWidget( credentialModel: CredentialModel( diff --git a/lib/dashboard/home/tab_bar/credentials/widgets/credential_display.dart b/lib/dashboard/home/tab_bar/credentials/widgets/credential_display.dart index 6f720770b..d1d341fec 100644 --- a/lib/dashboard/home/tab_bar/credentials/widgets/credential_display.dart +++ b/lib/dashboard/home/tab_bar/credentials/widgets/credential_display.dart @@ -299,6 +299,9 @@ class CredentialDisplay extends StatelessWidget { case CredentialSubjectType.proofOfTwitterStats: return ProofOfTwitterStatsWidget(credentialModel: credentialModel); + + case CredentialSubjectType.civicPassCredential: + return CivicPassCredentialWidget(credentialModel: credentialModel); } } } diff --git a/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/civic_pass_credential_widget.dart b/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/civic_pass_credential_widget.dart new file mode 100644 index 000000000..3a18922e5 --- /dev/null +++ b/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/civic_pass_credential_widget.dart @@ -0,0 +1,30 @@ +import 'package:altme/app/app.dart'; +import 'package:altme/dashboard/dashboard.dart'; +import 'package:flutter/material.dart'; + +class CivicPassCredentialWidget extends StatelessWidget { + const CivicPassCredentialWidget({ + super.key, + required this.credentialModel, + }); + + final CredentialModel credentialModel; + + @override + Widget build(BuildContext context) { + // final civicPassCredentialModel = credentialModel + // .credentialPreview.credentialSubjectModel as CivicPassCredentialModel; + + return CredentialBaseWidget( + cardBackgroundImagePath: ImageStrings.civicPassCard, + issuerName: 'CIVIC', + value: 'Your ID is verified', + issuanceDate: UiDate.formatDateForCredentialCard( + credentialModel.credentialPreview.issuanceDate, + ), + expirationDate: credentialModel.expirationDate == null + ? '--' + : UiDate.formatDateForCredentialCard(credentialModel.expirationDate!), + ); + } +} diff --git a/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/credential_widget.dart b/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/credential_widget.dart index 2fc9d0263..d51535134 100644 --- a/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/credential_widget.dart +++ b/lib/dashboard/home/tab_bar/credentials/widgets/credential_widget/credential_widget.dart @@ -11,6 +11,7 @@ export 'bloometa_pass_widget.dart'; export 'bunny_pass_widget.dart'; export 'certificate_of_employment_widget.dart'; export 'chainborn_membership_widget.dart'; +export 'civic_pass_credential_widget.dart'; export 'credential_base_widget.dart'; export 'default_credential_detail_widget.dart'; export 'default_credential_list_widget.dart'; diff --git a/lib/polygon_id/cubit/polygon_id_cubit.dart b/lib/polygon_id/cubit/polygon_id_cubit.dart index 85f14a289..670a0b355 100644 --- a/lib/polygon_id/cubit/polygon_id_cubit.dart +++ b/lib/polygon_id/cubit/polygon_id_cubit.dart @@ -447,6 +447,11 @@ class PolygonIdCubit extends Cubit { final response = await client.get(Urls.proofOfTwitterStatsUrl); credentialManifest = CredentialManifest.fromJson(response as Map); + } else if (claimEntity.type == + CredentialSubjectType.civicPassCredential.name) { + final response = await client.get(Urls.civicPassCredentialUrl); + credentialManifest = + CredentialManifest.fromJson(response as Map); } } catch (e) { log.e('can not get the credntials manifest for polygon error: $e');