snehalatha_dev #2

Merged
snehalathad merged 2 commits from snehalatha_dev into dev 2024-12-03 06:06:45 +00:00
90 changed files with 16836 additions and 1607 deletions

View File

@ -0,0 +1,231 @@
{
"data": [
{
"id": "CMSUMedInsight",
"name": "ADD CMSU INSIGHT(SHARED WITH SALESFORCE)",
"form-fields": [
{
"sectionName": "CMSU Insight",
"multiple": false,
"sectionList": [
{
"name": "HCP Name",
"id": "hcpname",
"depid": "",
"widget": "label",
"input": "label",
"validation": {
"isRequired": false
}
},
{
"name": "Insight Open Date",
"id": "date",
"depid": "",
"widget": "text",
"input": "Date",
"validation": {
"isRequired": true
}
},
{
"name": "Insight Modality",
"param": "insight_modality",
"id": "insight_modality",
"selectedValue": [],
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "CT",
"name": "CT"
},
{
"id": "HIT",
"name": "HIT"
},
{
"id": "MI",
"name": "MI"
},
{
"id": "MR",
"name": "MR"
},
{
"id": "Postdoc",
"name": "Postdoc"
},
{
"id": "UL",
"name": "UL"
},
{
"id": "VL",
"name": "VL"
},
{
"id": "XR",
"name": "XR"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Discussion Type",
"id": "discussion_type",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Proactive",
"name": "Proactive"
},
{
"id": "Reactive",
"name": "Reactive"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Insight Temperature",
"id": "insight_temperature",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Green",
"name": "Green"
},
{
"id": "Red",
"name": "Red"
},
{
"id": "Yellow",
"name": "Yellow "
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Insight Owners",
"id": "insight_owners",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Applications",
"name": "Applications"
},
{
"id": "BU",
"name": "BU"
},
{
"id": "Commercial",
"name": "Commercial"
},
{
"id": "Service",
"name": "Service"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Initiate Alert",
"id": "initiate_alert",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "No",
"name": "No"
},
{
"id": "Yes",
"name": "Yes"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Status",
"id": "status",
"depid": "sourcetype",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Open",
"name": "Open"
},
{
"id": "Closed",
"name": "Closed"
},
{
"id": "Cancelled",
"name": "Cancelled"
}
],
"validation": {
"isRequired": true
}
}
]
},
{
"sectionName": "Comments",
"multiple": false,
"sectionList": [
{
"name": "Insight Comments",
"id": "insight_comments",
"depid": "",
"widget": "text",
"input": "textArea",
"validation": {
"isRequired": true,
"maxchars": "300"
}
}
]
}
]
}
]
}

17
assets/images/a2sc2.svg Normal file
View File

@ -0,0 +1,17 @@
<svg width="412" height="917" viewBox="0 0 412 917" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3978_4162)">
<rect width="412" height="917" fill="white"/>
<rect opacity="0.35" x="359.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M381.673 14V18C382.478 17.6612 383.001 16.8731 383.001 16C383.001 15.1269 382.478 14.3388 381.673 14" fill="white" fill-opacity="0.6"/>
<rect x="360.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M346.007 12.615C348.232 12.6151 350.371 13.4693 351.984 15.0008C352.105 15.1191 352.299 15.1176 352.419 14.9975L353.579 13.8272C353.64 13.7663 353.674 13.6837 353.673 13.5979C353.673 13.5121 353.638 13.4299 353.577 13.3697C349.345 9.31751 342.668 9.31751 338.437 13.3697C338.375 13.4299 338.34 13.512 338.34 13.5978C338.339 13.6837 338.373 13.7662 338.433 13.8272L339.594 14.9975C339.714 15.1178 339.908 15.1193 340.029 15.0008C341.642 13.4692 343.782 12.615 346.007 12.615ZM346.007 16.4226C347.229 16.4226 348.408 16.8765 349.314 17.6963C349.437 17.8126 349.63 17.8101 349.749 17.6906L350.908 16.5203C350.969 16.4589 351.003 16.3756 351.002 16.2891C351.002 16.2025 350.966 16.12 350.904 16.0598C348.145 13.4954 343.872 13.4954 341.112 16.0598C341.05 16.12 341.015 16.2026 341.014 16.2891C341.013 16.3757 341.047 16.459 341.108 16.5203L342.267 17.6906C342.387 17.8101 342.58 17.8126 342.702 17.6963C343.608 16.877 344.785 16.4231 346.007 16.4226ZM348.329 18.9845C348.331 19.0712 348.297 19.1549 348.235 19.2157L346.229 21.2377C346.171 21.2971 346.091 21.3306 346.007 21.3306C345.923 21.3306 345.843 21.2971 345.784 21.2377L343.779 19.2157C343.717 19.1549 343.683 19.0712 343.685 18.9844C343.686 18.8976 343.724 18.8154 343.788 18.7573C345.069 17.675 346.945 17.675 348.225 18.7573C348.29 18.8155 348.327 18.8977 348.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M332.34 10.6665H331.34C330.788 10.6665 330.34 11.1142 330.34 11.6665V20.3332C330.34 20.8855 330.788 21.3332 331.34 21.3332H332.34C332.892 21.3332 333.34 20.8855 333.34 20.3332V11.6665C333.34 11.1142 332.892 10.6665 332.34 10.6665ZM326.673 12.9998H327.673C328.225 12.9998 328.673 13.4476 328.673 13.9998V20.3332C328.673 20.8855 328.225 21.3332 327.673 21.3332H326.673C326.121 21.3332 325.673 20.8855 325.673 20.3332V13.9998C325.673 13.4476 326.121 12.9998 326.673 12.9998ZM323.007 15.3332H322.007C321.454 15.3332 321.007 15.7809 321.007 16.3332V20.3332C321.007 20.8855 321.454 21.3332 322.007 21.3332H323.007C323.559 21.3332 324.007 20.8855 324.007 20.3332V16.3332C324.007 15.7809 323.559 15.3332 323.007 15.3332ZM318.34 17.3332H317.34C316.788 17.3332 316.34 17.7809 316.34 18.3332V20.3332C316.34 20.8855 316.788 21.3332 317.34 21.3332H318.34C318.892 21.3332 319.34 20.8855 319.34 20.3332V18.3332C319.34 17.7809 318.892 17.3332 318.34 17.3332Z" fill="white"/>
<path d="M37.1696 8.35C36.2096 8.35 35.3946 8.555 34.7246 8.965C34.0446 9.365 33.5246 9.95 33.1645 10.72C32.8046 11.49 32.6246 12.44 32.6246 13.57C32.6246 14.77 32.8446 15.785 33.2846 16.615C33.7146 17.445 34.3146 18.075 35.0846 18.505C35.8546 18.935 36.7496 19.15 37.7696 19.15C38.2996 19.15 38.8046 19.095 39.2846 18.985C39.7646 18.875 40.1796 18.705 40.5296 18.475L39.8096 17.005C39.5196 17.195 39.2046 17.33 38.8646 17.41C38.5246 17.48 38.1746 17.515 37.8146 17.515C36.8246 17.515 36.0396 17.21 35.4596 16.6C34.8796 15.99 34.5896 15.09 34.5896 13.9C34.5896 13.71 34.5946 13.49 34.6046 13.24C34.6146 12.98 34.6496 12.72 34.7096 12.46L34.1096 13.12C34.2796 13.53 34.5246 13.875 34.8446 14.155C35.1646 14.425 35.5396 14.63 35.9696 14.77C36.3996 14.91 36.8746 14.98 37.3946 14.98C38.0746 14.98 38.6896 14.85 39.2396 14.59C39.7796 14.32 40.2096 13.945 40.5296 13.465C40.8496 12.975 41.0096 12.405 41.0096 11.755C41.0096 11.055 40.8396 10.455 40.4996 9.955C40.1596 9.445 39.6996 9.05 39.1196 8.77C38.5296 8.49 37.8796 8.35 37.1696 8.35ZM37.0646 9.88C37.4646 9.88 37.8196 9.955 38.1296 10.105C38.4396 10.245 38.6846 10.45 38.8646 10.72C39.0346 10.98 39.1196 11.295 39.1196 11.665C39.1196 12.215 38.9296 12.65 38.5496 12.97C38.1696 13.29 37.6596 13.45 37.0196 13.45C36.5996 13.45 36.2296 13.375 35.9096 13.225C35.5896 13.065 35.3396 12.85 35.1596 12.58C34.9796 12.3 34.8896 11.99 34.8896 11.65C34.8896 11.32 34.9746 11.025 35.1446 10.765C35.3146 10.495 35.5596 10.28 35.8796 10.12C36.1996 9.96 36.5946 9.88 37.0646 9.88ZM30.4153 13.39C30.7553 13.39 31.0453 13.275 31.2853 13.045C31.5253 12.805 31.6453 12.505 31.6453 12.145C31.6453 11.765 31.5253 11.465 31.2853 11.245C31.0453 11.015 30.7553 10.9 30.4153 10.9C30.0753 10.9 29.7853 11.015 29.5453 11.245C29.3053 11.465 29.1853 11.765 29.1853 12.145C29.1853 12.505 29.3053 12.805 29.5453 13.045C29.7853 13.275 30.0753 13.39 30.4153 13.39ZM30.4153 19.105C30.7553 19.105 31.0453 18.99 31.2853 18.76C31.5253 18.52 31.6453 18.22 31.6453 17.86C31.6453 17.48 31.5253 17.18 31.2853 16.96C31.0453 16.73 30.7553 16.615 30.4153 16.615C30.0753 16.615 29.7853 16.73 29.5453 16.96C29.3053 17.18 29.1853 17.48 29.1853 17.86C29.1853 18.22 29.3053 18.52 29.5453 18.76C29.7853 18.99 30.0753 19.105 30.4153 19.105ZM28.3531 16.615V15.265L23.1781 8.5H21.0931L26.1931 15.265L27.1681 14.965H18.8431V16.615H28.3531ZM22.5931 19V16.615L22.5331 14.965V12.85H20.7031V19H22.5931ZM17.0033 19V9.25L16.1483 10.135H19.2233V8.5H15.0533V19H17.0033Z" fill="white"/>
<circle cx="297.5" cy="458.5" r="257.5" fill="#E7F4FF"/>
</g>
<defs>
<clipPath id="clip0_3978_4162">
<rect width="412" height="917" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,5 @@
<svg width="78" height="79" viewBox="0 0 78 79" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.5 10.6623C48.5 13.562 47.2853 16.1722 45.347 17.9913C54.403 20.7722 61 29.3503 61 39.5012C61 49.6522 54.403 58.2302 45.347 61.0111C47.2853 62.8303 48.5 65.4404 48.5 68.3402C48.5 70.627 47.7445 72.7337 46.4745 74.4143C62.2132 70.9192 74 56.6154 74 39.5012C74 22.3871 62.2132 8.08329 46.4745 4.58813C47.7445 6.2688 48.5 8.37548 48.5 10.6623ZM30.9217 74.2745C15.4863 70.5517 4 56.3958 4 39.5012C4 22.6066 15.4863 8.45076 30.9217 4.72797C29.7144 6.38499 29 8.43847 29 10.6623C29 13.6253 30.2683 16.286 32.281 18.1093C23.4169 21.0084 17 29.4898 17 39.5012C17 49.5126 23.4169 57.9941 32.281 60.8932C30.2683 62.7165 29 65.3771 29 68.3402C29 70.564 29.7144 72.6175 30.9217 74.2745Z" fill="#4B93CF"/>
<path d="M46.9535 10.9348C46.9535 15.3171 43.3922 18.8696 38.999 18.8696C34.6058 18.8696 31.0444 15.3171 31.0444 10.9348C31.0444 6.55253 34.6058 3 38.999 3C43.3922 3 46.9535 6.55253 46.9535 10.9348Z" fill="#F26635"/>
<path d="M46.9535 68.0647C46.9535 72.4469 43.3922 75.9995 38.999 75.9995C34.6058 75.9995 31.0444 72.4469 31.0444 68.0647C31.0444 63.6824 34.6058 60.1299 38.999 60.1299C43.3922 60.1299 46.9535 63.6824 46.9535 68.0647Z" fill="#F26635"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,17 @@
<svg width="412" height="917" viewBox="0 0 412 917" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3978_4219)">
<rect width="412" height="917" transform="matrix(-1 0 0 1 412 0)" fill="white"/>
<circle cx="257.5" cy="257.5" r="257.5" transform="matrix(-1 0 0 1 554 201)" fill="#E7F4FF"/>
<rect opacity="0.35" x="-0.5" y="0.5" width="21" height="10.3333" rx="2.16667" transform="matrix(-1 0 0 1 52.3267 10.3334)" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M30.3267 14V18C29.5219 17.6612 28.9986 16.8731 28.9986 16C28.9986 15.1269 29.5219 14.3388 30.3267 14" fill="white" fill-opacity="0.6"/>
<rect width="18" height="7.33333" rx="1.33333" transform="matrix(-1 0 0 1 51.3267 12.3334)" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.9931 12.6152C63.7684 12.6153 61.6287 13.4694 60.0163 15.001C59.8949 15.1192 59.7009 15.1177 59.5813 14.9976L58.4207 13.8273C58.3601 13.7664 58.3264 13.6839 58.3269 13.598C58.3274 13.5122 58.3621 13.4301 58.4233 13.3699C62.6553 9.31763 69.3316 9.31763 73.5635 13.3699C73.6248 13.43 73.6596 13.5121 73.6601 13.598C73.6607 13.6838 73.627 13.7663 73.5665 13.8273L72.4056 14.9976C72.2861 15.1179 72.0918 15.1194 71.9705 15.001C70.3579 13.4693 68.218 12.6152 65.9931 12.6152ZM65.9931 16.4227C64.7707 16.4227 63.592 16.8766 62.6859 17.6964C62.5634 17.8127 62.3703 17.8102 62.2509 17.6907L61.0916 16.5204C61.0306 16.459 60.9967 16.3757 60.9976 16.2892C60.9984 16.2027 61.034 16.1201 61.0963 16.0599C63.8555 13.4955 68.1284 13.4955 70.8875 16.0599C70.9499 16.1201 70.9854 16.2027 70.9862 16.2893C70.9871 16.3758 70.9531 16.4591 70.8919 16.5204L69.7329 17.6907C69.6135 17.8102 69.4204 17.8127 69.2979 17.6964C68.3924 16.8772 67.2146 16.4233 65.9931 16.4227ZM63.6709 18.9846C63.6691 19.0714 63.7032 19.155 63.7652 19.2158L65.7705 21.2378C65.8293 21.2972 65.9095 21.3307 65.9931 21.3307C66.0767 21.3307 66.1569 21.2972 66.2156 21.2378L68.2213 19.2158C68.2832 19.155 68.3173 19.0713 68.3155 18.9845C68.3136 18.8977 68.276 18.8156 68.2116 18.7574C66.9309 17.6751 65.0553 17.6751 63.7746 18.7574C63.7102 18.8156 63.6726 18.8978 63.6709 18.9846Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.6602 10.6667H80.6602C81.2124 10.6667 81.6602 11.1145 81.6602 11.6667V20.3334C81.6602 20.8857 81.2124 21.3334 80.6602 21.3334H79.6602C79.1079 21.3334 78.6602 20.8857 78.6602 20.3334V11.6667C78.6602 11.1145 79.1079 10.6667 79.6602 10.6667ZM85.3268 13.0001H84.3268C83.7745 13.0001 83.3268 13.4478 83.3268 14.0001V20.3334C83.3268 20.8857 83.7745 21.3334 84.3268 21.3334H85.3268C85.8791 21.3334 86.3268 20.8857 86.3268 20.3334V14.0001C86.3268 13.4478 85.8791 13.0001 85.3268 13.0001ZM88.9935 15.3334H89.9935C90.5458 15.3334 90.9935 15.7811 90.9935 16.3334V20.3334C90.9935 20.8857 90.5458 21.3334 89.9935 21.3334H88.9935C88.4412 21.3334 87.9935 20.8857 87.9935 20.3334V16.3334C87.9935 15.7811 88.4412 15.3334 88.9935 15.3334ZM93.6602 17.3334H94.6602C95.2124 17.3334 95.6602 17.7811 95.6602 18.3334V20.3334C95.6602 20.8857 95.2124 21.3334 94.6602 21.3334H93.6602C93.1079 21.3334 92.6602 20.8857 92.6602 20.3334V18.3334C92.6602 17.7811 93.1079 17.3334 93.6602 17.3334Z" fill="white"/>
<path d="M375.33 8.35C376.29 8.35 377.105 8.555 377.775 8.965C378.455 9.365 378.975 9.95 379.335 10.72C379.695 11.49 379.875 12.44 379.875 13.57C379.875 14.77 379.655 15.785 379.215 16.615C378.785 17.445 378.185 18.075 377.415 18.505C376.645 18.935 375.75 19.15 374.73 19.15C374.2 19.15 373.695 19.095 373.215 18.985C372.735 18.875 372.32 18.705 371.97 18.475L372.69 17.005C372.98 17.195 373.295 17.33 373.635 17.41C373.975 17.48 374.325 17.515 374.685 17.515C375.675 17.515 376.46 17.21 377.04 16.6C377.62 15.99 377.91 15.09 377.91 13.9C377.91 13.71 377.905 13.49 377.895 13.24C377.885 12.98 377.85 12.72 377.79 12.46L378.39 13.12C378.22 13.53 377.975 13.875 377.655 14.155C377.335 14.425 376.96 14.63 376.53 14.77C376.1 14.91 375.625 14.98 375.105 14.98C374.425 14.98 373.81 14.85 373.26 14.59C372.72 14.32 372.29 13.945 371.97 13.465C371.65 12.975 371.49 12.405 371.49 11.755C371.49 11.055 371.66 10.455 372 9.955C372.34 9.445 372.8 9.05 373.38 8.77C373.97 8.49 374.62 8.35 375.33 8.35ZM375.435 9.88C375.035 9.88 374.68 9.955 374.37 10.105C374.06 10.245 373.815 10.45 373.635 10.72C373.465 10.98 373.38 11.295 373.38 11.665C373.38 12.215 373.57 12.65 373.95 12.97C374.33 13.29 374.84 13.45 375.48 13.45C375.9 13.45 376.27 13.375 376.59 13.225C376.91 13.065 377.16 12.85 377.34 12.58C377.52 12.3 377.61 11.99 377.61 11.65C377.61 11.32 377.525 11.025 377.355 10.765C377.185 10.495 376.94 10.28 376.62 10.12C376.3 9.96 375.905 9.88 375.435 9.88ZM382.085 13.39C381.745 13.39 381.455 13.275 381.215 13.045C380.975 12.805 380.855 12.505 380.855 12.145C380.855 11.765 380.975 11.465 381.215 11.245C381.455 11.015 381.745 10.9 382.085 10.9C382.425 10.9 382.715 11.015 382.955 11.245C383.195 11.465 383.315 11.765 383.315 12.145C383.315 12.505 383.195 12.805 382.955 13.045C382.715 13.275 382.425 13.39 382.085 13.39ZM382.085 19.105C381.745 19.105 381.455 18.99 381.215 18.76C380.975 18.52 380.855 18.22 380.855 17.86C380.855 17.48 380.975 17.18 381.215 16.96C381.455 16.73 381.745 16.615 382.085 16.615C382.425 16.615 382.715 16.73 382.955 16.96C383.195 17.18 383.315 17.48 383.315 17.86C383.315 18.22 383.195 18.52 382.955 18.76C382.715 18.99 382.425 19.105 382.085 19.105ZM384.147 16.615V15.265L389.322 8.5H391.407L386.307 15.265L385.332 14.965H393.657V16.615H384.147ZM389.907 19V16.615L389.967 14.965V12.85H391.797V19H389.907ZM395.497 19V9.25L396.352 10.135H393.277V8.5H397.447V19H395.497Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3978_4219">
<rect width="412" height="917" fill="white" transform="matrix(-1 0 0 1 412 0)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

2400
assets/images/newsc2img.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.9 MiB

View File

@ -0,0 +1,16 @@
<svg width="375" height="812" viewBox="0 0 375 812" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3978_4255)">
<rect width="375" height="812" transform="matrix(-1 0 0 1 375 0)" fill="white"/>
<circle cx="240.5" cy="240.5" r="240.5" transform="matrix(-1 0 0 1 521 208)" fill="#E7F4FF"/>
<rect opacity="0.35" x="-0.5" y="0.5" width="21" height="10.3333" rx="2.16667" transform="matrix(-1 0 0 1 52.3267 10.3333)" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M30.3267 14V18C29.5219 17.6612 28.9986 16.8731 28.9986 16C28.9986 15.1269 29.5219 14.3388 30.3267 14" fill="white" fill-opacity="0.6"/>
<rect width="18" height="7.33333" rx="1.33333" transform="matrix(-1 0 0 1 51.3267 12.3333)" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.9931 12.615C63.7684 12.6151 61.6287 13.4693 60.0163 15.0008C59.8949 15.1191 59.7009 15.1176 59.5813 14.9975L58.4207 13.8272C58.3601 13.7663 58.3264 13.6837 58.3269 13.5979C58.3274 13.5121 58.3621 13.4299 58.4233 13.3697C62.6553 9.31751 69.3316 9.31751 73.5635 13.3697C73.6248 13.4299 73.6596 13.512 73.6601 13.5978C73.6607 13.6837 73.627 13.7662 73.5665 13.8272L72.4056 14.9975C72.2861 15.1178 72.0918 15.1193 71.9705 15.0008C70.3579 13.4692 68.218 12.615 65.9931 12.615ZM65.9931 16.4226C64.7707 16.4226 63.592 16.8765 62.6859 17.6963C62.5634 17.8126 62.3703 17.8101 62.2509 17.6906L61.0916 16.5203C61.0306 16.4589 60.9967 16.3756 60.9976 16.2891C60.9984 16.2025 61.034 16.12 61.0963 16.0598C63.8555 13.4954 68.1284 13.4954 70.8875 16.0598C70.9499 16.12 70.9854 16.2026 70.9862 16.2891C70.9871 16.3757 70.9531 16.459 70.8919 16.5203L69.7329 17.6906C69.6135 17.8101 69.4204 17.8126 69.2979 17.6963C68.3924 16.877 67.2146 16.4231 65.9931 16.4226ZM63.6709 18.9845C63.6691 19.0712 63.7032 19.1549 63.7652 19.2157L65.7705 21.2377C65.8293 21.2971 65.9095 21.3306 65.9931 21.3306C66.0767 21.3306 66.1569 21.2971 66.2156 21.2377L68.2213 19.2157C68.2832 19.1549 68.3173 19.0712 68.3155 18.9844C68.3136 18.8976 68.276 18.8154 68.2116 18.7573C66.9309 17.675 65.0553 17.675 63.7746 18.7573C63.7102 18.8155 63.6726 18.8977 63.6709 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.6602 10.6665H80.6602C81.2124 10.6665 81.6602 11.1142 81.6602 11.6665V20.3332C81.6602 20.8855 81.2124 21.3332 80.6602 21.3332H79.6602C79.1079 21.3332 78.6602 20.8855 78.6602 20.3332V11.6665C78.6602 11.1142 79.1079 10.6665 79.6602 10.6665ZM85.3268 12.9998H84.3268C83.7745 12.9998 83.3268 13.4476 83.3268 13.9998V20.3332C83.3268 20.8855 83.7745 21.3332 84.3268 21.3332H85.3268C85.8791 21.3332 86.3268 20.8855 86.3268 20.3332V13.9998C86.3268 13.4476 85.8791 12.9998 85.3268 12.9998ZM88.9935 15.3332H89.9935C90.5458 15.3332 90.9935 15.7809 90.9935 16.3332V20.3332C90.9935 20.8855 90.5458 21.3332 89.9935 21.3332H88.9935C88.4412 21.3332 87.9935 20.8855 87.9935 20.3332V16.3332C87.9935 15.7809 88.4412 15.3332 88.9935 15.3332ZM93.6602 17.3332H94.6602C95.2124 17.3332 95.6602 17.7809 95.6602 18.3332V20.3332C95.6602 20.8855 95.2124 21.3332 94.6602 21.3332H93.6602C93.1079 21.3332 92.6602 20.8855 92.6602 20.3332V18.3332C92.6602 17.7809 93.1079 17.3332 93.6602 17.3332Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3978_4255">
<rect width="375" height="812" fill="white" transform="matrix(-1 0 0 1 375 0)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

17
assets/images/sc1bg.svg Normal file
View File

@ -0,0 +1,17 @@
<svg width="375" height="812" viewBox="0 0 375 812" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3861_6297)">
<rect width="375" height="812" rx="20" fill="white"/>
<circle cx="94.5" cy="448.5" r="240.5" fill="#E7F4FF"/>
<rect opacity="0.35" x="322.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M344.673 14V18C345.478 17.6612 346.001 16.8731 346.001 16C346.001 15.1269 345.478 14.3388 344.673 14Z" fill="white" fill-opacity="0.6"/>
<rect x="323.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M309.007 12.615C311.232 12.6151 313.371 13.4693 314.984 15.0008C315.105 15.1191 315.299 15.1176 315.419 14.9975L316.579 13.8272C316.64 13.7663 316.674 13.6837 316.673 13.5979C316.673 13.5121 316.638 13.4299 316.577 13.3697C312.345 9.31751 305.668 9.31751 301.437 13.3697C301.375 13.4299 301.34 13.512 301.34 13.5978C301.339 13.6837 301.373 13.7662 301.433 13.8272L302.594 14.9975C302.714 15.1178 302.908 15.1193 303.029 15.0008C304.642 13.4692 306.782 12.615 309.007 12.615ZM309.007 16.4226C310.229 16.4226 311.408 16.8765 312.314 17.6963C312.437 17.8126 312.63 17.8101 312.749 17.6906L313.908 16.5203C313.969 16.4589 314.003 16.3756 314.002 16.2891C314.002 16.2025 313.966 16.12 313.904 16.0598C311.145 13.4954 306.872 13.4954 304.112 16.0598C304.05 16.12 304.015 16.2026 304.014 16.2891C304.013 16.3757 304.047 16.459 304.108 16.5203L305.267 17.6906C305.387 17.8101 305.58 17.8126 305.702 17.6963C306.608 16.877 307.785 16.4231 309.007 16.4226ZM311.329 18.9845C311.331 19.0712 311.297 19.1549 311.235 19.2157L309.229 21.2377C309.171 21.2971 309.091 21.3306 309.007 21.3306C308.923 21.3306 308.843 21.2971 308.784 21.2377L306.779 19.2157C306.717 19.1549 306.683 19.0712 306.685 18.9844C306.686 18.8976 306.724 18.8154 306.788 18.7573C308.069 17.675 309.945 17.675 311.225 18.7573C311.29 18.8155 311.327 18.8977 311.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M295.34 10.6665H294.34C293.788 10.6665 293.34 11.1142 293.34 11.6665V20.3332C293.34 20.8855 293.788 21.3332 294.34 21.3332H295.34C295.892 21.3332 296.34 20.8855 296.34 20.3332V11.6665C296.34 11.1142 295.892 10.6665 295.34 10.6665ZM289.673 12.9998H290.673C291.225 12.9998 291.673 13.4476 291.673 13.9998V20.3332C291.673 20.8855 291.225 21.3332 290.673 21.3332H289.673C289.121 21.3332 288.673 20.8855 288.673 20.3332V13.9998C288.673 13.4476 289.121 12.9998 289.673 12.9998ZM286.007 15.3332H285.007C284.454 15.3332 284.007 15.7809 284.007 16.3332V20.3332C284.007 20.8855 284.454 21.3332 285.007 21.3332H286.007C286.559 21.3332 287.007 20.8855 287.007 20.3332V16.3332C287.007 15.7809 286.559 15.3332 286.007 15.3332ZM281.34 17.3332H280.34C279.788 17.3332 279.34 17.7809 279.34 18.3332V20.3332C279.34 20.8855 279.788 21.3332 280.34 21.3332H281.34C281.892 21.3332 282.34 20.8855 282.34 20.3332V18.3332C282.34 17.7809 281.892 17.3332 281.34 17.3332Z" fill="white"/>
</g>
<rect x="0.5" y="0.5" width="374" height="811" rx="19.5" stroke="black"/>
<defs>
<clipPath id="clip0_3861_6297">
<rect width="375" height="812" rx="20" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,17 @@
<svg width="500" height="917" viewBox="0 0 500 917" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3978_4273)">
<rect width="500" height="917" fill="white"/>
<circle cx="144" cy="458" r="290" fill="#E7F4FF"/>
<rect opacity="0.35" x="447.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M469.673 14V18C470.478 17.6612 471.001 16.8731 471.001 16C471.001 15.1269 470.478 14.3388 469.673 14" fill="white" fill-opacity="0.6"/>
<rect x="448.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M434.007 12.615C436.232 12.6151 438.371 13.4693 439.984 15.0008C440.105 15.1191 440.299 15.1176 440.419 14.9975L441.579 13.8272C441.64 13.7663 441.674 13.6837 441.673 13.5979C441.673 13.5121 441.638 13.4299 441.577 13.3697C437.345 9.31751 430.668 9.31751 426.437 13.3697C426.375 13.4299 426.34 13.512 426.34 13.5978C426.339 13.6837 426.373 13.7662 426.433 13.8272L427.594 14.9975C427.714 15.1178 427.908 15.1193 428.029 15.0008C429.642 13.4692 431.782 12.615 434.007 12.615ZM434.007 16.4226C435.229 16.4226 436.408 16.8765 437.314 17.6963C437.437 17.8126 437.63 17.8101 437.749 17.6906L438.908 16.5203C438.969 16.4589 439.003 16.3756 439.002 16.2891C439.002 16.2025 438.966 16.12 438.904 16.0598C436.145 13.4954 431.872 13.4954 429.112 16.0598C429.05 16.12 429.015 16.2026 429.014 16.2891C429.013 16.3757 429.047 16.459 429.108 16.5203L430.267 17.6906C430.387 17.8101 430.58 17.8126 430.702 17.6963C431.608 16.877 432.785 16.4231 434.007 16.4226ZM436.329 18.9845C436.331 19.0712 436.297 19.1549 436.235 19.2157L434.229 21.2377C434.171 21.2971 434.091 21.3306 434.007 21.3306C433.923 21.3306 433.843 21.2971 433.784 21.2377L431.779 19.2157C431.717 19.1549 431.683 19.0712 431.685 18.9844C431.686 18.8976 431.724 18.8154 431.788 18.7573C433.069 17.675 434.945 17.675 436.225 18.7573C436.29 18.8155 436.327 18.8977 436.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M420.34 10.6665H419.34C418.788 10.6665 418.34 11.1142 418.34 11.6665V20.3332C418.34 20.8855 418.788 21.3332 419.34 21.3332H420.34C420.892 21.3332 421.34 20.8855 421.34 20.3332V11.6665C421.34 11.1142 420.892 10.6665 420.34 10.6665ZM414.673 12.9998H415.673C416.225 12.9998 416.673 13.4476 416.673 13.9998V20.3332C416.673 20.8855 416.225 21.3332 415.673 21.3332H414.673C414.121 21.3332 413.673 20.8855 413.673 20.3332V13.9998C413.673 13.4476 414.121 12.9998 414.673 12.9998ZM411.007 15.3332H410.007C409.454 15.3332 409.007 15.7809 409.007 16.3332V20.3332C409.007 20.8855 409.454 21.3332 410.007 21.3332H411.007C411.559 21.3332 412.007 20.8855 412.007 20.3332V16.3332C412.007 15.7809 411.559 15.3332 411.007 15.3332ZM406.34 17.3332H405.34C404.788 17.3332 404.34 17.7809 404.34 18.3332V20.3332C404.34 20.8855 404.788 21.3332 405.34 21.3332H406.34C406.892 21.3332 407.34 20.8855 407.34 20.3332V18.3332C407.34 17.7809 406.892 17.3332 406.34 17.3332Z" fill="white"/>
<path d="M80.6696 8.35C79.7096 8.35 78.8946 8.555 78.2246 8.965C77.5446 9.365 77.0246 9.95 76.6646 10.72C76.3046 11.49 76.1246 12.44 76.1246 13.57C76.1246 14.77 76.3446 15.785 76.7846 16.615C77.2146 17.445 77.8146 18.075 78.5846 18.505C79.3546 18.935 80.2496 19.15 81.2696 19.15C81.7996 19.15 82.3046 19.095 82.7846 18.985C83.2646 18.875 83.6796 18.705 84.0296 18.475L83.3096 17.005C83.0196 17.195 82.7046 17.33 82.3646 17.41C82.0246 17.48 81.6746 17.515 81.3146 17.515C80.3246 17.515 79.5396 17.21 78.9596 16.6C78.3796 15.99 78.0896 15.09 78.0896 13.9C78.0896 13.71 78.0946 13.49 78.1046 13.24C78.1146 12.98 78.1496 12.72 78.2096 12.46L77.6096 13.12C77.7796 13.53 78.0246 13.875 78.3446 14.155C78.6646 14.425 79.0396 14.63 79.4696 14.77C79.8996 14.91 80.3746 14.98 80.8946 14.98C81.5746 14.98 82.1896 14.85 82.7396 14.59C83.2796 14.32 83.7096 13.945 84.0296 13.465C84.3496 12.975 84.5096 12.405 84.5096 11.755C84.5096 11.055 84.3396 10.455 83.9996 9.955C83.6596 9.445 83.1996 9.05 82.6196 8.77C82.0296 8.49 81.3796 8.35 80.6696 8.35ZM80.5646 9.88C80.9646 9.88 81.3196 9.955 81.6296 10.105C81.9396 10.245 82.1846 10.45 82.3646 10.72C82.5346 10.98 82.6196 11.295 82.6196 11.665C82.6196 12.215 82.4296 12.65 82.0496 12.97C81.6696 13.29 81.1596 13.45 80.5196 13.45C80.0996 13.45 79.7296 13.375 79.4096 13.225C79.0896 13.065 78.8396 12.85 78.6596 12.58C78.4796 12.3 78.3896 11.99 78.3896 11.65C78.3896 11.32 78.4746 11.025 78.6446 10.765C78.8146 10.495 79.0596 10.28 79.3796 10.12C79.6996 9.96 80.0946 9.88 80.5646 9.88ZM73.9153 13.39C74.2553 13.39 74.5453 13.275 74.7853 13.045C75.0253 12.805 75.1453 12.505 75.1453 12.145C75.1453 11.765 75.0253 11.465 74.7853 11.245C74.5453 11.015 74.2553 10.9 73.9153 10.9C73.5753 10.9 73.2853 11.015 73.0453 11.245C72.8053 11.465 72.6853 11.765 72.6853 12.145C72.6853 12.505 72.8053 12.805 73.0453 13.045C73.2853 13.275 73.5753 13.39 73.9153 13.39ZM73.9153 19.105C74.2553 19.105 74.5453 18.99 74.7853 18.76C75.0253 18.52 75.1453 18.22 75.1453 17.86C75.1453 17.48 75.0253 17.18 74.7853 16.96C74.5453 16.73 74.2553 16.615 73.9153 16.615C73.5753 16.615 73.2853 16.73 73.0453 16.96C72.8053 17.18 72.6853 17.48 72.6853 17.86C72.6853 18.22 72.8053 18.52 73.0453 18.76C73.2853 18.99 73.5753 19.105 73.9153 19.105ZM71.8531 16.615V15.265L66.6781 8.5H64.5931L69.6931 15.265L70.6681 14.965H62.3431V16.615H71.8531ZM66.0931 19V16.615L66.0331 14.965V12.85H64.2031V19H66.0931ZM60.5033 19V9.25L59.6483 10.135H62.7233V8.5H58.5533V19H60.5033Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3978_4273">
<rect width="500" height="917" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

9
assets/images/sc1img.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
assets/images/sc1img2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1,17 @@
<svg width="500" height="917" viewBox="0 0 500 917" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3978_4291)">
<rect width="500" height="917" fill="white"/>
<circle cx="356" cy="458" r="290" fill="#E7F4FF"/>
<rect opacity="0.35" x="447.173" y="10.8334" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M469.673 14V18C470.478 17.6612 471.001 16.8731 471.001 16C471.001 15.1269 470.478 14.3388 469.673 14" fill="white" fill-opacity="0.6"/>
<rect x="448.673" y="12.3334" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M434.007 12.6152C436.232 12.6153 438.371 13.4694 439.984 15.001C440.105 15.1192 440.299 15.1177 440.419 14.9976L441.579 13.8273C441.64 13.7664 441.674 13.6839 441.673 13.598C441.673 13.5122 441.638 13.4301 441.577 13.3699C437.345 9.31763 430.668 9.31763 426.437 13.3699C426.375 13.43 426.34 13.5121 426.34 13.598C426.339 13.6838 426.373 13.7663 426.433 13.8273L427.594 14.9976C427.714 15.1179 427.908 15.1194 428.029 15.001C429.642 13.4693 431.782 12.6152 434.007 12.6152ZM434.007 16.4227C435.229 16.4227 436.408 16.8766 437.314 17.6964C437.437 17.8127 437.63 17.8102 437.749 17.6907L438.908 16.5204C438.969 16.459 439.003 16.3757 439.002 16.2892C439.002 16.2027 438.966 16.1201 438.904 16.0599C436.145 13.4955 431.872 13.4955 429.112 16.0599C429.05 16.1201 429.015 16.2027 429.014 16.2893C429.013 16.3758 429.047 16.4591 429.108 16.5204L430.267 17.6907C430.387 17.8102 430.58 17.8127 430.702 17.6964C431.608 16.8772 432.785 16.4233 434.007 16.4227ZM436.329 18.9846C436.331 19.0714 436.297 19.155 436.235 19.2158L434.229 21.2378C434.171 21.2972 434.091 21.3307 434.007 21.3307C433.923 21.3307 433.843 21.2972 433.784 21.2378L431.779 19.2158C431.717 19.155 431.683 19.0713 431.685 18.9845C431.686 18.8977 431.724 18.8156 431.788 18.7574C433.069 17.6751 434.945 17.6751 436.225 18.7574C436.29 18.8156 436.327 18.8978 436.329 18.9846Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M420.34 10.6667H419.34C418.788 10.6667 418.34 11.1145 418.34 11.6667V20.3334C418.34 20.8857 418.788 21.3334 419.34 21.3334H420.34C420.892 21.3334 421.34 20.8857 421.34 20.3334V11.6667C421.34 11.1145 420.892 10.6667 420.34 10.6667ZM414.673 13.0001H415.673C416.225 13.0001 416.673 13.4478 416.673 14.0001V20.3334C416.673 20.8857 416.225 21.3334 415.673 21.3334H414.673C414.121 21.3334 413.673 20.8857 413.673 20.3334V14.0001C413.673 13.4478 414.121 13.0001 414.673 13.0001ZM411.007 15.3334H410.007C409.454 15.3334 409.007 15.7811 409.007 16.3334V20.3334C409.007 20.8857 409.454 21.3334 410.007 21.3334H411.007C411.559 21.3334 412.007 20.8857 412.007 20.3334V16.3334C412.007 15.7811 411.559 15.3334 411.007 15.3334ZM406.34 17.3334H405.34C404.788 17.3334 404.34 17.7811 404.34 18.3334V20.3334C404.34 20.8857 404.788 21.3334 405.34 21.3334H406.34C406.892 21.3334 407.34 20.8857 407.34 20.3334V18.3334C407.34 17.7811 406.892 17.3334 406.34 17.3334Z" fill="white"/>
<path d="M80.6696 8.35C79.7096 8.35 78.8946 8.555 78.2246 8.965C77.5446 9.365 77.0246 9.95 76.6646 10.72C76.3046 11.49 76.1246 12.44 76.1246 13.57C76.1246 14.77 76.3446 15.785 76.7846 16.615C77.2146 17.445 77.8146 18.075 78.5846 18.505C79.3546 18.935 80.2496 19.15 81.2696 19.15C81.7996 19.15 82.3046 19.095 82.7846 18.985C83.2646 18.875 83.6796 18.705 84.0296 18.475L83.3096 17.005C83.0196 17.195 82.7046 17.33 82.3646 17.41C82.0246 17.48 81.6746 17.515 81.3146 17.515C80.3246 17.515 79.5396 17.21 78.9596 16.6C78.3796 15.99 78.0896 15.09 78.0896 13.9C78.0896 13.71 78.0946 13.49 78.1046 13.24C78.1146 12.98 78.1496 12.72 78.2096 12.46L77.6096 13.12C77.7796 13.53 78.0246 13.875 78.3446 14.155C78.6646 14.425 79.0396 14.63 79.4696 14.77C79.8996 14.91 80.3746 14.98 80.8946 14.98C81.5746 14.98 82.1896 14.85 82.7396 14.59C83.2796 14.32 83.7096 13.945 84.0296 13.465C84.3496 12.975 84.5096 12.405 84.5096 11.755C84.5096 11.055 84.3396 10.455 83.9996 9.955C83.6596 9.445 83.1996 9.05 82.6196 8.77C82.0296 8.49 81.3796 8.35 80.6696 8.35ZM80.5646 9.88C80.9646 9.88 81.3196 9.955 81.6296 10.105C81.9396 10.245 82.1846 10.45 82.3646 10.72C82.5346 10.98 82.6196 11.295 82.6196 11.665C82.6196 12.215 82.4296 12.65 82.0496 12.97C81.6696 13.29 81.1596 13.45 80.5196 13.45C80.0996 13.45 79.7296 13.375 79.4096 13.225C79.0896 13.065 78.8396 12.85 78.6596 12.58C78.4796 12.3 78.3896 11.99 78.3896 11.65C78.3896 11.32 78.4746 11.025 78.6446 10.765C78.8146 10.495 79.0596 10.28 79.3796 10.12C79.6996 9.96 80.0946 9.88 80.5646 9.88ZM73.9153 13.39C74.2553 13.39 74.5453 13.275 74.7853 13.045C75.0253 12.805 75.1453 12.505 75.1453 12.145C75.1453 11.765 75.0253 11.465 74.7853 11.245C74.5453 11.015 74.2553 10.9 73.9153 10.9C73.5753 10.9 73.2853 11.015 73.0453 11.245C72.8053 11.465 72.6853 11.765 72.6853 12.145C72.6853 12.505 72.8053 12.805 73.0453 13.045C73.2853 13.275 73.5753 13.39 73.9153 13.39ZM73.9153 19.105C74.2553 19.105 74.5453 18.99 74.7853 18.76C75.0253 18.52 75.1453 18.22 75.1453 17.86C75.1453 17.48 75.0253 17.18 74.7853 16.96C74.5453 16.73 74.2553 16.615 73.9153 16.615C73.5753 16.615 73.2853 16.73 73.0453 16.96C72.8053 17.18 72.6853 17.48 72.6853 17.86C72.6853 18.22 72.8053 18.52 73.0453 18.76C73.2853 18.99 73.5753 19.105 73.9153 19.105ZM71.8531 16.615V15.265L66.6781 8.5H64.5931L69.6931 15.265L70.6681 14.965H62.3431V16.615H71.8531ZM66.0931 19V16.615L66.0331 14.965V12.85H64.2031V19H66.0931ZM60.5033 19V9.25L59.6483 10.135H62.7233V8.5H58.5533V19H60.5033Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3978_4291">
<rect width="500" height="917" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

2400
assets/images/sc2img.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.9 MiB

BIN
assets/images/sc2img2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

BIN
assets/images/sc3img2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

View File

@ -0,0 +1,16 @@
<svg width="375" height="812" viewBox="0 0 375 812" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3861_6297)">
<rect width="375" height="812" fill="white"/>
<circle cx="94.5" cy="448.5" r="240.5" fill="#E7F4FF"/>
<rect opacity="0.35" x="322.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M344.673 14V18C345.478 17.6612 346.001 16.8731 346.001 16C346.001 15.1269 345.478 14.3388 344.673 14Z" fill="white" fill-opacity="0.6"/>
<rect x="323.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M309.007 12.615C311.232 12.6151 313.371 13.4693 314.984 15.0008C315.105 15.1191 315.299 15.1176 315.419 14.9975L316.579 13.8272C316.64 13.7663 316.674 13.6837 316.673 13.5979C316.673 13.5121 316.638 13.4299 316.577 13.3697C312.345 9.31751 305.668 9.31751 301.437 13.3697C301.375 13.4299 301.34 13.512 301.34 13.5978C301.339 13.6837 301.373 13.7662 301.433 13.8272L302.594 14.9975C302.714 15.1178 302.908 15.1193 303.029 15.0008C304.642 13.4692 306.782 12.615 309.007 12.615ZM309.007 16.4226C310.229 16.4226 311.408 16.8765 312.314 17.6963C312.437 17.8126 312.63 17.8101 312.749 17.6906L313.908 16.5203C313.969 16.4589 314.003 16.3756 314.002 16.2891C314.002 16.2025 313.966 16.12 313.904 16.0598C311.145 13.4954 306.872 13.4954 304.112 16.0598C304.05 16.12 304.015 16.2026 304.014 16.2891C304.013 16.3757 304.047 16.459 304.108 16.5203L305.267 17.6906C305.387 17.8101 305.58 17.8126 305.702 17.6963C306.608 16.877 307.785 16.4231 309.007 16.4226ZM311.329 18.9845C311.331 19.0712 311.297 19.1549 311.235 19.2157L309.229 21.2377C309.171 21.2971 309.091 21.3306 309.007 21.3306C308.923 21.3306 308.843 21.2971 308.784 21.2377L306.779 19.2157C306.717 19.1549 306.683 19.0712 306.685 18.9844C306.686 18.8976 306.724 18.8154 306.788 18.7573C308.069 17.675 309.945 17.675 311.225 18.7573C311.29 18.8155 311.327 18.8977 311.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M295.34 10.6665H294.34C293.788 10.6665 293.34 11.1142 293.34 11.6665V20.3332C293.34 20.8855 293.788 21.3332 294.34 21.3332H295.34C295.892 21.3332 296.34 20.8855 296.34 20.3332V11.6665C296.34 11.1142 295.892 10.6665 295.34 10.6665ZM289.673 12.9998H290.673C291.225 12.9998 291.673 13.4476 291.673 13.9998V20.3332C291.673 20.8855 291.225 21.3332 290.673 21.3332H289.673C289.121 21.3332 288.673 20.8855 288.673 20.3332V13.9998C288.673 13.4476 289.121 12.9998 289.673 12.9998ZM286.007 15.3332H285.007C284.454 15.3332 284.007 15.7809 284.007 16.3332V20.3332C284.007 20.8855 284.454 21.3332 285.007 21.3332H286.007C286.559 21.3332 287.007 20.8855 287.007 20.3332V16.3332C287.007 15.7809 286.559 15.3332 286.007 15.3332ZM281.34 17.3332H280.34C279.788 17.3332 279.34 17.7809 279.34 18.3332V20.3332C279.34 20.8855 279.788 21.3332 280.34 21.3332H281.34C281.892 21.3332 282.34 20.8855 282.34 20.3332V18.3332C282.34 17.7809 281.892 17.3332 281.34 17.3332Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_3861_6297">
<rect width="375" height="812" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

18
assets/images/screen2.svg Normal file
View File

@ -0,0 +1,18 @@
<svg width="428" height="926" viewBox="0 0 428 926" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3861_6208)">
<rect width="428" height="926" rx="20" fill="white"/>
<circle cx="320" cy="449" r="270" fill="#E7F4FF"/>
<rect opacity="0.35" x="375.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M397.673 14V18C398.478 17.6612 399.001 16.8731 399.001 16C399.001 15.1269 398.478 14.3388 397.673 14" fill="white" fill-opacity="0.6"/>
<rect x="376.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M362.007 12.615C364.232 12.6151 366.371 13.4693 367.984 15.0008C368.105 15.1191 368.299 15.1176 368.419 14.9975L369.579 13.8272C369.64 13.7663 369.674 13.6837 369.673 13.5979C369.673 13.5121 369.638 13.4299 369.577 13.3697C365.345 9.31751 358.668 9.31751 354.437 13.3697C354.375 13.4299 354.34 13.512 354.34 13.5978C354.339 13.6837 354.373 13.7662 354.433 13.8272L355.594 14.9975C355.714 15.1178 355.908 15.1193 356.029 15.0008C357.642 13.4692 359.782 12.615 362.007 12.615ZM362.007 16.4226C363.229 16.4226 364.408 16.8765 365.314 17.6963C365.437 17.8126 365.63 17.8101 365.749 17.6906L366.908 16.5203C366.969 16.4589 367.003 16.3756 367.002 16.2891C367.002 16.2025 366.966 16.12 366.904 16.0598C364.145 13.4954 359.872 13.4954 357.112 16.0598C357.05 16.12 357.015 16.2026 357.014 16.2891C357.013 16.3757 357.047 16.459 357.108 16.5203L358.267 17.6906C358.387 17.8101 358.58 17.8126 358.702 17.6963C359.608 16.877 360.785 16.4231 362.007 16.4226ZM364.329 18.9845C364.331 19.0712 364.297 19.1549 364.235 19.2157L362.229 21.2377C362.171 21.2971 362.091 21.3306 362.007 21.3306C361.923 21.3306 361.843 21.2971 361.784 21.2377L359.779 19.2157C359.717 19.1549 359.683 19.0712 359.685 18.9844C359.686 18.8976 359.724 18.8154 359.788 18.7573C361.069 17.675 362.945 17.675 364.225 18.7573C364.29 18.8155 364.327 18.8977 364.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M348.34 10.6665H347.34C346.788 10.6665 346.34 11.1142 346.34 11.6665V20.3332C346.34 20.8855 346.788 21.3332 347.34 21.3332H348.34C348.892 21.3332 349.34 20.8855 349.34 20.3332V11.6665C349.34 11.1142 348.892 10.6665 348.34 10.6665ZM342.673 12.9998H343.673C344.225 12.9998 344.673 13.4476 344.673 13.9998V20.3332C344.673 20.8855 344.225 21.3332 343.673 21.3332H342.673C342.121 21.3332 341.673 20.8855 341.673 20.3332V13.9998C341.673 13.4476 342.121 12.9998 342.673 12.9998ZM339.007 15.3332H338.007C337.454 15.3332 337.007 15.7809 337.007 16.3332V20.3332C337.007 20.8855 337.454 21.3332 338.007 21.3332H339.007C339.559 21.3332 340.007 20.8855 340.007 20.3332V16.3332C340.007 15.7809 339.559 15.3332 339.007 15.3332ZM334.34 17.3332H333.34C332.788 17.3332 332.34 17.7809 332.34 18.3332V20.3332C332.34 20.8855 332.788 21.3332 333.34 21.3332H334.34C334.892 21.3332 335.34 20.8855 335.34 20.3332V18.3332C335.34 17.7809 334.892 17.3332 334.34 17.3332Z" fill="white"/>
<path d="M25.64 12.35C27.08 12.35 28.195 12.8 28.985 13.7C29.785 14.6 30.185 15.89 30.185 17.57C30.185 18.75 29.97 19.76 29.54 20.6C29.11 21.43 28.505 22.065 27.725 22.505C26.955 22.935 26.06 23.15 25.04 23.15C24.5 23.15 23.99 23.095 23.51 22.985C23.04 22.865 22.63 22.695 22.28 22.475L23 21.005C23.52 21.345 24.185 21.515 24.995 21.515C26.005 21.515 26.795 21.205 27.365 20.585C27.935 19.965 28.22 19.07 28.22 17.9V17.885C27.91 18.245 27.515 18.52 27.035 18.71C26.555 18.89 26.015 18.98 25.415 18.98C24.725 18.98 24.105 18.85 23.555 18.59C23.005 18.32 22.575 17.94 22.265 17.45C21.955 16.96 21.8 16.395 21.8 15.755C21.8 15.075 21.97 14.48 22.31 13.97C22.65 13.45 23.11 13.05 23.69 12.77C24.27 12.49 24.92 12.35 25.64 12.35ZM25.79 17.45C26.42 17.45 26.93 17.28 27.32 16.94C27.72 16.6 27.92 16.17 27.92 15.65C27.92 15.14 27.725 14.72 27.335 14.39C26.955 14.05 26.425 13.88 25.745 13.88C25.135 13.88 24.64 14.045 24.26 14.375C23.88 14.695 23.69 15.125 23.69 15.665C23.69 16.215 23.88 16.65 24.26 16.97C24.64 17.29 25.15 17.45 25.79 17.45ZM32.3943 17.39C32.0543 17.39 31.7643 17.275 31.5243 17.045C31.2843 16.805 31.1643 16.505 31.1643 16.145C31.1643 15.775 31.2793 15.475 31.5093 15.245C31.7493 15.015 32.0443 14.9 32.3943 14.9C32.7443 14.9 33.0343 15.015 33.2643 15.245C33.5043 15.475 33.6243 15.775 33.6243 16.145C33.6243 16.505 33.5043 16.805 33.2643 17.045C33.0243 17.275 32.7343 17.39 32.3943 17.39ZM32.3943 23.105C32.0543 23.105 31.7643 22.99 31.5243 22.76C31.2843 22.52 31.1643 22.22 31.1643 21.86C31.1643 21.49 31.2793 21.19 31.5093 20.96C31.7493 20.73 32.0443 20.615 32.3943 20.615C32.7443 20.615 33.0343 20.73 33.2643 20.96C33.5043 21.19 33.6243 21.49 33.6243 21.86C33.6243 22.22 33.5043 22.52 33.2643 22.76C33.0243 22.99 32.7343 23.105 32.3943 23.105ZM43.9664 20.615H42.1064V23H40.2164V20.615H34.4564V19.265L39.6314 12.5H41.7164L36.8414 18.965H40.2764V16.85H42.1064V18.965H43.9664V20.615ZM48.1371 12.5V23H46.1871V14.135H43.9671V12.5H48.1371Z" fill="white"/>
</g>
<rect x="0.5" y="0.5" width="427" height="925" rx="19.5" stroke="black"/>
<defs>
<clipPath id="clip0_3861_6208">
<rect width="428" height="926" rx="20" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,16 @@
<svg width="375" height="812" viewBox="0 0 375 812" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3861_6208)">
<rect width="375" height="812" fill="white"/>
<rect opacity="0.35" x="322.173" y="10.8333" width="21" height="10.3333" rx="2.16667" stroke="white" stroke-opacity="0.6"/>
<path opacity="0.4" d="M344.673 14V18C345.478 17.6612 346.001 16.8731 346.001 16C346.001 15.1269 345.478 14.3388 344.673 14Z" fill="white" fill-opacity="0.6"/>
<rect x="323.673" y="12.3333" width="18" height="7.33333" rx="1.33333" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M309.007 12.615C311.232 12.6151 313.371 13.4693 314.984 15.0008C315.105 15.1191 315.299 15.1176 315.419 14.9975L316.579 13.8272C316.64 13.7663 316.674 13.6837 316.673 13.5979C316.673 13.5121 316.638 13.4299 316.577 13.3697C312.345 9.31751 305.668 9.31751 301.437 13.3697C301.375 13.4299 301.34 13.512 301.34 13.5978C301.339 13.6837 301.373 13.7662 301.433 13.8272L302.594 14.9975C302.714 15.1178 302.908 15.1193 303.029 15.0008C304.642 13.4692 306.782 12.615 309.007 12.615ZM309.007 16.4226C310.229 16.4226 311.408 16.8765 312.314 17.6963C312.437 17.8126 312.63 17.8101 312.749 17.6906L313.908 16.5203C313.969 16.4589 314.003 16.3756 314.002 16.2891C314.002 16.2025 313.966 16.12 313.904 16.0598C311.145 13.4954 306.872 13.4954 304.112 16.0598C304.05 16.12 304.015 16.2026 304.014 16.2891C304.013 16.3757 304.047 16.459 304.108 16.5203L305.267 17.6906C305.387 17.8101 305.58 17.8126 305.702 17.6963C306.608 16.877 307.785 16.4231 309.007 16.4226ZM311.329 18.9845C311.331 19.0712 311.297 19.1549 311.235 19.2157L309.229 21.2377C309.171 21.2971 309.091 21.3306 309.007 21.3306C308.923 21.3306 308.843 21.2971 308.784 21.2377L306.779 19.2157C306.717 19.1549 306.683 19.0712 306.685 18.9844C306.686 18.8976 306.724 18.8154 306.788 18.7573C308.069 17.675 309.945 17.675 311.225 18.7573C311.29 18.8155 311.327 18.8977 311.329 18.9845Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M295.34 10.6665H294.34C293.788 10.6665 293.34 11.1142 293.34 11.6665V20.3332C293.34 20.8855 293.788 21.3332 294.34 21.3332H295.34C295.892 21.3332 296.34 20.8855 296.34 20.3332V11.6665C296.34 11.1142 295.892 10.6665 295.34 10.6665ZM289.673 12.9998H290.673C291.225 12.9998 291.673 13.4476 291.673 13.9998V20.3332C291.673 20.8855 291.225 21.3332 290.673 21.3332H289.673C289.121 21.3332 288.673 20.8855 288.673 20.3332V13.9998C288.673 13.4476 289.121 12.9998 289.673 12.9998ZM286.007 15.3332H285.007C284.454 15.3332 284.007 15.7809 284.007 16.3332V20.3332C284.007 20.8855 284.454 21.3332 285.007 21.3332H286.007C286.559 21.3332 287.007 20.8855 287.007 20.3332V16.3332C287.007 15.7809 286.559 15.3332 286.007 15.3332ZM281.34 17.3332H280.34C279.788 17.3332 279.34 17.7809 279.34 18.3332V20.3332C279.34 20.8855 279.788 21.3332 280.34 21.3332H281.34C281.892 21.3332 282.34 20.8855 282.34 20.3332V18.3332C282.34 17.7809 281.892 17.3332 281.34 17.3332Z" fill="white"/>
<circle cx="280.5" cy="448.5" r="240.5" fill="#E7F4FF"/>
</g>
<defs>
<clipPath id="clip0_3861_6208">
<rect width="375" height="812" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -0,0 +1,184 @@
{
"data": [
{
"id": "MedInsight",
"name": "Medical Insights Form",
"form-fields": [
{
"sectionName": "Medical Insight",
"multiple": false,
"sectionList": [
{
"name": "HCP Name",
"id": "hcpname",
"depid": "",
"widget": "label",
"input": "label",
"validation": {
"isRequired": false
}
},
{
"name": "Date",
"id": "date",
"depid": "",
"widget": "text",
"input": "Date",
"validation": {
"isRequired": true
}
},
{
"name": "Therapeutic Area",
"param": "therapeutic_area",
"id": "therapeutic",
"selectedValue": [],
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Acute Neurology1",
"name": "Acute Neurology1"
},
{
"id": "Cystic Fibrosis",
"name": "Cystic Fibrosis"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Product",
"id": "product",
"depid": "therapeutic",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Prometra Pump",
"pid": "Acute Neurology1",
"name": "Prometra Pump"
},
{
"id": "Prometra Pump",
"pid": "Cystic Fibrosis",
"name": "Prometra Pump"
},
{
"id": "Prometra Catheter",
"pid": "Cystic Fibrosis",
"name": "Prometra Catheter"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Source Type",
"id": "sourcetype",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Advisory Board/Expert Committee",
"name": "Advisory Board/Expert Committee"
},
{
"id": "Congress",
"name": "Congress"
},
{
"id": "Industry professional direct knowledge ",
"name": "Industry professional direct knowledge "
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Congress Source",
"id": "congresssource",
"depid": "sourcetype",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Industry professional",
"pid": "Congress",
"name": "Industry professional"
},
{
"id": "Symposium",
"pid": "Congress",
"name": "Symposium"
}
],
"validation": {
"isRequired": false
}
},
{
"name": "Congress Name",
"id": "congressName",
"depid": "sourcetype",
"widget": "text",
"input": "text",
"validation": {
"isRequired": false
}
}
]
},
{
"sectionName": "Key Insight Topics",
"multiple": false,
"sectionList": [
{
"name": "Key Insight Topics",
"id": "keyinsighttopics",
"depid": "",
"param": "keyinsighttopics",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Data Gap",
"name": "Data Gap"
}
],
"validation": {
"isRequired": true
}
}
]
},
{
"sectionName": "Medical Insights Details",
"multiple": false,
"sectionList": [
{
"name": "Medical Insight Summary",
"id": "summary",
"depid": "",
"widget": "text",
"input": "textArea",
"validation": {
"isRequired": true,
"maxchars": "300"
}
}
]
}
]
}
]
}

View File

@ -0,0 +1,216 @@
{
"data": [
{
"id": "MedInsight",
"name": "Medical Insights Form",
"form-fields": [
{
"sectionName": "Medical Insight",
"multiple": false,
"sectionList": [
{
"name": "HCP Name",
"id": "hcpname",
"depid": "",
"widget": "label",
"input": "label",
"validation": {
"isRequired": false
}
},
{
"name": "Date",
"id": "date",
"depid": "",
"widget": "text",
"input": "Date",
"validation": {
"isRequired": true
}
},
{
"name": "Therapeutic Area",
"param": "therapeutic_area",
"id": "therapeutic",
"selectedValue": [],
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Acute Neurology1",
"name": "Acute Neurology1"
},
{
"id": "Cystic Fibrosis",
"name": "Cystic Fibrosis"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Product",
"id": "product",
"depid": "therapeutic",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Prometra Pump",
"pid": "Acute Neurology1",
"name": "Prometra Pump"
},
{
"id": "Prometra Pump",
"pid": "Cystic Fibrosis",
"name": "Prometra Pump"
},
{
"id": "Prometra Catheter",
"pid": "Cystic Fibrosis",
"name": "Prometra Catheter"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Source Type",
"id": "sourcetype",
"depid": "",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Advisory Board/Expert Committee",
"name": "Advisory Board/Expert Committee"
},
{
"id": "Congress",
"name": "Congress"
},
{
"id": "Industry professional direct knowledge ",
"name": "Industry professional direct knowledge "
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Congress Source",
"id": "congresssource",
"depid": "sourcetype",
"widget": "dropdown",
"input": "dropdown",
"inputList": [
{
"id": "Industry professional",
"pid": "Congress",
"name": "Industry professional"
},
{
"id": "Symposium",
"pid": "Congress",
"name": "Symposium"
}
],
"validation": {
"isRequired": false
}
},
{
"name": "Congress Name",
"id": "congressName",
"depid": "sourcetype",
"widget": "text",
"input": "text",
"validation": {
"isRequired": false
}
}
]
},
{
"sectionName": "Medical Insights Details",
"multiple": false,
"sectionList": [
{
"name": "Key Insight Topics",
"id": "keyinsighttopics",
"depid": "",
"param": "keyinsighttopics",
"widget": "multiselect",
"input": "multiselect",
"inputList": [
{
"id": "Data Gap",
"name": "Data Gap"
}
],
"validation": {
"isRequired": true
}
},
{
"name": "Medical Insight Summary",
"id": "summary",
"depid": "",
"widget": "text",
"input": "textArea",
"validation": {
"isRequired": true,
"maxchars": "300"
}
}
]
},
{
"sectionName": "Attach Document(s)",
"multiple": true,
"sectionList": [
{
"name": "Document Name",
"id": "documentName_21",
"depid": "",
"widget": "text",
"input": "text",
"validation": {
"isRequired": true
}
},
{
"name": "Description",
"id": "documentDescription_21",
"depid": "",
"widget": "text",
"input": "text",
"validation": {
"isRequired": true
}
},
{
"name": "Choose file",
"id": "chooseFile_22",
"depid": "",
"widget": "button",
"input": "chooseFile",
"validation": {
"isRequired": true,
"multipleFiles": true
}
}
]
}
]
}
]
}

View File

@ -3,9 +3,7 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- ReachabilitySwift
- device_info_plus (0.0.1):
- Flutter
- FlutterMacOS
- DKImagePickerController/Core (4.3.4):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
@ -94,7 +92,7 @@ PODS:
- mobile_device_identifier (0.0.1):
- Flutter
- JNKeychain
- package_info_plus (0.4.5):
- open_file (0.0.1):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
@ -102,31 +100,33 @@ PODS:
- permission_handler_apple (9.3.0):
- Flutter
- PromisesObjC (2.4.0)
- ReachabilitySwift (5.0.0)
- SDWebImage (5.18.10):
- SDWebImage/Core (= 5.18.10)
- SDWebImage/Core (5.18.10)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.3):
- Flutter
- FlutterMacOS
- SwiftyGif (5.4.4)
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- add_2_calendar (from `.symlinks/plugins/add_2_calendar/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`)
- Flutter (from `Flutter`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- mobile_device_identifier (from `.symlinks/plugins/mobile_device_identifier/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- open_file (from `.symlinks/plugins/open_file/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
@ -144,7 +144,6 @@ SPEC REPOS:
- GoogleUtilities
- JNKeychain
- PromisesObjC
- ReachabilitySwift
- SDWebImage
- SwiftyGif
@ -152,9 +151,7 @@ EXTERNAL SOURCES:
add_2_calendar:
:path: ".symlinks/plugins/add_2_calendar/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
:path: ".symlinks/plugins/connectivity_plus/darwin"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
firebase_core:
@ -167,24 +164,25 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/image_picker_ios/ios"
mobile_device_identifier:
:path: ".symlinks/plugins/mobile_device_identifier/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
open_file:
:path: ".symlinks/plugins/open_file/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
sqflite:
:path: ".symlinks/plugins/sqflite/darwin"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
add_2_calendar: 5eee66d5a3b99cd5e1487a7e03abd4e3ac4aff11
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 15fd9539e4eb735dc54bae8c0534a7a9511a03de
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
Firebase: 0312a2352584f782ea56f66d91606891d4607f06
firebase_core: 0b39f4f424e02eecabb2356ddf331fa07b772af8
firebase_remote_config: f57c28ff78d1d933bbe1b2cc11659cc82f9978e8
@ -200,13 +198,13 @@ SPEC CHECKSUMS:
image_picker_ios: b545a5f16c0fa88e3ecbbce3ed4de45567a8ec18
JNKeychain: fb6cc9ec95959ba46cd95d0ee6f7a05e41da9f42
mobile_device_identifier: 34f80c8985bb1506880c2ae10cb24cfb9918f1a7
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
SDWebImage: fc8f2d48bbfd72ef39d70e981bd24a3f3be53fec
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
url_launcher_ios: 6116280ddcfe98ab8820085d8d76ae7449447586

View File

@ -668,6 +668,8 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 69ERN967NS;
ENABLE_BITCODE = NO;
@ -678,6 +680,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.konectarEvents;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;

View File

@ -3,6 +3,9 @@
// import 'package:konectar_events/ui_screen/interactionform/model/interaction_config_data.dart';
// import 'package:konectar_events/ui_screen/interactionform/model/interaction_data.dart';
// import 'package:konectar_events/ui_screen/interactionform/util.dart';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/NewtworkConnectivity.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/mockapi.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/model/interaction_config_data.dart';
@ -151,6 +154,39 @@ class ConfigDataProvider extends ChangeNotifier {
notifyListeners();
}
Future<void> initConfigUIDataMediccalInsight() async {
List<InteractionConfigData> interactionConfigData = [];
// interactionConfigData = await fetchInteactionConfigData();
//interactionConfigData = fetchInteactionUIConfigData(jsonResult);
NetworkConnectivity networkConnectivity = NetworkConnectivity();
bool isOnline = await networkConnectivity.isInternetAvailable();
if (isOnline) {
// if (await InternetConnectionChecker().hasConnection) {
interactionConfigData = await fetchLocalMedicalInsight();
var box = Hive.box<InteractionConfigData>('InteractionConfigDataBox');
if (!box.isOpen) {
box = await Hive.openBox<InteractionConfigData>(
'InteractionConfigDataBox');
}
if (box.isEmpty) {
for (InteractionConfigData data in interactionConfigData) {
box.put(await getNextAutoIncrementValue(), data);
}
} else {
box.clear();
print("IamELse");
for (InteractionConfigData data in interactionConfigData) {
box.put(await getNextAutoIncrementValue(), data);
}
}
}
notifyListeners();
}
Future<List<InteractionConfigData>>
fetchLocalInteactionConfigDataMedical() async {
// dynamic jsonResult = jsonDecode(
@ -171,6 +207,25 @@ class ConfigDataProvider extends ChangeNotifier {
return interactionConfigData;
}
Future<List<InteractionConfigData>> fetchLocalMedicalInsight() async {
dynamic jsonResult = jsonDecode(
await rootBundle.loadString("assets/sarepta_medicalinsights.json"));
//dynamic jsonResult = await MockApiCall().getConfigDataMedical();
List<InteractionConfigData> interactionConfigData = [];
ResponseData responseData = ResponseDataFromJson(jsonResult);
print('Response_data_is: $responseData');
print('Response_data_dta_is: ${responseData.data}');
for (InteractionResultData obj in responseData.data) {
interactionConfigData
.add(InteractionConfigData(widgets: obj, id: obj.id, name: obj.name));
}
print("interactionConfigData_issss: ${interactionConfigData.length}");
return interactionConfigData;
}
Future<void> initConfigUIDataEng() async {
List<InteractionConfigData> interactionConfigData = [];
// interactionConfigData = await fetchInteactionConfigData();

View File

@ -560,11 +560,12 @@ class _InteractionScreenState extends State<InteractionScreen> {
),
),
);
case InteractionWidget.DROPDOWN:
// return customdropdown(sectionItem, provider, list, multiple);
return customAutoCompletedropdown(
sectionItem, provider, list, multiple);
case InteractionWidget.DROPDOWN:
return customdropdown(sectionItem, provider, list, multiple);
// return customAutoCompletedropdown(
// sectionItem, provider, list, multiple);
}
}
@ -671,7 +672,7 @@ class _InteractionScreenState extends State<InteractionScreen> {
backgroundColor: Colors.green.shade500,
onPressed: () async {
String record =
await provider.saveJsonObject(context, widget.form);
await provider.saveJsonObject(context, widget.form, "hc");
print("Validation_isss: ${provider.isLoading}");

View File

@ -1496,7 +1496,8 @@ class InteractionProvider extends ChangeNotifier {
return false;
}
Future<String> saveJsonObject(BuildContext context, String form,
Future<String> saveJsonObject(
BuildContext context, String form, String? title,
{bool isEdit = false}) async {
print("form_data: $form");
// for (var ob in interactionReponseList) {
@ -1562,6 +1563,7 @@ class InteractionProvider extends ChangeNotifier {
id: generateId,
updatedTime: DateTime.now().toString(),
form: form,
hcp: title,
intId: intId ?? "id",
intName: intName ?? "name");
var box = Hive.box<SaveInteraction>('InteractionDataBox');

View File

@ -38,6 +38,8 @@ class SaveInteraction {
String intId;
@HiveField(5)
String intName;
@HiveField(6)
String? hcp;
SaveInteraction(
{required this.save,
@ -45,6 +47,7 @@ class SaveInteraction {
this.form,
this.updatedTime,
required this.intId,
this.hcp,
required this.intName});
factory SaveInteraction.fromJson(Map<String, dynamic> json) =>
@ -53,6 +56,7 @@ class SaveInteraction {
json["save"].map((x) => SaveData.fromJson(x))),
intId: 'intId',
intName: 'intName',
hcp: 'hcp',
id: 'id');
Map<String, dynamic> toJson() => {
@ -62,6 +66,7 @@ class SaveInteraction {
Map<String, dynamic> savetoJson() => {
"form": form,
"intId": intId,
"hcp": hcp,
};
@override

View File

@ -22,6 +22,7 @@ class SaveInteractionAdapter extends TypeAdapter<SaveInteraction> {
form: fields[2] as String?,
updatedTime: fields[3] as String?,
intId: fields[4] as String,
hcp: fields[6] as String?,
intName: fields[5] as String,
);
}
@ -29,7 +30,7 @@ class SaveInteractionAdapter extends TypeAdapter<SaveInteraction> {
@override
void write(BinaryWriter writer, SaveInteraction obj) {
writer
..writeByte(6)
..writeByte(7)
..writeByte(0)
..write(obj.id)
..writeByte(1)
@ -41,7 +42,9 @@ class SaveInteractionAdapter extends TypeAdapter<SaveInteraction> {
..writeByte(4)
..write(obj.intId)
..writeByte(5)
..write(obj.intName);
..write(obj.intName)
..writeByte(6)
..write(obj.hcp);
}
@override

View File

@ -5,6 +5,7 @@ import 'package:konectar_events/contacts_module/constants.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/model/interaction_data.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/util.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/custombutton.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/customrangeslider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/responsive_ext.dart';
@ -34,7 +35,9 @@ import 'widget/interatciontextfield.dart';
class InteractionScreen1 extends StatefulWidget {
int index;
String form;
InteractionScreen1({super.key, required this.index, required this.form});
String? title;
InteractionScreen1(
{super.key, required this.index, required this.form, this.title});
@override
State<InteractionScreen1> createState() => _InteractionScreen1State();
@ -119,10 +122,11 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
child: Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const FittedBox(
backgroundColor: Constants.k2color,
title: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
'Record New Interaction',
widget.title ?? 'Record New Interaction',
style: TextStyle(color: Colors.white, fontSize: 18.0),
),
),
@ -316,7 +320,7 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
: 4.8
: isTablet
? 2.8
: 4.5,
: 5.5,
children: List.generate(
sectionList.length,
@ -484,7 +488,9 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
onPressed: () async {
String record =
await provider.saveJsonObject(
context, widget.form);
context,
widget.form,
widget.title);
print(
"Validation_isss: ${provider.isLoading}");
@ -618,7 +624,14 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
: buildRadio(sectionItem, provider);
case InteractionWidget.LABEL:
return Text(sectionItem.input!);
sectionItem.selectedValue!.add(widget.title ?? "NA");
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"${widget.title}",
style: TextStyle(fontSize: 18),
),
);
case InteractionWidget.RANGESLIDER:
return CustomRangeSlider(
@ -687,8 +700,8 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
// maxchars: int.parse(sectionItem.validation!.chars ?? "0"),
controller: sectionItem.controller!,
labelText: sectionItem.name,
// maxlines: 8,
//minlines: 4,
maxlines: 8,
minlines: 8,
onChanged: (val) {
sectionItem.selectedValue = [];
setState(() {});
@ -997,10 +1010,10 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
),
);
case InteractionWidget.DROPDOWN:
// return customdropdown(sectionItem, provider, list, multiple);
return customdropdown(sectionItem, provider, list, multiple);
return customAutoCompletedropdown(
sectionItem, provider, list, multiple);
// return customAutoCompletedropdown(
// sectionItem, provider, list, multiple);
}
}
@ -1015,11 +1028,13 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
}
Widget buildDateWidget(SectionList sectionItem) {
// sectionItem.controller!.text =
// DateFormat('yyyy-MM-dd').format(DateTime.now());
return Padding(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: SizedBox(
// width: isTablet ? 200 : MediaQuery.of(context).size.width,
// height: isTablet ? 50 : 40,
height: isTablet ? 50 : 40,
width: MediaQuery.of(context).size.width,
child: TextField(
controller:
@ -1106,8 +1121,8 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
child: CustomButton(
backgroundColor: Colors.green.shade500,
onPressed: () async {
String record =
await provider.saveJsonObject(context, widget.form);
String record = await provider.saveJsonObject(
context, widget.form, widget.title);
print("Validation_isss: ${provider.isLoading}");
@ -1843,6 +1858,8 @@ class _InteractionScreen1State extends State<InteractionScreen1> {
Widget cancelButton = TextButton(
child: const Text("Ok"),
onPressed: () async {
await Provider.of<ViewInteractionProvider>(context, listen: false)
.getRecords(widget.form, hcp: widget.title ?? "");
Navigator.of(context).pop();
Navigator.of(context).pop();
},

View File

@ -300,7 +300,7 @@ class _ViewInteractionScreenState extends State<ViewInteractionScreen> {
sectionItem.id, sectionItem.selectedValue!.last));
case InteractionWidget.LABEL:
return Text(sectionItem.input!);
return Text(sectionItem.selectedValue!.last.toString());
case InteractionWidget.RANGESLIDER:
return Text(sectionItem.selectedValue!.isNotEmpty

View File

@ -61,13 +61,13 @@ class ViewInteractionProvider extends ChangeNotifier {
notifyListeners();
}
Future<void> getRecords(String formname) async {
Future<void> getRecords(String formname, {String? hcp}) async {
var box = await Hive.openBox<SaveInteraction>('InteractionDataBox');
savedList = box.values.toList();
savedList = savedList
.where(
(element) => element.form == formname,
)
.where((element) => element.form == formname && element.hcp != null
? element.hcp == hcp
: element.form == formname)
.toList();
notifyListeners();
}

View File

@ -122,6 +122,7 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
return SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: Constants.k2color,
title: Text(
widget.saveInteraction.id,
style: TextStyle(
@ -258,7 +259,7 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
: 4.8
: isTablet
? 2.8
: 3.5,
: 4.5,
children: List.generate(
sectionList.length,
(i) {
@ -474,7 +475,13 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
: buildRadio(sectionItem, provider);
case InteractionWidget.LABEL:
return Text(sectionItem.input!);
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
sectionItem.selectedValue!.last.toString(),
style: TextStyle(fontSize: 18),
),
);
case InteractionWidget.RANGESLIDER:
return CustomRangeSlider(
@ -579,10 +586,10 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
),
);
case InteractionWidget.DROPDOWN:
// return customdropdown(sectionItem, provider, list, multiple);
return customdropdown(sectionItem, provider, list, multiple);
return customAutoCompletedropdown(
sectionItem, provider, list, multiple);
// return customAutoCompletedropdown(
// sectionItem, provider, list, multiple);
}
}
@ -593,7 +600,7 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
// width: isTablet ? 200 : MediaQuery.of(context).size.width,
width: MediaQuery.of(context).size.width,
// height: isTablet ? 50 : 40,
height: isTablet ? 50 : 40,
child: TextField(
controller:
sectionItem.controller, //editing controller of this TextField
@ -764,13 +771,17 @@ class _EditInteractionScreenState extends State<EditInteractionScreen1> {
// sectionItem.value = '';
// print("%%%%${sectionItem.selectedValue!.last}");
print("ItemList_is: $list");
// if (list.isEmpty) {
// print("###list empty###");
// list = [];
// InputClass inputClass =
// InputClass(id: "no value", name: "Select ${sectionItem.name}");
// list.add(inputClass);
// sectionItem.selectedObject = list[0];
// }
if (list.isEmpty) {
print("###list empty###");
list = [];
InputClass inputClass =
InputClass(id: "no value", name: "Select ${sectionItem.name}");
list.add(inputClass);
sectionItem.selectedObject = list[0];
list = sectionItem.inputList!;
}
// InputClass selectedObj = list[0];
return Padding(

View File

@ -63,6 +63,7 @@ class _ViewInteractionScreenState extends State<ViewInteractionScreen1> {
backgroundColor: Colors.white,
//resizeToAvoidBottomInset: false,
appBar: AppBar(
backgroundColor: Constants.k2color,
title: Text(
widget.saveInteraction.id,
style: TextStyle(
@ -320,7 +321,7 @@ class _ViewInteractionScreenState extends State<ViewInteractionScreen1> {
case InteractionWidget.LABEL:
return Text(
sectionItem.input!,
sectionItem.selectedValue!.last.toString(),
style: TextStyle(fontSize: 18.0),
);

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dio/dio.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_remote_config/firebase_remote_config.dart';
@ -70,10 +71,12 @@ import 'package:konectar_events/model/userdata_model.dart';
import 'package:konectar_events/utils/sessionmanager.dart';
import 'package:konectar_events/view/home.dart';
import 'package:konectar_events/view/login.dart';
import 'package:konectar_events/view/login_components/intropaging.dart';
import 'package:konectar_events/view/navigation_home_screen.dart';
import 'package:konectar_events/viewmodel/eventsprovider.dart';
import 'package:konectar_events/viewmodel/hcpprofprovider.dart';
import 'package:konectar_events/viewmodel/loginprovider.dart';
import 'package:overlay_support/overlay_support.dart';
import 'package:provider/provider.dart';
@ -190,11 +193,25 @@ Future main() async {
// userInfo = await credential!.getUserInfo();
//runApp(const MyApp());
// activateTimer();
SharedPreferences.getInstance().then((instance) async {
SharedPreferences.getInstance().then((instance) {
//StorageService().sharedPreferencesInstance = instance;
bool isloggedIn = instance.getBool('isloggedin') ?? false;
String secretkey = instance.getString('secretkey') ?? "";
print("checkhere before:$isloggedIn");
String secretkey = instance.getString('secretkey') ?? "";
OverlaySupportEntry entry;
Connectivity().onConnectivityChanged.listen((event) {
print("CHECK INTERNET");
print(event);
if (event.toString().contains("ConnectivityResult.none")) {
entry = showOverlayNotification((context) {
return Text("this is a message from simple notification");
}, duration: Duration(hours: 1));
}
});
OverlaySupport overlaySupport = OverlaySupport.global(
child: Text("ONLINE"),
);
runApp(
MultiProvider(
providers: [
@ -242,9 +259,11 @@ Future main() async {
],
child: SafeArea(
top: true,
child: new OverlaySupport.global(
toastTheme: ToastThemeData(background: Colors.green),
child: MaterialApp(
theme: ThemeData(
fontFamily: "OpenSans",
//fontFamily: "SourceSerif",
),
debugShowCheckedModeBanner: false,
title: 'Dynamic Links Example',
@ -254,7 +273,8 @@ Future main() async {
future: SessionManager().isLoggedIn(),
builder: (context, snapshot) {
print("Data_is : $snapshot");
if (snapshot.connectionState == ConnectionState.waiting) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
return const CircularProgressIndicator();
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
@ -262,7 +282,9 @@ Future main() async {
final isLoggedIn = snapshot.data ?? false;
print("isLoggedIn_is : $isLoggedIn");
print("secret : $secretkey");
return isLoggedIn ? MyApp() : LoginScreen();
return isLoggedIn
? IntroductionAnimationScreen()
: IntroductionAnimationScreen();
}
},
), //userInfo != null ? const Home() : OpenidScreen(credential: credential,),
@ -271,11 +293,32 @@ Future main() async {
),
),
),
),
);
});
}
class MyApp extends StatelessWidget {
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
OverlaySupportEntry entry;
Connectivity().onConnectivityChanged.listen((event) {
print("CHECK INTERNET");
print(event);
if (event.toString().contains("ConnectivityResult.wifi")) {
entry = showOverlayNotification((context) {
return Text("this is a message from simple notification");
}, duration: Duration(hours: 1));
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
@ -287,7 +330,8 @@ class MyApp extends StatelessWidget {
systemNavigationBarDividerColor: Colors.transparent,
systemNavigationBarIconBrightness: Brightness.dark,
));
return MaterialApp(
return OverlaySupport(
child: MaterialApp(
title: 'Flutter UI',
debugShowCheckedModeBanner: false,
// theme: ThemeData(
@ -296,6 +340,45 @@ class MyApp extends StatelessWidget {
// platform: TargetPlatform.iOS,
// ),
home: NavigationHomeScreen(),
),
);
}
@override
State<StatefulWidget> createState() {
// TODO: implement createState
throw UnimplementedError();
}
}
// class App extends StatefulWidget {
// @override
// _AppState createState() => _AppState();
// }
// class _AppState extends State<App> {
// @override
// void initState() {
// OverlaySupportEntry entry;
// Connectivity().onConnectivityChanged.listen((event) {
// print(event);
// if (event.toString().contains("ConnectivityResult.none")) {
// entry = showOverlayNotification((context) {
// return Text("this is a message from simple notification");
// }, duration: Duration(hours: 1));
// }
// });
// super.initState();
// }
// @override
// Widget build(BuildContext context) {
// return OverlaySupport(
// child: MaterialApp(
// title: 'Network Checker App',
// debugShowCheckedModeBanner: false,
// home: Homepage(),
// ),
// );
// }
// }

View File

@ -47,24 +47,54 @@ class AffiliationsResp {
};
}
List<Affiliations> affiliationsFromJson(String str) => List<Affiliations>.from(
json.decode(str).map((x) => Affiliations.fromJson(x)));
String affiliationsToJson(List<Affiliations> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Affiliations {
List<String> affiliationNames;
List<String> affiliationCount;
String? id;
String? orgCount;
String? orgName;
Affiliations({
required this.affiliationNames,
required this.affiliationCount,
this.id,
this.orgCount,
this.orgName,
});
factory Affiliations.fromJson(Map<String, dynamic> json) => Affiliations(
affiliationNames:
List<String>.from(json["affiliationNames"].map((x) => x)),
affiliationCount:
List<String>.from(json["affiliationCount"].map((x) => x)),
id: json["id"],
orgCount: json["org_count"],
orgName: json["org_name"],
);
Map<String, dynamic> toJson() => {
"affiliationNames": List<dynamic>.from(affiliationNames.map((x) => x)),
"affiliationCount": List<dynamic>.from(affiliationCount.map((x) => x)),
"id": id,
"org_count": orgCount,
"org_name": orgName,
};
}
// class Affiliations {
// List<String> affiliationNames;
// List<String> affiliationCount;
// Affiliations({
// required this.affiliationNames,
// required this.affiliationCount,
// });
// factory Affiliations.fromJson(Map<String, dynamic> json) => Affiliations(
// affiliationNames:
// List<String>.from(json["affiliationNames"].map((x) => x)),
// affiliationCount:
// List<String>.from(json["affiliationCount"].map((x) => x)),
// );
// Map<String, dynamic> toJson() => {
// "affiliationNames": List<dynamic>.from(affiliationNames.map((x) => x)),
// "affiliationCount": List<dynamic>.from(affiliationCount.map((x) => x)),
// };
// }

View File

@ -0,0 +1,364 @@
// To parse this JSON data, do
//
// final eventsOverviewDetails = eventsOverviewDetailsFromJson(jsonString);
import 'dart:convert';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/utils/hivetypeids.dart';
part 'events_details.g.dart';
EventsOverviewDetails eventsOverviewDetailsFromJson(String str) =>
EventsOverviewDetails.fromJson(json.decode(str));
String eventsOverviewDetailsToJson(EventsOverviewDetails data) =>
json.encode(data.toJson());
class EventsOverviewDetails {
EventsOverviewData? data;
EventsOverviewDetails({
this.data,
});
factory EventsOverviewDetails.fromJson(Map<String, dynamic> json) =>
EventsOverviewDetails(
data: json["data"] == null
? null
: EventsOverviewData.fromJson(json["data"]),
);
Map<String, dynamic> toJson() => {
"data": data?.toJson(),
};
}
class EventsOverviewData {
int? projectKolAttendee;
bool? cal;
int? grid;
String? eventFor;
String? eventId;
List<TopSpeakers>? topSpeakers;
dynamic eventTopics;
List<EventSponser>? eventSponsers;
bool? eventUserAttendee;
bool? eventUserInterest;
List<ArrEvent>? arrEvents;
int? attendeeCount;
EventsOverviewData({
this.projectKolAttendee,
this.cal,
this.grid,
this.eventFor,
this.eventId,
this.topSpeakers,
this.eventTopics,
this.eventSponsers,
this.eventUserAttendee,
this.eventUserInterest,
this.arrEvents,
this.attendeeCount,
});
factory EventsOverviewData.fromJson(Map<String, dynamic> json) =>
EventsOverviewData(
projectKolAttendee: json["project_kol_attendee"],
cal: json["cal"],
grid: json["grid"],
eventFor: json["eventFor"],
eventId: json["eventId"],
topSpeakers: json["eventData"] == null
? []
: List<TopSpeakers>.from(
json["eventData"]!.map((x) => TopSpeakers.fromJson(x))),
eventTopics: json["eventTopics"],
eventSponsers: json["eventSponsers"] == null
? []
: List<EventSponser>.from(
json["eventSponsers"]!.map((x) => EventSponser.fromJson(x))),
eventUserAttendee: json["event_user_attendee"],
eventUserInterest: json["event_user_interest"],
arrEvents: json["arrEvents"] == null
? []
: List<ArrEvent>.from(
json["arrEvents"]!.map((x) => ArrEvent.fromJson(x))),
attendeeCount: json["attendeeCount"],
);
Map<String, dynamic> toJson() => {
"project_kol_attendee": projectKolAttendee,
"cal": cal,
"grid": grid,
"eventFor": eventFor,
"eventId": eventId,
"eventData": topSpeakers == null
? []
: List<dynamic>.from(topSpeakers!.map((x) => x.toJson())),
"eventTopics": eventTopics,
"eventSponsers": eventSponsers == null
? []
: List<dynamic>.from(eventSponsers!.map((x) => x.toJson())),
"event_user_attendee": eventUserAttendee,
"event_user_interest": eventUserInterest,
"arrEvents": arrEvents == null
? []
: List<dynamic>.from(arrEvents!.map((x) => x.toJson())),
"attendeeCount": attendeeCount,
};
}
class ArrEvent {
String? sponsorType;
String? sponsorTypeName;
String? id;
String? kolId;
String? type;
String? eventType;
String? eventId;
String? sessionType;
String? sessionName;
String? role;
dynamic topic;
String? start;
String? end;
String? organizer;
String? sessionSponsor;
String? organizerType;
String? location;
String? address;
String? cityId;
String? stateId;
String? countryId;
String? postalCode;
dynamic subject;
String? url1;
dynamic url2;
dynamic notes;
String? createdBy;
DateTime? createdOn;
dynamic modifiedBy;
DateTime? modifiedOn;
String? clientId;
dynamic projectId;
String? activityType;
String? profileType;
dynamic globalEventId;
String? eventUniqueId;
String? name;
String? confEventType;
String? country;
dynamic eventTopic;
String? confSessionType;
String? region;
String? city;
ArrEvent({
this.sponsorType,
this.sponsorTypeName,
this.id,
this.kolId,
this.type,
this.eventType,
this.eventId,
this.sessionType,
this.sessionName,
this.role,
this.topic,
this.start,
this.end,
this.organizer,
this.sessionSponsor,
this.organizerType,
this.location,
this.address,
this.cityId,
this.stateId,
this.countryId,
this.postalCode,
this.subject,
this.url1,
this.url2,
this.notes,
this.createdBy,
this.createdOn,
this.modifiedBy,
this.modifiedOn,
this.clientId,
this.projectId,
this.activityType,
this.profileType,
this.globalEventId,
this.eventUniqueId,
this.name,
this.confEventType,
this.country,
this.eventTopic,
this.confSessionType,
this.region,
this.city,
});
factory ArrEvent.fromJson(Map<String, dynamic> json) => ArrEvent(
sponsorType: json["sponsor_type"],
sponsorTypeName: json["sponsor_type_name"],
id: json["id"],
kolId: json["kol_id"],
type: json["type"],
eventType: json["event_type"],
eventId: json["event_id"],
sessionType: json["session_type"],
sessionName: json["session_name"],
role: json["role"],
topic: json["topic"],
start: json["start"],
end: json["end"],
organizer: json["organizer"],
sessionSponsor: json["session_sponsor"],
organizerType: json["organizer_type"],
location: json["location"],
address: json["address"],
cityId: json["city_id"],
stateId: json["state_id"],
countryId: json["country_id"],
postalCode: json["postal_code"],
subject: json["subject"],
url1: json["url1"],
url2: json["url2"],
notes: json["notes"],
createdBy: json["created_by"],
createdOn: json["created_on"] == null
? null
: DateTime.parse(json["created_on"]),
modifiedBy: json["modified_by"],
modifiedOn: json["modified_on"] == null
? null
: DateTime.parse(json["modified_on"]),
clientId: json["client_id"],
projectId: json["project_id"],
activityType: json["activity_type"],
profileType: json["profile_type"],
globalEventId: json["global_event_id"],
eventUniqueId: json["event_unique_id"],
name: json["name"],
confEventType: json["conf_event_type"],
country: json["country"],
eventTopic: json["event_topic"],
confSessionType: json["conf_session_type"],
region: json["region"],
city: json["city"],
);
Map<String, dynamic> toJson() => {
"sponsor_type": sponsorType,
"sponsor_type_name": sponsorTypeName,
"id": id,
"kol_id": kolId,
"type": type,
"event_type": eventType,
"event_id": eventId,
"session_type": sessionType,
"session_name": sessionName,
"role": role,
"topic": topic,
"start": start,
"end": end,
"organizer": organizer,
"session_sponsor": sessionSponsor,
"organizer_type": organizerType,
"location": location,
"address": address,
"city_id": cityId,
"state_id": stateId,
"country_id": countryId,
"postal_code": postalCode,
"subject": subject,
"url1": url1,
"url2": url2,
"notes": notes,
"created_by": createdBy,
"created_on": createdOn?.toIso8601String(),
"modified_by": modifiedBy,
"modified_on": modifiedOn?.toIso8601String(),
"client_id": clientId,
"project_id": projectId,
"activity_type": activityType,
"profile_type": profileType,
"global_event_id": globalEventId,
"event_unique_id": eventUniqueId,
"name": name,
"conf_event_type": confEventType,
"country": country,
"event_topic": eventTopic,
"conf_session_type": confSessionType,
"region": region,
"city": city,
};
}
@HiveType(typeId: HiveTypeIdConstants.topspeakersHiveId)
class TopSpeakers {
@HiveField(0)
String? firstName;
@HiveField(1)
dynamic middleName;
@HiveField(2)
dynamic lastName;
@HiveField(3)
String? numSess;
TopSpeakers({
this.firstName,
this.middleName,
this.lastName,
this.numSess,
});
factory TopSpeakers.fromJson(Map<String, dynamic> json) => TopSpeakers(
firstName: json["first_name"],
middleName: json["middle_name"],
lastName: json["last_name"],
numSess: json["num_sess"],
);
Map<String, dynamic> toJson() => {
"first_name": firstName,
"middle_name": middleName,
"last_name": lastName,
"num_sess": numSess,
};
}
@HiveType(typeId: HiveTypeIdConstants.topSponsorsHiveId)
class EventSponser {
@HiveField(0)
String? numSess;
@HiveField(1)
String? sessionSponsor;
@HiveField(2)
String? type;
@HiveField(3)
String? sponsorsType;
EventSponser({
this.numSess,
this.sessionSponsor,
this.type,
this.sponsorsType,
});
factory EventSponser.fromJson(Map<String, dynamic> json) => EventSponser(
numSess: json["num_sess"],
sessionSponsor: json["session_sponsor"],
type: json["type"],
sponsorsType: json["sponsors_type"],
);
Map<String, dynamic> toJson() => {
"num_sess": numSess,
"session_sponsor": sessionSponsor,
"type": type,
"sponsors_type": sponsorsType,
};
}

View File

@ -0,0 +1,93 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'events_details.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class TopSpeakersAdapter extends TypeAdapter<TopSpeakers> {
@override
final int typeId = 103;
@override
TopSpeakers read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return TopSpeakers(
firstName: fields[0] as String?,
middleName: fields[1] as dynamic,
lastName: fields[2] as dynamic,
numSess: fields[3] as String?,
);
}
@override
void write(BinaryWriter writer, TopSpeakers obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.firstName)
..writeByte(1)
..write(obj.middleName)
..writeByte(2)
..write(obj.lastName)
..writeByte(3)
..write(obj.numSess);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is TopSpeakersAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class EventSponserAdapter extends TypeAdapter<EventSponser> {
@override
final int typeId = 104;
@override
EventSponser read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return EventSponser(
numSess: fields[0] as String?,
sessionSponsor: fields[1] as String?,
type: fields[2] as String?,
sponsorsType: fields[3] as String?,
);
}
@override
void write(BinaryWriter writer, EventSponser obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.numSess)
..writeByte(1)
..write(obj.sessionSponsor)
..writeByte(2)
..write(obj.type)
..writeByte(3)
..write(obj.sponsorsType);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is EventSponserAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@ -0,0 +1,219 @@
class EventsListResp2 {
int? code;
String? message;
List<EventsListingData>? data;
int? lastPage;
int? lastRow;
int? count;
EventsListResp2(
{this.code,
this.message,
this.data,
this.lastPage,
this.lastRow,
this.count});
EventsListResp2.fromJson(Map<String, dynamic> json) {
if (json["code"] is int) {
code = json["code"];
}
if (json["message"] is String) {
message = json["message"];
}
if (json["data"] is List) {
data = json["data"] == null
? null
: (json["data"] as List)
.map((e) => EventsListingData.fromJson(e))
.toList();
}
if (json["last_page"] is int) {
lastPage = json["last_page"];
}
if (json["last_row"] is int) {
lastRow = json["last_row"];
}
if (json["count"] is int) {
count = json["count"];
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["code"] = code;
_data["message"] = message;
if (data != null) {
_data["data"] = data?.map((e) => e.toJson()).toList();
}
_data["last_page"] = lastPage;
_data["last_row"] = lastRow;
_data["count"] = count;
return _data;
}
}
class EventsListingData {
String? uniqueId;
String? sessionName;
String? startDate;
String? endDate;
String? organizer;
String? sessionSponsor;
dynamic location;
dynamic address;
dynamic postalCode;
dynamic url;
String? activityType;
String? role;
String? eventTypeName;
String? countryName;
String? stateName;
String? cityName;
String? organizerTypeName;
String? sponsorTypeName;
String? sessionTypeName;
String? kolName;
dynamic kolUniqueId;
String? eventName;
String? eventUniqueId;
String? createdByUser;
String? updatedByUser;
String? formattedCreatedAt;
String? formattedUpdatedAt;
EventsListingData(
{this.uniqueId,
this.sessionName,
this.startDate,
this.endDate,
this.organizer,
this.sessionSponsor,
this.location,
this.address,
this.postalCode,
this.url,
this.activityType,
this.role,
this.eventTypeName,
this.countryName,
this.stateName,
this.cityName,
this.organizerTypeName,
this.sponsorTypeName,
this.sessionTypeName,
this.kolName,
this.kolUniqueId,
this.eventName,
this.eventUniqueId,
this.createdByUser,
this.updatedByUser,
this.formattedCreatedAt,
this.formattedUpdatedAt});
EventsListingData.fromJson(Map<String, dynamic> json) {
if (json["unique_id"] is String) {
uniqueId = json["unique_id"];
}
if (json["session_name"] is String) {
sessionName = json["session_name"];
}
if (json["start_date"] is String) {
startDate = json["start_date"];
}
if (json["end_date"] is String) {
endDate = json["end_date"];
}
if (json["organizer"] is String) {
organizer = json["organizer"];
}
if (json["session_sponsor"] is String) {
sessionSponsor = json["session_sponsor"];
}
location = json["location"];
address = json["address"];
postalCode = json["postal_code"];
url = json["url"];
if (json["activity_type"] is String) {
activityType = json["activity_type"];
}
if (json["role"] is String) {
role = json["role"];
}
if (json["event_type_name"] is String) {
eventTypeName = json["event_type_name"];
}
if (json["country_name"] is String) {
countryName = json["country_name"];
}
if (json["state_name"] is String) {
stateName = json["state_name"];
}
if (json["city_name"] is String) {
cityName = json["city_name"];
}
if (json["organizer_type_name"] is String) {
organizerTypeName = json["organizer_type_name"];
}
if (json["sponsor_type_name"] is String) {
sponsorTypeName = json["sponsor_type_name"];
}
if (json["session_type_name"] is String) {
sessionTypeName = json["session_type_name"];
}
if (json["kol_name"] is String) {
kolName = json["kol_name"];
}
kolUniqueId = json["kol_unique_id"];
if (json["event_name"] is String) {
eventName = json["event_name"];
}
if (json["event_unique_id"] is String) {
eventUniqueId = json["event_unique_id"];
}
if (json["created_by_user"] is String) {
createdByUser = json["created_by_user"];
}
if (json["updated_by_user"] is String) {
updatedByUser = json["updated_by_user"];
}
if (json["formatted_created_at"] is String) {
formattedCreatedAt = json["formatted_created_at"];
}
if (json["formatted_updated_at"] is String) {
formattedUpdatedAt = json["formatted_updated_at"];
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["unique_id"] = uniqueId;
_data["session_name"] = sessionName;
_data["start_date"] = startDate;
_data["end_date"] = endDate;
_data["organizer"] = organizer;
_data["session_sponsor"] = sessionSponsor;
_data["location"] = location;
_data["address"] = address;
_data["postal_code"] = postalCode;
_data["url"] = url;
_data["activity_type"] = activityType;
_data["role"] = role;
_data["event_type_name"] = eventTypeName;
_data["country_name"] = countryName;
_data["state_name"] = stateName;
_data["city_name"] = cityName;
_data["organizer_type_name"] = organizerTypeName;
_data["sponsor_type_name"] = sponsorTypeName;
_data["session_type_name"] = sessionTypeName;
_data["kol_name"] = kolName;
_data["kol_unique_id"] = kolUniqueId;
_data["event_name"] = eventName;
_data["event_unique_id"] = eventUniqueId;
_data["created_by_user"] = createdByUser;
_data["updated_by_user"] = updatedByUser;
_data["formatted_created_at"] = formattedCreatedAt;
_data["formatted_updated_at"] = formattedUpdatedAt;
return _data;
}
}

View File

@ -0,0 +1,211 @@
// To parse this JSON data, do
//
// final eventSpeakersResponse = eventSpeakersResponseFromJson(jsonString);
import 'dart:convert';
EventSpeakersResponse eventSpeakersResponseFromJson(String str) =>
EventSpeakersResponse.fromJson(json.decode(str));
String eventSpeakersResponseToJson(EventSpeakersResponse data) =>
json.encode(data.toJson());
class EventSpeakersResponse {
List<EventSpeakersData>? data;
EventSpeakersResponse({
this.data,
});
factory EventSpeakersResponse.fromJson(Map<String, dynamic> json) =>
EventSpeakersResponse(
data: json["data"] == null
? []
: List<EventSpeakersData>.from(
json["data"]!.map((x) => EventSpeakersData.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"data": data == null
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
};
}
class EventSpeakersData {
String? eid;
dynamic eventTopics;
String? npiNum;
String? hcpPinAlias;
String? sessionName;
String? name;
String? kolId;
String? firstName;
dynamic middleName;
dynamic lastName;
String? orgName;
String? country;
String? region;
String? city;
String? numSess;
dynamic optInOutStatus;
String? url1;
dynamic sessionNote;
String? cntNotes;
String? eventAttendeesId;
dynamic medicalInsightId;
String? cntMedicalInsight;
String? kId;
String? id;
int? projKolId;
String? eventsSession;
int? restEventsSessionCount;
String? restEventsSession;
String? eventsTopic;
int? restEventsTopicCount;
String? restEventsTopic;
String? kolName;
String? kolFullName;
EventSpeakersData({
this.eid,
this.eventTopics,
this.npiNum,
this.hcpPinAlias,
this.sessionName,
this.name,
this.kolId,
this.firstName,
this.middleName,
this.lastName,
this.orgName,
this.country,
this.region,
this.city,
this.numSess,
this.optInOutStatus,
this.url1,
this.sessionNote,
this.cntNotes,
this.eventAttendeesId,
this.medicalInsightId,
this.cntMedicalInsight,
this.kId,
this.id,
this.projKolId,
this.eventsSession,
this.restEventsSessionCount,
this.restEventsSession,
this.eventsTopic,
this.restEventsTopicCount,
this.restEventsTopic,
this.kolName,
this.kolFullName,
});
factory EventSpeakersData.fromJson(Map<String, dynamic> json) =>
EventSpeakersData(
eid: json["eid"],
eventTopics: json["event_topics"],
npiNum: json["npi_num"],
hcpPinAlias: json["hcp_pin_alias"],
sessionName: json["session_name"],
name: json["name"],
kolId: json["kol_id"],
firstName: json["first_name"],
middleName: json["middle_name"],
lastName: json["last_name"],
orgName: json["org_name"],
country: json["Country"],
region: json["Region"],
city: json["City"],
numSess: json["num_sess"],
optInOutStatus: json["opt_in_out_status"],
url1: json["url1"],
sessionNote: json["session_note"],
cntNotes: json["cnt_notes"],
eventAttendeesId: json["event_attendees_id"],
medicalInsightId: json["medical_insight_id"],
cntMedicalInsight: json["cnt_medical_insight"],
kId: json["k_id"],
id: json["id"],
projKolId: json["proj_kol_id"],
eventsSession: json["events_session"],
restEventsSessionCount: json["rest_events_session_count"],
restEventsSession: json["rest_events_session"],
eventsTopic: json["events_topic"],
restEventsTopicCount: json["rest_events_topic_count"],
restEventsTopic: json["rest_events_topic"],
kolName: json["kol_name"],
kolFullName: json["kol_full_name"],
);
Map<String, dynamic> toJson() => {
"eid": eid,
"event_topics": eventTopics,
"npi_num": npiNum,
"hcp_pin_alias": hcpPinAlias,
"session_name": sessionName,
"name": nameValues.reverse[name],
"kol_id": kolId,
"first_name": firstName,
"middle_name": middleName,
"last_name": lastName,
"org_name": orgName,
"Country": countryValues.reverse[country],
"Region": region,
"City": city,
"num_sess": numSess,
"opt_in_out_status": optInOutStatus,
"url1": url1,
"session_note": sessionNote,
"cnt_notes": cntNotes,
"event_attendees_id": eventAttendeesId,
"medical_insight_id": medicalInsightId,
"cnt_medical_insight": cntMedicalInsight,
"k_id": kId,
"id": id,
"proj_kol_id": projKolId,
"events_session": eventsSession,
"rest_events_session_count": restEventsSessionCount,
"rest_events_session": restEventsSession,
"events_topic": eventsTopic,
"rest_events_topic_count": restEventsTopicCount,
"rest_events_topic": restEventsTopic,
"kol_name": kolName,
"kol_full_name": kolFullName,
};
}
enum Country { BELGIUM, GERMANY, UNITED_STATES }
final countryValues = EnumValues({
"Belgium": Country.BELGIUM,
"Germany": Country.GERMANY,
"United States": Country.UNITED_STATES
});
enum Name { THE_2036_AMERICAN_ACADEMY_OF_AAI }
final nameValues = EnumValues({
"2036 American Academy of (AAI)": Name.THE_2036_AMERICAN_ACADEMY_OF_AAI
});
enum RestEventsSession { BUSINESS_MEETING_AND_FORUM, EMPTY }
final restEventsSessionValues = EnumValues({
" Business Meeting and Forum": RestEventsSession.BUSINESS_MEETING_AND_FORUM,
"": RestEventsSession.EMPTY
});
class EnumValues<T> {
Map<String, T> map;
late Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
reverseMap = map.map((k, v) => MapEntry(v, k));
return reverseMap;
}
}

View File

@ -0,0 +1,330 @@
// To parse this JSON data, do
//
// final speakersResponse = speakersResponseFromJson(jsonString);
import 'dart:convert';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/contacts_module/model_class/speaker.dart';
part 'eventspeakers.g.dart';
SpeakersResponse speakersResponseFromJson(String str) =>
SpeakersResponse.fromJson(json.decode(str));
String speakersResponseToJson(SpeakersResponse data) =>
json.encode(data.toJson());
class SpeakersResponse {
int? code;
String? message;
List<SpeakersList>? data;
int? lastPage;
int? lastRow;
int? count;
SpeakersResponse({
this.code,
this.message,
this.data,
this.lastPage,
this.lastRow,
this.count,
});
factory SpeakersResponse.fromJson(Map<String, dynamic> json) =>
SpeakersResponse(
code: json["code"],
message: json["message"],
data: json["data"] == null
? []
: List<SpeakersList>.from(
json["data"]!.map((x) => SpeakersList.fromJson(x))),
lastPage: json["last_page"],
lastRow: json["last_row"],
count: json["count"],
);
Map<String, dynamic> toJson() => {
"code": code,
"message": message,
"data": data == null
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
"last_page": lastPage,
"last_row": lastRow,
"count": count,
};
}
class SpeakersResponse1 {
Data1? data;
SpeakersResponse1({
this.data,
});
factory SpeakersResponse1.fromJson(Map<String, dynamic> json) =>
SpeakersResponse1(
data: json["data"] == null ? null : Data1.fromJson(json["data"]),
);
Map<String, dynamic> toJson() => {
"data": data?.toJson(),
};
}
class Data1 {
List<SpeakersList>? data;
Data1({
this.data,
});
factory Data1.fromJson(Map<String, dynamic> json) => Data1(
data: json["data"] == null
? []
: List<SpeakersList>.from(
json["data"]!.map((x) => SpeakersList.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"data": data == null
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
};
}
@HiveType(typeId: 25)
class SpeakersList {
@HiveField(0)
String? uniqueId;
@HiveField(1)
String? hcpFullName;
@HiveField(2)
String? hcpPin;
@HiveField(3)
int? npiNum;
@HiveField(4)
String? specialty;
@HiveField(5)
String? organization;
@HiveField(6)
String? therapeuticArea;
@HiveField(7)
dynamic cleansStatus;
@HiveField(8)
int? isDeleted;
@HiveField(9)
CreatedByUser? createdByUser;
@HiveField(10)
CreatedByUser? updatedByUser;
@HiveField(11)
String? cityName;
@HiveField(12)
String? stateName;
@HiveField(13)
String? countryName;
@HiveField(14)
dynamic deletedByUser;
@HiveField(15)
DateTime? formattedCreatedAt;
@HiveField(16)
DateTime? formattedUpdatedAt;
@HiveField(17)
dynamic formattedDeletedAt;
@HiveField(18)
List<String>? sessionNames;
@HiveField(19)
List<String>? topics;
SpeakersList({
this.uniqueId,
this.hcpFullName,
this.hcpPin,
this.npiNum,
this.specialty,
this.organization,
this.therapeuticArea,
this.cleansStatus,
this.isDeleted,
this.createdByUser,
this.updatedByUser,
this.cityName,
this.stateName,
this.countryName,
this.deletedByUser,
this.formattedCreatedAt,
this.formattedUpdatedAt,
this.formattedDeletedAt,
this.sessionNames,
this.topics,
});
// SpeakersList.fromJson(Map<String, dynamic> json) {
// if (json["unique_id"] is String) {
// city = json["city_name"] ?? null;
// }
// if (json["country_name"] is String) {
// country = json["country_name"] ?? null;
// }
// if (json["state_name"] is String) {
// region = json["state_name"] ?? null;
// }
// if (json["activity_type"] is String) {
// activityType = json["activity_type"];
// }
// if (json["address"] is String) {
// address = json["address"];
// }
// if (json["city_id"] is String) {
// cityId = json["city_id"];
// }
// if (json["client_id"] is String) {
// clientId = json["client_id"];
// }
// if (json["cnt"] is String) {
// cnt = json["cnt"];
// }
// if (json["country_id"] is String) {
// countryId = json["country_id"];
// }
// if (json["created_by"] is String) {
// createdBy = json["created_by"];
// }
// if (json["created_on"] is String) {
// createdOn = json["created_on"];
// }
// if (json["dAllowed"] is bool) {
// dAllowed = json["dAllowed"];
// }
// if (json["eAllowed"] is bool) {
// eAllowed = json["eAllowed"];
// }
// if (json["end_date"] is String) {
// end = json["end_date"];
// }
// if (json["eventLat"] is String) {
// eventLat = json["eventLat"];
// }
// if (json["eventLong"] is String) {
// eventLong = json["eventLong"];
// }
// if (json["unique_id"] is String) {
// eventId = json["unique_id"];
// }
// if (json["event_type_name"] is String) {
// eventType = json["event_type_name"];
// }
// if (json["event_unique_id"] is String) {
// eventUniqueId = json["event_unique_id"];
// }
// if (json["event_user_attendee"] is bool) {
// eventUserAttendee = json["event_user_attendee"];
// }
// if (json["global_event_id"] is String) {
// globalEventId = json["global_event_id"];
// }
// if (json["hcp_pin"] is String) {
// hcpPin = json["hcp_pin"];
// }
// if (json["id"] is String) {
// id = json["id"];
// }
// if (json["kol_id"] is String) {
// kolId = json["kol_id"];
// }
// if (json["location"] is String) {
// location = json["location"];
// }
// if (json["modified_by"] is String) {
// modifiedBy = json["modified_by"];
// }
// if (json["modified_on"] is String) {
// modifiedOn = json["modified_on"];
// }
// if (json["event_name"] is String) {
// name1 = json["event_name"];
// }
// }
factory SpeakersList.fromJson(Map<String, dynamic> json) => SpeakersList(
uniqueId: json["unique_id"],
hcpFullName: json["hcp_full_name"] ?? null,
hcpPin: json["hcp_pin"] ?? null,
npiNum: json["npi_num"] ?? null,
specialty: json["specialty"] ?? null,
organization: json["organization"] ?? null,
therapeuticArea: json["therapeutic_area"] ?? null,
cleansStatus: json["cleans_status"] ?? null,
isDeleted: json["is_deleted"] ?? null,
createdByUser: CreatedByUserValues.map[json["created_by_user"]] ?? null,
updatedByUser: CreatedByUserValues.map[json["updated_by_user"]] ?? null,
cityName: json["city_name"] ?? null,
stateName: json["state_name"] ?? null,
countryName: json["country_name"] ?? null,
deletedByUser: json["deleted_by_user"],
formattedCreatedAt: json["formatted_created_at"] == null
? null
: DateTime.parse(json["formatted_created_at"]),
formattedUpdatedAt: json["formatted_updated_at"] == null
? null
: DateTime.parse(json["formatted_updated_at"]),
formattedDeletedAt: json["formatted_deleted_at"],
sessionNames: json["session_names"] == null
? []
: List<String>.from(json["session_names"]!.map((x) => x)),
topics: json["topics"] == null
? []
: List<String>.from(json["topics"]!.map((x) => x)),
);
Map<String, dynamic> toJson() => {
"unique_id": uniqueId,
"hcp_full_name": hcpFullName,
"hcp_pin": hcpPin,
"npi_num": npiNum,
"specialty": specialty,
"organization": organization,
"therapeutic_area": therapeuticAreaValues.reverse[therapeuticArea],
"cleans_status": cleansStatus,
"is_deleted": isDeleted,
"created_by_user": CreatedByUserValues.reverse[createdByUser],
"updated_by_user": CreatedByUserValues.reverse[updatedByUser],
"city_name": cityName,
"state_name": stateName,
"country_name": countryName,
"deleted_by_user": deletedByUser,
"formatted_created_at": formattedCreatedAt?.toIso8601String(),
"formatted_updated_at": formattedUpdatedAt?.toIso8601String(),
"formatted_deleted_at": formattedDeletedAt,
"session_names": sessionNames == null
? []
: List<dynamic>.from(sessionNames!.map((x) => x)),
"topics":
topics == null ? [] : List<dynamic>.from(topics!.map((x) => x)),
};
}
enum CreatedByUser { ADMIN_SUPER_ROOT }
final CreatedByUserValues =
EnumValues({"admin super root": CreatedByUser.ADMIN_SUPER_ROOT});
enum TherapeuticArea { ONCOLOGY_WOMENS_HEALTH }
final therapeuticAreaValues = EnumValues(
{"Oncology | Womens Health": TherapeuticArea.ONCOLOGY_WOMENS_HEALTH});
class EnumValues<T> {
Map<String, T> map;
late Map<T, String> reverseMap;
EnumValues(this.map);
Map<T, String> get reverse {
reverseMap = map.map((k, v) => MapEntry(v, k));
return reverseMap;
}
}

View File

@ -0,0 +1,98 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'eventspeakers.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class SpeakersListAdapter extends TypeAdapter<SpeakersList> {
@override
final int typeId = 25;
@override
SpeakersList read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return SpeakersList(
uniqueId: fields[0] as String?,
hcpFullName: fields[1] as String?,
hcpPin: fields[2] as String?,
npiNum: fields[3] as int?,
specialty: fields[4] as String?,
organization: fields[5] as String?,
therapeuticArea: fields[6] as String?,
cleansStatus: fields[7] as dynamic,
isDeleted: fields[8] as int?,
createdByUser: fields[9] as CreatedByUser?,
updatedByUser: fields[10] as CreatedByUser?,
cityName: fields[11] as String?,
stateName: fields[12] as String?,
countryName: fields[13] as String?,
deletedByUser: fields[14] as dynamic,
formattedCreatedAt: fields[15] as DateTime?,
formattedUpdatedAt: fields[16] as DateTime?,
formattedDeletedAt: fields[17] as dynamic,
sessionNames: (fields[18] as List?)?.cast<String>(),
topics: (fields[19] as List?)?.cast<String>(),
);
}
@override
void write(BinaryWriter writer, SpeakersList obj) {
writer
..writeByte(20)
..writeByte(0)
..write(obj.uniqueId)
..writeByte(1)
..write(obj.hcpFullName)
..writeByte(2)
..write(obj.hcpPin)
..writeByte(3)
..write(obj.npiNum)
..writeByte(4)
..write(obj.specialty)
..writeByte(5)
..write(obj.organization)
..writeByte(6)
..write(obj.therapeuticArea)
..writeByte(7)
..write(obj.cleansStatus)
..writeByte(8)
..write(obj.isDeleted)
..writeByte(9)
..write(obj.createdByUser)
..writeByte(10)
..write(obj.updatedByUser)
..writeByte(11)
..write(obj.cityName)
..writeByte(12)
..write(obj.stateName)
..writeByte(13)
..write(obj.countryName)
..writeByte(14)
..write(obj.deletedByUser)
..writeByte(15)
..write(obj.formattedCreatedAt)
..writeByte(16)
..write(obj.formattedUpdatedAt)
..writeByte(17)
..write(obj.formattedDeletedAt)
..writeByte(18)
..write(obj.sessionNames)
..writeByte(19)
..write(obj.topics);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is SpeakersListAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@ -0,0 +1,486 @@
import 'package:hive_flutter/hive_flutter.dart';
class MyEventsListModel {
int? code;
String? message;
List<MyEventsData>? data;
int? lastPage;
int? lastRow;
int? count;
MyEventsListModel(
{this.code,
this.message,
this.data,
this.lastPage,
this.lastRow,
this.count});
MyEventsListModel.fromJson(Map<String, dynamic> json) {
if (json["code"] is int) {
code = json["code"];
}
if (json["message"] is String) {
message = json["message"];
}
if (json["data"] is List) {
data = json["data"] == null
? null
: (json["data"] as List)
.map((e) => MyEventsData.fromJson(e))
.toList();
}
if (json["last_page"] is int) {
lastPage = json["last_page"];
}
if (json["last_row"] is int) {
lastRow = json["last_row"];
}
if (json["count"] is int) {
count = json["count"];
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["code"] = code;
_data["message"] = message;
if (data != null) {
_data["data"] = data?.map((e) => e.toJson()).toList();
}
_data["last_page"] = lastPage;
_data["last_row"] = lastRow;
_data["count"] = count;
return _data;
}
}
class MyEventsData {
String? uniqueId;
dynamic switchedId;
String? createdByUser;
String? updatedByUser;
dynamic deletedByUser;
String? formattedCreatedAt;
String? formattedUpdatedAt;
dynamic formattedDeletedAt;
List<MyEventsList>? events;
MyEventsData(
{this.uniqueId,
this.switchedId,
this.createdByUser,
this.updatedByUser,
this.deletedByUser,
this.formattedCreatedAt,
this.formattedUpdatedAt,
this.formattedDeletedAt,
this.events});
MyEventsData.fromJson(Map<String, dynamic> json) {
if (json["unique_id"] is String) {
uniqueId = json["unique_id"];
}
switchedId = json["switched_id"];
if (json["created_by_user"] is String) {
createdByUser = json["created_by_user"];
}
if (json["updated_by_user"] is String) {
updatedByUser = json["updated_by_user"];
}
deletedByUser = json["deleted_by_user"];
if (json["formatted_created_at"] is String) {
formattedCreatedAt = json["formatted_created_at"];
}
if (json["formatted_updated_at"] is String) {
formattedUpdatedAt = json["formatted_updated_at"];
}
formattedDeletedAt = json["formatted_deleted_at"];
if (json["events"] is List) {
events = json["events"] == null
? null
: (json["events"] as List)
.map((e) => MyEventsList.fromJson(e))
.toList();
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["unique_id"] = uniqueId;
_data["switched_id"] = switchedId;
_data["created_by_user"] = createdByUser;
_data["updated_by_user"] = updatedByUser;
_data["deleted_by_user"] = deletedByUser;
_data["formatted_created_at"] = formattedCreatedAt;
_data["formatted_updated_at"] = formattedUpdatedAt;
_data["formatted_deleted_at"] = formattedDeletedAt;
if (events != null) {
_data["events"] = events?.map((e) => e.toJson()).toList();
}
return _data;
}
}
@HiveType(typeId: 101)
class MyEventsList {
@HiveField(0)
String? myeventid;
@HiveField(1)
String? eventid;
@HiveField(2)
String? sessionName;
@HiveField(3)
String? start;
@HiveField(4)
String? end;
@HiveField(5)
String? organizer;
@HiveField(6)
String? sessionSponsor;
@HiveField(7)
dynamic location;
@HiveField(8)
dynamic address;
@HiveField(9)
dynamic postalCode;
@HiveField(10)
String? url;
@HiveField(11)
String? activityType;
@HiveField(12)
dynamic topic;
@HiveField(13)
String? role;
@HiveField(14)
String? eventTypeName;
@HiveField(15)
String? country;
@HiveField(16)
String? region;
@HiveField(17)
String? city;
@HiveField(18)
String? organizerTypeName;
@HiveField(19)
String? sponsorTypeName;
@HiveField(20)
String? sessionTypeName;
@HiveField(21)
String? kolName;
@HiveField(22)
dynamic kolUniqueId;
@HiveField(23)
String? name1;
@HiveField(24)
String? eventUniqueId;
@HiveField(25)
String? createdByUser;
@HiveField(26)
String? updatedByUser;
@HiveField(27)
String? formattedCreatedAt;
@HiveField(28)
String? formattedUpdatedAt;
@HiveField(29)
List<Attendees>? attendees;
@HiveField(30)
bool isfav = false;
@HiveField(31)
bool isAttending = false;
@HiveField(32)
String? speakerscount;
@HiveField(33)
String? topTopics;
@HiveField(34)
String? topSpeakers;
MyEventsList(
{this.eventid,
this.sessionName,
this.start,
this.end,
this.organizer,
this.sessionSponsor,
this.location,
this.address,
this.postalCode,
this.url,
this.activityType,
this.topic,
this.role,
this.eventTypeName,
this.country,
this.region,
this.city,
this.organizerTypeName,
this.sponsorTypeName,
this.sessionTypeName,
this.kolName,
this.kolUniqueId,
this.name1,
this.eventUniqueId,
this.createdByUser,
this.updatedByUser,
this.formattedCreatedAt,
this.formattedUpdatedAt,
this.attendees});
MyEventsList.fromJson(Map<String, dynamic> json) {
if (json["unique_id"] is String) {
eventid = json["unique_id"];
}
if (json["session_name"] is String) {
sessionName = json["session_name"];
}
if (json["start_date"] is String) {
start = json["start_date"];
}
if (json["end_date"] is String) {
end = json["end_date"];
}
if (json["organizer"] is String) {
organizer = json["organizer"];
}
if (json["session_sponsor"] is String) {
sessionSponsor = json["session_sponsor"];
}
location = json["location"];
address = json["address"];
postalCode = json["postal_code"];
if (json["url"] is String) {
url = json["url"];
}
if (json["activity_type"] is String) {
activityType = json["activity_type"];
}
topic = json["topic"];
if (json["role"] is String) {
role = json["role"];
}
if (json["event_type_name"] is String) {
eventTypeName = json["event_type_name"];
}
if (json["country_name"] is String) {
country = json["country_name"];
}
if (json["state_name"] is String) {
region = json["state_name"];
}
if (json["city_name"] is String) {
city = json["city_name"];
}
if (json["organizer_type_name"] is String) {
organizerTypeName = json["organizer_type_name"];
}
if (json["sponsor_type_name"] is String) {
sponsorTypeName = json["sponsor_type_name"];
}
if (json["session_type_name"] is String) {
sessionTypeName = json["session_type_name"];
}
if (json["kol_name"] is String) {
kolName = json["kol_name"];
}
kolUniqueId = json["kol_unique_id"];
if (json["event_name"] is String) {
name1 = json["event_name"];
}
if (json["event_unique_id"] is String) {
eventUniqueId = json["event_unique_id"];
}
if (json["created_by_user"] is String) {
createdByUser = json["created_by_user"];
}
if (json["updated_by_user"] is String) {
updatedByUser = json["updated_by_user"];
}
if (json["formatted_created_at"] is String) {
formattedCreatedAt = json["formatted_created_at"];
}
if (json["formatted_updated_at"] is String) {
formattedUpdatedAt = json["formatted_updated_at"];
}
if (json["attendees"] is List) {
attendees = json["attendees"] == null
? null
: (json["attendees"] as List)
.map((e) => Attendees.fromJson(e))
.toList();
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["unique_id"] = eventid;
_data["session_name"] = sessionName;
_data["start_date"] = start;
_data["end_date"] = end;
_data["organizer"] = organizer;
_data["session_sponsor"] = sessionSponsor;
_data["location"] = location;
_data["address"] = address;
_data["postal_code"] = postalCode;
_data["url"] = url;
_data["activity_type"] = activityType;
_data["topic"] = topic;
_data["role"] = role;
_data["event_type_name"] = eventTypeName;
_data["country_name"] = country;
_data["state_name"] = region;
_data["city_name"] = city;
_data["organizer_type_name"] = organizerTypeName;
_data["sponsor_type_name"] = sponsorTypeName;
_data["session_type_name"] = sessionTypeName;
_data["kol_name"] = kolName;
_data["kol_unique_id"] = kolUniqueId;
_data["event_name"] = name1;
_data["event_unique_id"] = eventUniqueId;
_data["created_by_user"] = createdByUser;
_data["updated_by_user"] = updatedByUser;
_data["formatted_created_at"] = formattedCreatedAt;
_data["formatted_updated_at"] = formattedUpdatedAt;
if (attendees != null) {
_data["attendees"] = attendees?.map((e) => e.toJson()).toList();
}
return _data;
}
}
@HiveType(typeId: 102)
class Attendees {
@HiveField(0)
String? uniqueId;
@HiveField(1)
int? kolEventId;
@HiveField(2)
int? kolId;
@HiveField(3)
String? hcpFullName;
@HiveField(4)
String? hcpPin;
@HiveField(5)
int? npiNum;
@HiveField(6)
dynamic specialty;
@HiveField(7)
dynamic organization;
@HiveField(8)
String? therapeuticArea;
@HiveField(9)
dynamic cityId;
@HiveField(10)
dynamic stateId;
@HiveField(11)
dynamic countryId;
@HiveField(12)
dynamic cleansStatus;
@HiveField(13)
int? isDeleted;
@HiveField(14)
String? createdByUser;
@HiveField(15)
String? updatedByUser;
@HiveField(16)
dynamic deletedByUser;
@HiveField(17)
String? formattedCreatedAt;
@HiveField(18)
String? formattedUpdatedAt;
@HiveField(19)
dynamic formattedDeletedAt;
Attendees(
{this.uniqueId,
this.kolEventId,
this.kolId,
this.hcpFullName,
this.hcpPin,
this.npiNum,
this.specialty,
this.organization,
this.therapeuticArea,
this.cityId,
this.stateId,
this.countryId,
this.cleansStatus,
this.isDeleted,
this.createdByUser,
this.updatedByUser,
this.deletedByUser,
this.formattedCreatedAt,
this.formattedUpdatedAt,
this.formattedDeletedAt});
Attendees.fromJson(Map<String, dynamic> json) {
if (json["unique_id"] is String) {
uniqueId = json["unique_id"];
}
if (json["kol_event_id"] is int) {
kolEventId = json["kol_event_id"];
}
if (json["kol_id"] is int) {
kolId = json["kol_id"];
}
if (json["hcp_full_name"] is String) {
hcpFullName = json["hcp_full_name"];
}
if (json["hcp_pin"] is String) {
hcpPin = json["hcp_pin"];
}
if (json["npi_num"] is int) {
npiNum = json["npi_num"];
}
specialty = json["specialty"];
organization = json["organization"];
if (json["therapeutic_area"] is String) {
therapeuticArea = json["therapeutic_area"];
}
cityId = json["city_id"];
stateId = json["state_id"];
countryId = json["country_id"];
cleansStatus = json["cleans_status"];
if (json["is_deleted"] is int) {
isDeleted = json["is_deleted"];
}
if (json["created_by_user"] is String) {
createdByUser = json["created_by_user"];
}
if (json["updated_by_user"] is String) {
updatedByUser = json["updated_by_user"];
}
deletedByUser = json["deleted_by_user"];
if (json["formatted_created_at"] is String) {
formattedCreatedAt = json["formatted_created_at"];
}
if (json["formatted_updated_at"] is String) {
formattedUpdatedAt = json["formatted_updated_at"];
}
formattedDeletedAt = json["formatted_deleted_at"];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["unique_id"] = uniqueId;
_data["kol_event_id"] = kolEventId;
_data["kol_id"] = kolId;
_data["hcp_full_name"] = hcpFullName;
_data["hcp_pin"] = hcpPin;
_data["npi_num"] = npiNum;
_data["specialty"] = specialty;
_data["organization"] = organization;
_data["therapeutic_area"] = therapeuticArea;
_data["city_id"] = cityId;
_data["state_id"] = stateId;
_data["country_id"] = countryId;
_data["cleans_status"] = cleansStatus;
_data["is_deleted"] = isDeleted;
_data["created_by_user"] = createdByUser;
_data["updated_by_user"] = updatedByUser;
_data["deleted_by_user"] = deletedByUser;
_data["formatted_created_at"] = formattedCreatedAt;
_data["formatted_updated_at"] = formattedUpdatedAt;
_data["formatted_deleted_at"] = formattedDeletedAt;
return _data;
}
}

View File

@ -1,4 +1,5 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/contacts_module/model_class/k2_api_model/kol_event_k2.dart';
part 'neweventsmodel.g.dart';
class EventsResp {
@ -27,12 +28,10 @@ class EventsData {
EventsData({this.events});
EventsData.fromJson(Map<String, dynamic> json) {
if (json["events"] is List) {
events = json["events"] == null
if (json["data"] is List) {
events = json["data"] == null
? null
: (json["events"] as List)
.map((e) => EventsList.fromJson(e))
.toList();
: (json["data"] as List).map((e) => EventsList.fromJson(e)).toList();
}
}
@ -67,6 +66,61 @@ class EventsDataStaging {
}
}
// RESPONSE FROM K2
class EventsListRespK2 {
int? code;
String? message;
List<EventsList>? data;
int? lastPage;
int? lastRow;
int? count;
EventsListRespK2(
{this.code,
this.message,
this.data,
this.lastPage,
this.lastRow,
this.count});
EventsListRespK2.fromJson(Map<String, dynamic> json) {
if (json["code"] is int) {
code = json["code"];
}
if (json["message"] is String) {
message = json["message"];
}
if (json["data"] is List) {
data = json["data"] == null
? null
: (json["data"] as List).map((e) => EventsList.fromJson(e)).toList();
}
if (json["last_page"] is int) {
lastPage = json["last_page"];
}
if (json["last_row"] is int) {
lastRow = json["last_row"];
}
if (json["count"] is int) {
count = json["count"];
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["code"] = code;
_data["message"] = message;
if (data != null) {
_data["data"] = data?.map((e) => e.toJson()).toList();
}
_data["last_page"] = lastPage;
_data["last_row"] = lastRow;
_data["count"] = count;
return _data;
}
}
@HiveType(typeId: 2)
class EventsList {
@HiveField(0)
@ -195,9 +249,11 @@ class EventsList {
String? topSpeakers;
@HiveField(62)
String? sponsors;
@HiveField(63)
late bool? eventUserInterest;
EventsList(
{this.city,
EventsList({
this.city,
this.sponsors,
this.speakerscount,
this.topSpeakers,
@ -259,255 +315,383 @@ class EventsList {
this.updated,
this.url1,
this.url2,
this.userCount});
this.userCount,
this.eventUserInterest,
});
EventsList.fromJson(Map<String, dynamic> json) {
isfav = false;
if (json["City"] is String) {
city = json["City"] ?? null;
}
if (json["Country"] is String) {
country = json["Country"] ?? null;
}
if (json["Region"] is String) {
region = json["Region"] ?? null;
}
if (json["activity_type"] is String) {
activityType = json["activity_type"];
}
if (json["address"] is String) {
address = json["address"];
}
if (json["city_id"] is String) {
cityId = json["city_id"];
}
if (json["client_id"] is String) {
clientId = json["client_id"];
}
if (json["cnt"] is String) {
cnt = json["cnt"];
}
if (json["country_id"] is String) {
countryId = json["country_id"];
}
if (json["created_by"] is String) {
createdBy = json["created_by"];
}
if (json["created_on"] is String) {
createdOn = json["created_on"];
}
if (json["dAllowed"] is bool) {
dAllowed = json["dAllowed"];
}
if (json["eAllowed"] is bool) {
eAllowed = json["eAllowed"];
}
if (json["end"] is String) {
end = json["end"];
}
if (json["eventLat"] is String) {
eventLat = json["eventLat"];
}
if (json["eventLong"] is String) {
eventLong = json["eventLong"];
}
if (json["event_id"] is String) {
eventId = json["event_id"];
}
if (json["event_type"] is String) {
eventType = json["event_type"];
}
if (json["event_unique_id"] is String) {
eventUniqueId = json["event_unique_id"];
}
if (json["event_user_attendee"] is bool) {
eventUserAttendee = json["event_user_attendee"];
}
if (json["global_event_id"] is String) {
globalEventId = json["global_event_id"];
}
if (json["hcp_pin"] is String) {
hcpPin = json["hcp_pin"];
}
if (json["id"] is String) {
id = json["id"];
}
if (json["kol_id"] is String) {
kolId = json["kol_id"];
}
if (json["location"] is String) {
location = json["location"];
}
if (json["modified_by"] is String) {
modifiedBy = json["modified_by"];
}
if (json["modified_on"] is String) {
modifiedOn = json["modified_on"];
}
if (json["name1"] is String) {
name1 = json["name1"];
}
if (json["notes"] is String) {
notes = json["notes"];
}
if (json["organizer"] is String) {
organizer = json["organizer"];
}
if (json["organizerAlias"] is String) {
organizerAlias = json["organizerAlias"];
}
if (json["organizer_type"] is String) {
organizerType = json["organizer_type"];
}
if (json["otype"] is String) {
otype = json["otype"];
}
if (json["partialcount"] is String) {
partialcount = json["partialcount"];
}
if (json["partially_released_event"] is String) {
partiallyReleasedEvent = json["partially_released_event"];
}
if (json["postal_code"] is String) {
postalCode = json["postal_code"];
}
if (json["profile_type"] is String) {
profileType = json["profile_type"];
}
if (json["project_id"] is String) {
projectId = json["project_id"];
}
if (json["role"] is String) {
role = json["role"];
}
if (json["session_name"] is String) {
sessionName = json["session_name"];
}
if (json["session_note"] is String) {
sessionNote = json["session_note"];
}
if (json["session_note1"] is String) {
sessionNote1 = json["session_note1"];
}
if (json["session_sponsor"] is String) {
sessionSponsor = json["session_sponsor"];
}
if (json["session_type"] is String) {
sessionType = json["session_type"];
}
if (json["sponsor_type"] is String) {
sponsorType = json["sponsor_type"];
}
if (json["start"] is String) {
start = json["start"];
}
if (json["state_id"] is String) {
stateId = json["state_id"];
}
if (json["stype"] is String) {
stype = json["stype"];
}
if (json["subject"] is String) {
subject = json["subject"];
}
if (json["therapeutic_area"] is String) {
therapeuticArea = json["therapeutic_area"];
}
if (json["topic"] is String) {
topic = json["topic"];
}
if (json["topic_name"] is String) {
topicName = json["topic_name"];
}
if (json["type"] is String) {
type = json["type"];
}
if (json["updated"] is bool) {
updated = json["updated"];
}
if (json["url1"] is String) {
url1 = json["url1"];
}
if (json["url2"] is String) {
url2 = json["url2"];
}
if (json["user_count"] is String) {
userCount = json["user_count"];
factory EventsList.fromJson(Map<String, dynamic> json) => EventsList(
therapeuticArea: json["therapeutic_area"],
hcpPin: json["hcp_pin"],
cnt: json["cnt"],
id: json["id"],
kolId: json["kol_id"],
type: json["type"],
eventType: json["event_type"],
eventId: json["event_id"],
sessionType: json["session_type"],
sessionName: json["session_name"],
role: json["role"],
topic: json["topic"],
start: json["start"],
end: json["end"],
organizer: json["organizer"],
sponsorType: json["sponsor_type"],
sessionSponsor: json["session_sponsor"],
organizerType: json["organizer_type"],
location: json["location"],
address: json["address"],
cityId: json["city_id"],
stateId: json["state_id"],
countryId: json["country_id"],
postalCode: json["postal_code"],
subject: json["subject"],
url1: json["url1"],
url2: json["url2"],
notes: json["notes"],
createdBy: json["created_by"],
createdOn: json["created_on"],
modifiedBy: json["modified_by"],
modifiedOn: json[
"modified_on"], // == null ? null : DateTime.parse(json["modified_on"]),
clientId: json["client_id"],
projectId: json["project_id"],
activityType: json["activity_type"],
profileType: json["profile_type"],
globalEventId: json["global_event_id"],
eventUniqueId: json["event_unique_id"],
stype: json["stype"],
otype: json["otype"],
// name: json["name"],
partiallyReleasedEvent: json["partially_released_event"],
country: json["Country"],
region: json["Region"],
city: json["City"],
topicName: json["topic_name"],
eventLat: json["eventLat"],
eventLong: json["eventLong"],
userCount: json["user_count"],
partialcount: json["partialcount"],
sessionNote1: json["session_note1"],
sessionNote: json["session_note"],
organizerAlias: json["organizerAlias"],
eAllowed: json["eAllowed"],
dAllowed: json["dAllowed"],
updated: json["updated"],
eventUserAttendee: json["event_user_attendee"],
eventUserInterest: json["event_user_interest"],
name1: json["name1"],
);
Map<String, dynamic> toJson() => {
"therapeutic_area": therapeuticArea,
"hcp_pin": hcpPin,
"cnt": cnt,
"id": id,
"kol_id": kolId,
"type": type,
"event_type": eventType,
"event_id": eventId,
"session_type": sessionType,
"session_name": sessionName,
"role": role,
"topic": topic,
"start": start,
"end": end,
"organizer": organizer,
"sponsor_type": sponsorType,
"session_sponsor": sessionSponsor,
"organizer_type": organizerType,
"location": location,
"address": address,
"city_id": cityId,
"state_id": stateId,
"country_id": countryId,
"postal_code": postalCode,
"subject": subject,
"url1": url1,
"url2": url2,
"notes": notes,
"created_by": createdBy,
"created_on": createdOn,
"modified_by": modifiedBy,
"modified_on": modifiedOn,
"client_id": clientId,
"project_id": projectId,
"activity_type": activityType,
"profile_type": profileType,
"global_event_id": globalEventId,
"event_unique_id": eventUniqueId,
"stype": stype,
"otype": otype,
// "name": name,
"partially_released_event": partiallyReleasedEvent,
"Country": country,
"Region": region,
"City": city,
"topic_name": topicName,
"eventLat": eventLat,
"eventLong": eventLong,
"user_count": userCount,
"partialcount": partialcount,
"session_note1": sessionNote1,
"session_note": sessionNote,
"organizerAlias": organizerAlias,
"eAllowed": eAllowed,
"dAllowed": dAllowed,
"updated": updated,
"event_user_attendee": eventUserAttendee,
"event_user_interest": eventUserInterest,
"name1": name1,
};
}
if (json["speakerscount"] is String) {
speakerscount = json["speakerscount"];
}
if (json["topTopics"] is String) {
topTopics = json["topTopics"];
}
if (json["topSpeakers"] is String) {
topSpeakers = json["topSpeakers"];
}
if (json["sponsors"] is String) {
sponsors = json["sponsors"];
}
}
// EventsList.fromJson(Map<String, dynamic> json) {
// isfav = false;
// if (json["city_name"] is String) {
// city = json["city_name"] ?? null;
// }
// if (json["country_name"] is String) {
// country = json["country_name"] ?? null;
// }
// if (json["state_name"] is String) {
// region = json["state_name"] ?? null;
// }
// if (json["activity_type"] is String) {
// activityType = json["activity_type"];
// }
// if (json["address"] is String) {
// address = json["address"];
// }
// if (json["city_id"] is String) {
// cityId = json["city_id"];
// }
// if (json["client_id"] is String) {
// clientId = json["client_id"];
// }
// if (json["cnt"] is String) {
// cnt = json["cnt"];
// }
// if (json["country_id"] is String) {
// countryId = json["country_id"];
// }
// if (json["created_by"] is String) {
// createdBy = json["created_by"];
// }
// if (json["created_on"] is String) {
// createdOn = json["created_on"];
// }
// if (json["dAllowed"] is bool) {
// dAllowed = json["dAllowed"];
// }
// if (json["eAllowed"] is bool) {
// eAllowed = json["eAllowed"];
// }
// if (json["end_date"] is String) {
// end = json["end_date"];
// }
// if (json["eventLat"] is String) {
// eventLat = json["eventLat"];
// }
// if (json["eventLong"] is String) {
// eventLong = json["eventLong"];
// }
// if (json["unique_id"] is String) {
// eventId = json["unique_id"];
// }
// if (json["event_type_name"] is String) {
// eventType = json["event_type_name"];
// }
// if (json["event_unique_id"] is String) {
// eventUniqueId = json["event_unique_id"];
// }
// if (json["event_user_attendee"] is bool) {
// eventUserAttendee = json["event_user_attendee"];
// }
// if (json["global_event_id"] is String) {
// globalEventId = json["global_event_id"];
// }
// if (json["hcp_pin"] is String) {
// hcpPin = json["hcp_pin"];
// }
// if (json["id"] is String) {
// id = json["id"];
// }
// if (json["kol_id"] is String) {
// kolId = json["kol_id"];
// }
// if (json["location"] is String) {
// location = json["location"];
// }
// if (json["modified_by"] is String) {
// modifiedBy = json["modified_by"];
// }
// if (json["modified_on"] is String) {
// modifiedOn = json["modified_on"];
// }
// if (json["event_name"] is String) {
// name1 = json["event_name"];
// }
// if (json["notes"] is String) {
// notes = json["notes"];
// }
// if (json["organizer"] is String) {
// organizer = json["organizer"];
// }
// if (json["organizerAlias"] is String) {
// organizerAlias = json["organizerAlias"];
// }
// if (json["organizer_type_name"] is String) {
// organizerType = json["organizer_type_name"];
// }
// if (json["otype"] is String) {
// otype = json["otype"];
// }
// if (json["partialcount"] is String) {
// partialcount = json["partialcount"];
// }
// if (json["partially_released_event"] is String) {
// partiallyReleasedEvent = json["partially_released_event"];
// }
// if (json["postal_code"] is String) {
// postalCode = json["postal_code"];
// }
// if (json["profile_type"] is String) {
// profileType = json["profile_type"];
// }
// if (json["project_id"] is String) {
// projectId = json["project_id"];
// }
// if (json["role"] is String) {
// role = json["role"];
// }
// if (json["session_name"] is String) {
// sessionName = json["session_name"];
// }
// if (json["session_note"] is String) {
// sessionNote = json["session_note"];
// }
// if (json["session_note1"] is String) {
// sessionNote1 = json["session_note1"];
// }
// if (json["session_sponsor"] is String) {
// sessionSponsor = json["session_sponsor"];
// }
// if (json["session_type"] is String) {
// sessionType = json["session_type"];
// }
// if (json["sponsor_type_name"] is String) {
// sponsorType = json["sponsor_type_name"];
// }
// if (json["start_date"] is String) {
// start = json["start_date"];
// }
// if (json["state_id"] is String) {
// stateId = json["state_id"];
// }
// if (json["stype"] is String) {
// stype = json["stype"];
// }
// if (json["subject"] is String) {
// subject = json["subject"];
// }
// if (json["therapeutic_area"] is String) {
// therapeuticArea = json["therapeutic_area"];
// }
// if (json["topic"] is String) {
// topic = json["topic"];
// }
// if (json["topic_name"] is String) {
// topicName = json["topic_name"];
// }
// if (json["type"] is String) {
// type = json["type"];
// }
// if (json["updated"] is bool) {
// updated = json["updated"];
// }
// if (json["url"] is String) {
// url1 = json["url"];
// }
// if (json["url2"] is String) {
// url2 = json["url2"];
// }
// if (json["user_count"] is String) {
// userCount = json["user_count"];
// }
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["City"] = city;
_data["country"] = country;
_data["region"] = region;
_data["activity_type"] = activityType;
_data["address"] = address;
_data["city_id"] = cityId;
_data["client_id"] = clientId;
_data["cnt"] = cnt;
_data["country_id"] = countryId;
_data["created_by"] = createdBy;
_data["created_on"] = createdOn;
_data["dAllowed"] = dAllowed;
_data["eAllowed"] = eAllowed;
_data["end"] = end;
_data["eventLat"] = eventLat;
_data["eventLong"] = eventLong;
_data["event_id"] = eventId;
_data["event_type"] = eventType;
_data["event_unique_id"] = eventUniqueId;
_data["event_user_attendee"] = eventUserAttendee;
_data["global_event_id"] = globalEventId;
_data["hcp_pin"] = hcpPin;
_data["id"] = id;
_data["kol_id"] = kolId;
_data["location"] = location;
_data["modified_by"] = modifiedBy;
_data["modified_on"] = modifiedOn;
_data["name1"] = name1;
_data["notes"] = notes;
_data["organizer"] = organizer;
_data["organizerAlias"] = organizerAlias;
_data["organizer_type"] = organizerType;
_data["otype"] = otype;
_data["partialcount"] = partialcount;
_data["partially_released_event"] = partiallyReleasedEvent;
_data["postal_code"] = postalCode;
_data["profile_type"] = profileType;
_data["project_id"] = projectId;
_data["role"] = role;
_data["session_name"] = sessionName;
_data["session_note"] = sessionNote;
_data["session_note1"] = sessionNote1;
_data["session_sponsor"] = sessionSponsor;
_data["session_type"] = sessionType;
_data["sponsor_type"] = sponsorType;
_data["start"] = start;
_data["state_id"] = stateId;
_data["stype"] = stype;
_data["subject"] = subject;
_data["therapeutic_area"] = therapeuticArea;
_data["topic"] = topic;
_data["topic_name"] = topicName;
_data["type"] = type;
_data["updated"] = updated;
_data["url1"] = url1;
_data["url2"] = url2;
_data["user_count"] = userCount;
return _data;
}
}
// if (json["speakerscount"] is String) {
// speakerscount = json["speakerscount"];
// }
// if (json["topTopics"] is String) {
// topTopics = json["topTopics"];
// }
// if (json["topSpeakers"] is String) {
// topSpeakers = json["topSpeakers"];
// }
// if (json["sponsors"] is String) {
// sponsors = json["sponsors"];
// }
// }
// Map<String, dynamic> toJson() {
// final Map<String, dynamic> _data = <String, dynamic>{};
// _data["City"] = city;
// _data["country"] = country;
// _data["region"] = region;
// _data["activity_type"] = activityType;
// _data["address"] = address;
// _data["city_id"] = cityId;
// _data["client_id"] = clientId;
// _data["cnt"] = cnt;
// _data["country_id"] = countryId;
// _data["created_by"] = createdBy;
// _data["created_on"] = createdOn;
// _data["dAllowed"] = dAllowed;
// _data["eAllowed"] = eAllowed;
// _data["end"] = end;
// _data["eventLat"] = eventLat;
// _data["eventLong"] = eventLong;
// _data["event_id"] = eventId;
// _data["event_type"] = eventType;
// _data["event_unique_id"] = eventUniqueId;
// _data["event_user_attendee"] = eventUserAttendee;
// _data["global_event_id"] = globalEventId;
// _data["hcp_pin"] = hcpPin;
// _data["id"] = id;
// _data["kol_id"] = kolId;
// _data["location"] = location;
// _data["modified_by"] = modifiedBy;
// _data["modified_on"] = modifiedOn;
// _data["name1"] = name1;
// _data["notes"] = notes;
// _data["organizer"] = organizer;
// _data["organizerAlias"] = organizerAlias;
// _data["organizer_type"] = organizerType;
// _data["otype"] = otype;
// _data["partialcount"] = partialcount;
// _data["partially_released_event"] = partiallyReleasedEvent;
// _data["postal_code"] = postalCode;
// _data["profile_type"] = profileType;
// _data["project_id"] = projectId;
// _data["role"] = role;
// _data["session_name"] = sessionName;
// _data["session_note"] = sessionNote;
// _data["session_note1"] = sessionNote1;
// _data["session_sponsor"] = sessionSponsor;
// _data["session_type"] = sessionType;
// _data["sponsor_type"] = sponsorType;
// _data["start"] = start;
// _data["state_id"] = stateId;
// _data["stype"] = stype;
// _data["subject"] = subject;
// _data["therapeutic_area"] = therapeuticArea;
// _data["topic"] = topic;
// _data["topic_name"] = topicName;
// _data["type"] = type;
// _data["updated"] = updated;
// _data["url1"] = url1;
// _data["url2"] = url2;
// _data["user_count"] = userCount;
// return _data;
// }
// }

View File

@ -80,13 +80,14 @@ class EventsListAdapter extends TypeAdapter<EventsList> {
url1: fields[54] as String?,
url2: fields[55] as String?,
userCount: fields[56] as String?,
eventUserInterest: fields[63] as bool?,
);
}
@override
void write(BinaryWriter writer, EventsList obj) {
writer
..writeByte(63)
..writeByte(64)
..writeByte(0)
..write(obj.city)
..writeByte(1)
@ -212,7 +213,9 @@ class EventsListAdapter extends TypeAdapter<EventsList> {
..writeByte(61)
..write(obj.topSpeakers)
..writeByte(62)
..write(obj.sponsors);
..write(obj.sponsors)
..writeByte(63)
..write(obj.eventUserInterest);
}
@override

View File

@ -0,0 +1,102 @@
// To parse this JSON data, do
//
// final sessionTopicsResponse = sessionTopicsResponseFromJson(jsonString);
import 'dart:convert';
SessionTopicsResponse sessionTopicsResponseFromJson(String str) =>
SessionTopicsResponse.fromJson(json.decode(str));
String sessionTopicsResponseToJson(SessionTopicsResponse data) =>
json.encode(data.toJson());
class SessionTopicsResponse {
List<SessionsTopicsData>? data;
SessionTopicsResponse({
this.data,
});
factory SessionTopicsResponse.fromJson(Map<String, dynamic> json) =>
SessionTopicsResponse(
data: json["data"] == null
? []
: List<SessionsTopicsData>.from(
json["data"]!.map((x) => SessionsTopicsData.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"data": data == null
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
};
}
class SessionsTopicsData {
String? sessionName;
String? eventTopics;
String? kolEventsId;
String? eventAttendeesId;
String? myEventId;
String? note;
String? kolId;
String? id;
bool? canEditNotes;
bool? canAddNotes;
String? noteCount;
String? projKolId;
bool? canAddInsights;
bool? canEditInsights;
SessionsTopicsData({
this.sessionName,
this.eventTopics,
this.kolEventsId,
this.eventAttendeesId,
this.myEventId,
this.note,
this.kolId,
this.id,
this.canEditNotes,
this.canAddNotes,
this.noteCount,
this.projKolId,
this.canAddInsights,
this.canEditInsights,
});
factory SessionsTopicsData.fromJson(Map<String, dynamic> json) =>
SessionsTopicsData(
sessionName: json["session_name"],
eventTopics: json["event_topics"],
kolEventsId: json["kol_events_id"],
eventAttendeesId: json["event_attendees_id"],
myEventId: json["my_event_id"],
note: json["note"],
kolId: json["kol_id"],
id: json["id"],
canEditNotes: json["can_edit_notes"],
canAddNotes: json["can_add_notes"],
noteCount: json["note_count"],
projKolId: json["proj_kol_id"],
canAddInsights: json["can_add_insights"],
canEditInsights: json["can_edit_insights"],
);
Map<String, dynamic> toJson() => {
"session_name": sessionName,
"event_topics": eventTopics,
"kol_events_id": kolEventsId,
"event_attendees_id": eventAttendeesId,
"my_event_id": myEventId,
"note": note,
"kol_id": kolId,
"id": id,
"can_edit_notes": canEditNotes,
"can_add_notes": canAddNotes,
"note_count": noteCount,
"proj_kol_id": projKolId,
"can_add_insights": canAddInsights,
"can_edit_insights": canEditInsights,
};
}

View File

@ -46,13 +46,19 @@ class Specialtyresp {
};
}
List<Specialty> specialtyFromJson(String str) =>
List<Specialty>.from(json.decode(str).map((x) => Specialty.fromJson(x)));
String specialtyToJson(List<Specialty> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Specialty {
String specialtyCount;
String specialtyName;
String? specialtyCount;
String? specialtyName;
Specialty({
required this.specialtyCount,
required this.specialtyName,
this.specialtyCount,
this.specialtyName,
});
factory Specialty.fromJson(Map<String, dynamic> json) => Specialty(

View File

@ -54,6 +54,13 @@ class Topicsresp {
};
}
List<TopicsCloudData> topicsCloudDataFromJson(String str) =>
List<TopicsCloudData>.from(
json.decode(str).map((x) => TopicsCloudData.fromJson(x)));
String topicsCloudDataToJson(List<TopicsCloudData> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class TopicsCloudData {
String? total;
String? topic;

View File

@ -5,13 +5,18 @@ import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:flutter/services.dart';
import 'package:konectar_events/model/affiliationsmodel.dart';
import 'package:konectar_events/model/events_details.dart';
import 'package:konectar_events/model/events_list_resp_2.dart';
import 'package:konectar_events/model/events_speakers_k1.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventsmodel.dart';
import 'package:konectar_events/model/eventsoverview.dart';
import 'package:konectar_events/model/eventspeakers.dart';
import 'package:konectar_events/model/keywords_model.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/model/scope_model.dart';
import 'package:konectar_events/model/sessionnotesmodel.dart';
import 'package:konectar_events/model/sessionstopics_model.dart';
import 'package:konectar_events/model/specialtymodel.dart';
import 'package:konectar_events/model/topics_cloud_model.dart';
import 'package:konectar_events/utils/constants.dart';
@ -19,6 +24,7 @@ import 'package:konectar_events/utils/constants.dart';
class ApiCall {
final dio = Dio();
//K1 API CALLS
Future<dynamic> parseInfo() async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
@ -42,30 +48,6 @@ class ApiCall {
return response.data;
}
//https://cardio-staging.konectar.io/notifications/list_all_notifications
Future<dynamic> listnotifications() async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.post(
'https://cardio-staging.konectar.io/requested_kols/list_my_pending_approvals/',
options: Options(
followRedirects: false,
validateStatus: (status) {
return status! < 500;
},
headers: {'Content-type': 'application/json; charset=UTF-8'}),
data: {"rows": "10", "page": "1", "sidx": "name", "sord": "desc"});
print("response user settings here ");
print(response.data.toString());
return response.data;
}
Future<List<Therapeutic>> getscopes() async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
@ -122,7 +104,7 @@ class ApiCall {
return keywordList;
}
Future<List<EventsList>?> getStagingEvents() async {
Future<List<EventsList>> getEventsFromK1({String? type}) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
@ -134,29 +116,132 @@ class ApiCall {
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"project_id": "",
"start": "",
"end": "",
"order_by": "7",
"type": "1"
"start": DateTime(2024, 10, 14).toIso8601String(),
"end": DateTime(2024, 12, 14).toIso8601String(),
"order_by": 7,
"type": type ?? 1
});
response = await dio.post(
'${EventsConstants.stagingUrl}${EventsConstants.eventslistapi}',
'${EventsConstants.devUrl}${EventsConstants.eventslistapi}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
},
// queryParameters: {
// "user_email": "vinodh@aissel.com",
// "project_id": "",
// "start": 2024 - 11 - 22,
// "end": "",
// "order_by": 7,
// "type": 1,
// },
data: formData);
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventsDataStaging? eventdata = EventsDataStaging.fromJson(jsondata);
List<EventsList>? eventList = eventdata.events;
return eventList;
EventsData eventresponse = EventsData.fromJson(jsondata);
List<EventsList>? eventdata = eventresponse.events;
return eventdata!;
}
Future<dynamic> verifyEmail(
String email, String deviceid, String platform) async {
Future<dynamic> followUnfollowEvent(String flag, String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap(
{"user_email": "vinodh@aissel.com", "eid": eventid, "flag": flag});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.followUnfollowEvent}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"eid": eventid,
"flag": flag,
},
data: formData);
print("response user FOLLOW UNFOLLOW here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
return response.data.toString();
}
Future<dynamic> attendNotAttendEvent(String flag, String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap(
{"user_email": "vinodh@aissel.com", "eid": eventid, "flag": flag});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.attendNotAttendEvent}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"eid": eventid,
"flag": flag,
},
data: formData);
print("response user FOLLOW UNFOLLOW here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
return response.data.toString();
}
Future<List<Specialty>> specialtyOfSpeakers({
required String eventid,
required String startDate,
required String endDate,
}) async {
print("CHECK_DATE $startDate $endDate $eventid");
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
//ventId=4937&type='1'&sd=2024-07-30&ed=2024-08-03&user_email=vinodh@aissel.com
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": startDate,
"ed": endDate,
"type": 1,
});
print("FORMDATA:${formData.toString()},$startDate,$endDate");
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.specialtyOfSpeakers}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": "\"$startDate\"",
"ed": "\"$endDate\"",
"type": "\"1\"",
},
data: formData);
print("response SPECIALTY SPEAKERS here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
// Map<String, dynamic> jsondata = json.decode(response.data);
// Specialtyresp resp = Specialtyresp.fromJson(jsondata);
List<Specialty> data = specialtyFromJson(response.data);
return data;
}
Future<List<TopicsCloudData>> insightsTopicsCloud({
required String eventid,
required String startDate,
required String endDate,
}) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
@ -166,26 +251,389 @@ class ApiCall {
};
Response response;
var formData = FormData.fromMap({
"email": email,
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": "\"$startDate\"",
"ed": "\"$endDate\"",
"type": "\"1\"",
});
response = await dio.post('${EventsConstants.getTokenApi}',
print("FORMDATA:${formData.toString()},$startDate,$endDate");
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.insightsTopicsCloud}',
options: Options(),
queryParameters: {
"email": email,
"device_id": deviceid,
"platform": platform,
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": "\"$startDate\"",
"ed": "\"$endDate\"",
"type": "\"1\"",
},
data: formData);
if (response.statusCode == 200) {
print("response user login!!!!!!!!!!!!!!!!!!!!! ");
print("response SPECIALTY SPEAKERS here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
return response.data;
// Map<String, dynamic> jsondata = json.decode(response.data);
// Specialtyresp resp = Specialtyresp.fromJson(jsondata);
List<TopicsCloudData> data = topicsCloudDataFromJson(response.data);
return data;
}
Future<List<Affiliations>> insightsBarChart({
required String eventid,
required String startDate,
required String endDate,
}) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": "\"$startDate\"",
"ed": "\"$endDate\"",
"type": "\"1\"",
});
print("FORMDATA:${formData.toString()},$startDate,$endDate");
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.insightsBarChart}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"eventId": eventid,
"sd": "\"$startDate\"",
"ed": "\"$endDate\"",
"type": "\"1\"",
},
data: formData);
print("response SPECIALTY SPEAKERS here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
// Map<String, dynamic> jsondata = json.decode(response.data);
// Specialtyresp resp = Specialtyresp.fromJson(jsondata);
List<Affiliations> data = affiliationsFromJson(response.data);
return data;
}
Future<EventsOverviewData> getEventsOverview(
String eventid, String startDate, String endDate) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"event_id": eventid,
});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.eventdetailsapi}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"event_id": eventid,
},
data: formData);
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventsOverviewDetails? eventdata = EventsOverviewDetails.fromJson(jsondata);
EventsOverviewData overviewData = eventdata.data!;
return overviewData;
}
Future<List<EventSpeakersData>> getEventsSpeakersFromK1(
String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"event_id": eventid,
"sd": "2024-07-30",
"ed": "2024-08-03",
});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.speakerslistapi}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"event_id": eventid,
},
data: formData);
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventSpeakersResponse? eventdata = EventSpeakersResponse.fromJson(jsondata);
List<EventSpeakersData> data = eventdata.data!;
return data;
}
Future<List<SessionsTopicsData>> getSessionsTopics(
String eventid, String kolid, String kid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
print("formdata : eventid:$eventid kolid:$kolid kid:$kid");
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"event_id": "eventid",
"kol_id": kolid,
"k_id": kid,
"proj_kol_id": 0,
});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.showEventsTopicsAndSession}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"event_id": eventid,
},
data: formData);
print("response user SESSIONTOPICS here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
SessionTopicsResponse sessionTopicsResponse =
SessionTopicsResponse.fromJson(jsondata);
List<SessionsTopicsData> data = sessionTopicsResponse.data!;
return data;
}
Future<dynamic> addSessionNotes(String eventid, String kolid,
String event_attendees_id, String kid, String notes) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"kol_events_id": eventid,
"kol_id": kolid,
"event_attendees_id": event_attendees_id,
"notes": notes,
});
response = await dio.post(
'${EventsConstants.devUrl}${EventsConstants.showEventsTopicsAndSession}',
options: Options(),
data: formData);
print("response user ADDSESSION here!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
// SessionTopicsResponse sessionTopicsResponse =
// SessionTopicsResponse.fromJson(jsondata);
// List<SessionsTopicsData> data = sessionTopicsResponse.data!;
return jsondata;
}
//************ K2 API CALLS ***********************************************************************************************************************************
Future<List<EventsList>> getEventsFromK2(int page, String search,
{String? startdate, String? enddate}) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData;
if (startdate != "") {
formData = {
"page": page,
"limit": 20,
"start_date": startdate,
"end_date": enddate,
};
} else {
print("isEmplty");
return null;
formData = {
"page": page,
"limit": 20,
"conditions": [
{"field": "event_name", "type": "like", "value": search}
]
};
}
response = await dio.post('${EventsConstants.eventslistapifromk2}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
HttpHeaders.contentTypeHeader: "application/json",
}),
// queryParameters: {
// "page": page,
// "limit": 20,
// // "id": "11c39192480587d2d6213bfef6744571",
// "conditions": jsonEncode([
// {"field": eventfield, "type": "like", "value": searchkey}
// ])
// },
data: formData);
if (response.statusCode == 200) {
print("response EVENTS!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = response.data;
EventsListRespK2 eventresponse = EventsListRespK2.fromJson(jsondata);
List<EventsList>? eventdata = eventresponse.data;
return eventdata!;
} else {
print("isEmpty");
return [];
}
}
Future<List<EventsList>> getMyEventsFromK2(int page, String search,
{String? startdate, String? enddate}) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData;
if (startdate != "") {
formData = {
"page": page,
"limit": 20,
"id": "11c39192480587d2d6213bfef6744571",
"start_date": startdate,
"end_date": enddate,
};
} else {
formData = {
"page": page,
"limit": 20,
"id": "11c39192480587d2d6213bfef6744571",
"conditions": [
{"field": "event_name", "type": "like", "value": search}
]
};
}
response = await dio.post('${EventsConstants.eventslistapifromk2}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
HttpHeaders.contentTypeHeader: "application/json",
}),
// queryParameters: {
// "page": page,
// "limit": 20,
// // "id": "11c39192480587d2d6213bfef6744571",
// "conditions": jsonEncode([
// {"field": eventfield, "type": "like", "value": searchkey}
// ])
// },
data: formData);
if (response.statusCode == 200) {
print("response MY EVENTS!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = response.data;
EventsListRespK2 eventresponse = EventsListRespK2.fromJson(jsondata);
List<EventsList>? eventdata = eventresponse.data;
return eventdata!;
} else {
print("isEmpty");
return [];
}
}
//ADD TO FAVS
Future<String> addEventsToFav(String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.post(
'${EventsConstants.addToMyEventsApi}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a"
}),
queryParameters: {
"event_id": eventid,
"user_id": "11c39192480587d2d6213bfef6744571",
},
);
print("response user keywords here########## ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.toString());
String message = jsondata["message"];
print("***$message");
return message;
}
//REMOVE FROM FAVS
Future<String> removeEventsFromFav(String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.post(
'${EventsConstants.removeFromMyEventsApi}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
}),
queryParameters: {
"event_id": eventid,
"user_id": "11c39192480587d2d6213bfef6744571",
},
);
print("response user keywords here########## ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.toString());
String message = jsondata["message"];
print("***$message");
return message;
}
//GET MY EVENTS
Future<dynamic> verifyCode(String email, String code) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
@ -238,8 +686,151 @@ class ApiCall {
return response.data;
}
Future<OverviewData> getEventsOverview(
String eventid, String startDate, String endDate) async {
//SEARCH EVENTS API FROM K2
Future<List<EventsList>> getSearchedEventsFromK2(
int page, String eventfield, String searchkey) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = {
"page": page,
"limit": 20,
"conditions": [
{"field": eventfield, "type": "like", "value": searchkey}
]
};
response = await dio.post('${EventsConstants.eventslistapifromk2}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
HttpHeaders.contentTypeHeader: "application/json",
}),
// queryParameters: {
// "page": page,
// "limit": 20,
// // "id": "11c39192480587d2d6213bfef6744571",
// "conditions": jsonEncode([
// {"field": eventfield, "type": "like", "value": searchkey}
// ])
// },
data: formData);
if (response.statusCode == 200) {
print("response SEARCH EVENTS!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = response.data;
EventsListRespK2 eventresponse = EventsListRespK2.fromJson(jsondata);
List<EventsList>? eventdata = eventresponse.data;
return eventdata!;
} else {
print("isEmpty");
return [];
}
}
//SPEAKERS LIST FROM K2
Future<Map<String, Object?>> getSpeakersFromK2(
int page, String eventid, String event_unique_id,
{String? searchkey}) async {
Dio dio = Dio();
print("see pages^^^^^^^ : $page");
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = {
"page": page,
"limit": 40,
"id": "da8cb02cdeddd174bf0fd0ae08247ca1",
"event_id": "1a0029ea72bf4adc5e6bbfd91ace364a",
"hcp_full_name": searchkey
// "conditions": [
// {"field": eventfield, "type": "like", "value": searchkey}
// ]
};
response = await dio.post('${EventsConstants.speakerslistapifromk2}',
options: Options(headers: {
"Authorization":
"Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
HttpHeaders.contentTypeHeader: "application/json",
}),
// queryParameters: {
// "page": page,
// "limit": 20,
// // "id": "11c39192480587d2d6213bfef6744571",
// "conditions": jsonEncode([
// {"field": eventfield, "type": "like", "value": searchkey}
// ])
// },
data: formData);
if (response.statusCode == 200) {
print("respons Speakers !!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = response.data;
SpeakersResponse resp = SpeakersResponse.fromJson(jsondata);
List<SpeakersList>? data = resp.data;
var respdata = {"count": resp.count, "list": data ?? []};
return respdata;
} else {
print("isEmpty");
return {};
}
}
//************ OTHER API CALLS ***********************************************************************************************************************************
Future<dynamic> dummyapi() async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.get('http://203.129.219.14:3043/weather?city=London',
options: Options());
print("response PLATFORMATIC here ");
print(response.data.toString());
return response.data;
}
//https://cardio-staging.konectar.io/notifications/list_all_notifications
Future<dynamic> listnotifications() async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.post(
'https://cardio-staging.konectar.io/requested_kols/list_my_pending_approvals/',
options: Options(
followRedirects: false,
validateStatus: (status) {
return status! < 500;
},
headers: {'Content-type': 'application/json; charset=UTF-8'}),
data: {"rows": "10", "page": "1", "sidx": "name", "sord": "desc"});
print("response user settings here ");
print(response.data.toString());
return response.data;
}
Future<dynamic> verifyEmail(
String email, String deviceid, String platform) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
@ -249,25 +840,24 @@ class ApiCall {
};
Response response;
var formData = FormData.fromMap({
"user_email": "vinodh@aissel.com",
"start": startDate,
"end": endDate,
"event_id": eventid,
"email": email,
});
response = await dio.post(
'${EventsConstants.stagingUrl}${EventsConstants.eventslistapi}',
response = await dio.post('${EventsConstants.getTokenApi}',
options: Options(),
queryParameters: {
"user_email": "vinodh@aissel.com",
"email": email,
"device_id": deviceid,
"platform": platform,
},
data: formData);
print("response user eventssssss here!!!!!!!!!!!!!!!!!!!!! ");
if (response.statusCode == 200) {
print("response user login!!!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.data);
EventsDetailsResp? eventdata = EventsDetailsResp.fromJson(jsondata);
OverviewData overviewData = eventdata.data;
return overviewData;
return response.data;
} else {
print("isEmplty");
return null;
}
}
Future<List<EventsList>?> getEvents() async {
@ -324,29 +914,6 @@ class ApiCall {
return eventsdetailList;
}
Future<String> addEventsToFav(String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
response = await dio.post(
'${EventsConstants.domainUrl}eventsapi.api.addEventsToFav?eventid=$eventid',
options: Options(),
);
print("response user keywords here########## ");
print(response.data.toString());
Map<String, dynamic> jsondata = json.decode(response.toString());
String message = jsondata["message"];
print("***$message");
return message;
}
Future<String> attendEvents(String eventid) async {
Dio dio = Dio();
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
@ -619,4 +1186,58 @@ class ApiCall {
return data;
}
Future<Map<String, Object?>> getSpeakersFromLocal(
int page, String eventid, String event_unique_id,
{String? searchkey}) async {
Dio dio = Dio();
print("see pages^^^^^^^ : $page");
(dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return client;
};
Response response;
var formData = {
"page": page,
"limit": 40,
"id": eventid,
"event_id": event_unique_id,
"hcp_full_name": searchkey
// "conditions": [
// {"field": eventfield, "type": "like", "value": searchkey}
// ]
};
response = await dio.post(
'${EventsConstants.speakerslistapifromLocal}',
// options: Options(headers: {
// "Authorization":
// "Bearer 242|f4s7EfBjD01z1tuGeJfgKm7v2WzZk22uDOehqFyla72c481a",
// HttpHeaders.contentTypeHeader: "application/json",
// }),
// queryParameters: {
// "page": page,
// "limit": 20,
// // "id": "11c39192480587d2d6213bfef6744571",
// "conditions": jsonEncode([
// {"field": eventfield, "type": "like", "value": searchkey}
// ])
// },
// data: formData
);
if (response.statusCode == 200) {
print("respons Speakers !!!!!!!!!!!!!!!!!!!! ");
print(response.data.toString());
Map<String, dynamic> jsondata = response.data;
SpeakersResponse1 resp = SpeakersResponse1.fromJson(jsondata);
List<SpeakersList>? data = resp.data!.data;
var respdata = {"count": 92, "list": data ?? []};
return respdata;
} else {
print("isEmpty");
return {};
}
}
}

View File

@ -22,6 +22,8 @@ class AppColors {
static const Color contentColorPink = Color(0xFFFF3AF2);
static const Color contentColorRed = Color(0xFFE80054);
static const Color contentColorCyan = Color(0xFF50E4FF);
//background: #F3F3F3;
List<Color> appcolors = [
contentColorYellow,
contentColorBlue,

View File

@ -12,16 +12,50 @@ class EventsConstants {
static const Color fonttopic = Color.fromARGB(255, 68, 68, 68);
static const Color btnGreenColor = Color.fromARGB(255, 46, 166, 100);
static const Color btnBlueColor = Color.fromARGB(255, 0, 102, 204);
static const Color homeCardBackgound =
Color.fromRGBO(229, 229, 229, 1); //rgba(243, 243, 243, 1)
static const Color onboardButtonColor = Color.fromRGBO(3, 126, 238, 1);
// static const String domainUrl = "http://192.0.0.2:8007/api/method/";
static const String domainUrl = "http://192.168.2.109:8007/api/method/";
//192.0.0.2:8007 - iphone
// 192.168.2.109:8007 - office
//K1 API~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
static const String stagingUrl =
"https://cardio-staging.konectar.io/reports/";
static const String eventslistapi = "load_future_events";
static const String speakerslistapi = "view_micro_event_data";
static const String eventdetailsapi = "view_micro_event";
static const String devUrl =
"http://192.168.2.130/konectar-sandbox/eventapis/";
static const String eventslistapi = "loadFutureEvents/";
static const String followUnfollowEvent = "saveUserInterestedEvent/";
static const String attendNotAttendEvent = "saveUserAttendingEvent/";
static const String specialtyOfSpeakers = "getSpecialitiesDonutChart";
static const String insightsTopicsCloud = "getTopicCloudChart/";
static const String insightsBarChart = "getTopAffiliationBarChart/";
static const String speakerslistapi = "eventSpeakers";
static const String eventdetailsapi = "eventOverview";
static const String showEventsTopicsAndSession = "showEventsTopicsAndSession";
static const String getTopicNotes = "getTopicNotes";
static const String saveEventsTopicNote = "saveEventsTopicNote";
static const String eventUserAnalytics = "eventUserAnalytics";
//K1 API END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
static const String eventslistapifromk2 =
"http://192.168.2.130:8888/api/kolevents/v1/en/fetch";
static const String speakerslistapifromk2 =
"http://192.168.2.130:8888/api/kolevents/v1/en/event_speakers";
static const String speakerslistapifromLocal =
"http://events.localhost:8007/api/method/speakerslist";
static const String addToMyEventsApi =
"http://192.168.2.130:8888/api/kolevents/v1/en/add_to_my_event";
static const String removeFromMyEventsApi =
"http://192.168.2.130:8888/api/kolevents/v1/en/delete_my_event";
static const String fetchMyEventsApi =
"http://192.168.2.130:8888/api/kolevents/v1/en/list_my_events";
static const String unfollowMyEventsApi =
"http://192.168.2.130:8888/api/kolevents/v1/en/delete_my_event";
static const String getTokenApi =
"http://192.168.2.155:8002/api/auth/mobile/get_token";
static const String validateTokenApi =

View File

@ -3,13 +3,29 @@ import 'package:intl/intl.dart';
class CustomDateFormatter {
DateTime convertStringToDate(String datestring) {
print("Date string : $datestring");
List<String> datearray = datestring.split('/');
String char = "/";
if (datestring.contains("-")) {
char = "-";
}
List<String> datearray = datestring.split(char);
DateTime outputDate = DateTime(int.parse(datearray[2]),
int.parse(datearray[0]), int.parse(datearray[1]));
print("Output date : $outputDate");
return outputDate;
}
String convertDateTimeToDate(String datestring) {
print("Date string : $datestring");
List<String> datearray1 = datestring.split(' ');
print("Date string22 : $datearray1[0]");
List<String> datearray = datearray1[0].split('-');
DateTime outputDate = DateTime(int.parse(datearray[0]),
int.parse(datearray[1]), int.parse(datearray[2]));
final DateFormat formatter = DateFormat('dd-MM-yyyy');
print("Output date : $outputDate");
return formatter.format(outputDate);
}
String formatDate() {
final DateFormat formatter = DateFormat('yyyy-MM-dd hh:mm');
final String formatted = formatter.format(DateTime.now());

View File

@ -0,0 +1,5 @@
class HiveTypeIdConstants {
static const int topspeakersHiveId = 103;
static const int topSponsorsHiveId = 104;
static const int topTopicsHiveId = 105;
}

View File

@ -2,22 +2,27 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/configprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/new_dynamicform.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/medical_insight.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_editinteraction.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_viewinteraction.dart';
import 'package:konectar_events/model/events_speakers_k1.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventsmodel.dart';
import 'package:konectar_events/model/eventspeakers.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/utils/dateformater.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/view/hcplist.dart';
import 'package:konectar_events/view/home.dart';
import 'package:konectar_events/view/insights.dart';
import 'package:konectar_events/view/login_components/intropaging.dart';
import 'package:konectar_events/view/profileview.dart';
import 'package:konectar_events/view/socialmedia.dart';
import 'package:konectar_events/viewmodel/eventsprovider.dart';
import 'package:konectar_events/viewmodel/hcpprofprovider.dart';
import 'package:konectar_events/widgets/customappbar.dart';
import 'package:konectar_events/widgets/gridview.dart';
import 'package:konectar_events/widgets/snackbar.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
@ -39,14 +44,82 @@ class _EventsListingScreenState extends State<EventsListingScreen>
bool isExtended = false;
bool isExtendedInterested = false;
final ScrollController _scrollController = ScrollController();
final PagingController<int, EventSpeakersData> pagingController =
PagingController(firstPageKey: 0);
static const _pageSize = 20;
int lastIndex = 0;
String searchSpeaker = "";
@override
void initState() {
super.initState();
_tabController = TabController(length: 2, vsync: this);
final provider = Provider.of<EventsProvider>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
init();
});
pagingController.addPageRequestListener((pageKey) {
_fetchPages(pageKey, provider);
});
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
}
Future<void> _fetchPage(int pageKey) async {
//await initConnectivity();
// if (connectionStatus.toString().contains("ConnectivityResult.none")) {
// try {
// final newItems =
// await Provider.of<EventsProvider>(context, listen: false)
// .getOfflineMyEvents();
// final isLastPage = newItems.length < _pageSize;
// if (isLastPage) {
// _pagingController.appendLastPage(newItems);
// } else {
// final nextPageKey = pageKey + newItems.length;
// _pagingController.appendPage(newItems, nextPageKey);
// }
// } catch (error) {
// _pagingController.error = error;
// }
// } else {
print("FIRST PAGINATION");
try {
final newItems = await Provider.of<EventsProvider>(context, listen: false)
.getSpeakersDetails(pageKey, widget.event.id!,
widget.event.eventUniqueId!, searchSpeaker, lastIndex);
lastIndex = newItems.length - 1;
final isLastPage = newItems.isEmpty;
if (isLastPage) {
pagingController.appendLastPage(newItems);
} else {
final nextPageKey = pageKey + 1;
pagingController.appendPage(newItems, nextPageKey);
}
} catch (error) {
pagingController.error = error;
}
// }
}
Future<void> _fetchPages(int pageKey, EventsProvider provider) async {
List<EventSpeakersData> list = await provider
.getInitialSpeakersDetails("47336", searchkey: searchSpeaker);
print("CHECK LENGTH ${list.length}");
final isLastPage = pageKey + _pageSize >= list.length;
final nextItems =
list.skip(pageKey).take(_pageSize).toList(); // Get next batch of items
if (isLastPage) {
pagingController.appendLastPage(nextItems);
} else {
final nextPageKey = pageKey + nextItems.length;
pagingController.appendPage(nextItems, nextPageKey);
}
}
init() async {
@ -54,23 +127,34 @@ class _EventsListingScreenState extends State<EventsListingScreen>
CustomDateFormatter().convertStringToDate(widget.event.start!));
String end = CustomDateFormatter().formatYearDate(
CustomDateFormatter().convertStringToDate(widget.event.end!));
await Provider.of<EventsProvider>(context, listen: false)
.getEventsDetails(widget.event.eventId!);
await Provider.of<EventsProvider>(context, listen: false).getSessionCount();
await Provider.of<EventsProvider>(context, listen: false)
.getTopicsCloud(widget.event.eventId!);
await Provider.of<EventsProvider>(context, listen: false)
.getSpecialtyData(widget.event.eventId!);
await Provider.of<EventsProvider>(context, listen: false)
.getAffiliations(widget.event.eventId!);
// pagingController.addPageRequestListener((pageKey) {
// _fetchPage(pageKey);
// });
// await Provider.of<EventsProvider>(context, listen: false)
// .getOverviewData(widget.event.eventId!, start, end);
// .getEventsDetails(widget.event.eventId!);
// await Provider.of<EventsProvider>(context, listen: false).getSessionCount();
// await Provider.of<EventsProvider>(context, listen: false)
// .getTopicsCloud(widget.event);
print("FIRST INITIAL");
await Provider.of<EventsProvider>(context, listen: false)
.getInitialSpeakersDetails(widget.event.id!, searchkey: searchSpeaker);
Provider.of<EventsProvider>(context, listen: false).getSessionCount();
await Provider.of<EventsProvider>(context, listen: false)
.getOverviewData(widget.event.id!, start, end);
await Provider.of<EventsProvider>(context, listen: false)
.getSpecialtyData(widget.event);
await Provider.of<EventsProvider>(context, listen: false)
.getAffiliations(widget.event);
setState(() {});
}
@override
void dispose() {
_tabController.dispose();
pagingController.dispose();
super.dispose();
}
@ -78,7 +162,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
return Consumer<EventsProvider>(
builder: (BuildContext context, provider, Widget? child) {
return DefaultTabController(
length: 4,
length: 3,
//child: SafeArea(
// appBar: CustomAppBar(title: "", backgroundcolor: Constants.bgcolor),
//body:
@ -159,6 +243,159 @@ class _EventsListingScreenState extends State<EventsListingScreen>
);
}
Widget medicalInsights() {
return Consumer<ViewInteractionProvider>(
builder: (BuildContext context, provider, Widget? child) {
return Container(
color: EventsConstants.bgcolor,
child: Column(
children: [
SizedBox(
height: 20,
),
Center(
child: FloatingActionButton.extended(
backgroundColor: Colors.green,
onPressed: () async {
final ConfigDataProvider configDataProvider =
ConfigDataProvider();
await configDataProvider.initConfigUIDataMediccalInsight();
await Provider.of<InteractionProvider>(context, listen: false)
.initConfigData();
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => InteractionScreen1(
index: 0,
form: Provider.of<InteractionProvider>(context,
listen: false)
.intConfigDataList[0]
.name,
title: "Hope Nueman",
)));
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const InteractionListScreen()));
},
heroTag: 'medicalinsights',
elevation: 0,
label: const Text("Add Medical Insights",
style: TextStyle(
color: Colors.white,
)),
icon: const Icon(
Icons.add,
color: Colors.white,
),
),
),
SizedBox(
height: 20,
),
provider.savedList.isEmpty
? SizedBox.shrink()
: ListView.builder(
itemCount: provider.savedList.length,
shrinkWrap: true,
cacheExtent:
double.parse(provider.savedList.length.toString()),
itemBuilder: (context, index) {
return Column(
children: [
ListTile(
subtitle: Text(
'Updated on ${CustomDateFormatter().convertDateTimeToDate(provider.savedList[index].updatedTime!)}',
//style: TextStyle(fontStyle: FontStyle.italic),
),
title: Text(
provider.savedList[index].id,
),
trailing: SizedBox(
width: 100,
child: Row(children: [
IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
icon: const Icon(
Icons.info_outline,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
IconButton(
onPressed: () async {
await provider.initConfigData().then({
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (BuildContext context) =>
// EditInteractionScreen(
// saveInteraction: provider
// .savedList[index],
// )))
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
EditInteractionScreen1(
saveInteraction: provider
.savedList[index],
)))
});
},
icon: const Icon(
Icons.edit,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
// IconButton(
// onPressed: () {
// showDeleteRecordAlertDialog(
// context,
// provider.savedList[index].id,
// provider.savedList[index]);
// },
// icon: const Icon(
// Icons.delete,
// size: 24,
// color: Color.fromARGB(255, 8, 39, 92),
// ),
// ),
]),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
),
const Divider(),
],
);
}),
],
),
);
});
}
Widget headerview(BuildContext context, EventsProvider provider) {
//return SafeArea(
return Container(
@ -214,7 +451,18 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
),
),
// const Spacer(),
const Spacer(),
IconButton(
icon: Icon(
provider.ifOfflineExists(widget.event.eventId!)
? Icons.bookmark
: Icons.bookmark_add_outlined,
color: Colors.white,
size: isTablet ? 14 : 18),
onPressed: () async {
setState(() {});
},
)
// widget.event.isfav
// ? RichText(
// text: TextSpan(
@ -271,6 +519,17 @@ class _EventsListingScreenState extends State<EventsListingScreen>
tooltip: 'Actions',
// heroTag: "floatbtn232342",
onPressed: () {
if (provider.offlineEvents.isNotEmpty) {
provider.offlineEvents.forEach(
(element) {
if (element.eventId == widget.event.eventId) {
provider.offlineExists = true;
} else {
provider.offlineExists = false;
}
},
);
}
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
@ -292,6 +551,25 @@ class _EventsListingScreenState extends State<EventsListingScreen>
// 'Actions',
// style: TextStyle(fontSize: 18),
// )),
// ),IntroductionAnimationScreen
// InkWell(
// onTap: () {
// Navigator.push<dynamic>(
// context,
// MaterialPageRoute<dynamic>(
// builder: (BuildContext context) =>
// IntroductionAnimationScreen(),
// ),
// );
// // Navigator.pop(context);
// },
// child: ListTile(
// title: Text("GOTO"),
// leading: Icon(
// Icons.calendar_month,
// color: Colors.green,
// ),
// ),
// ),
InkWell(
onTap: () {
@ -309,11 +587,30 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
),
InkWell(
onTap: () {
onTap: () async {
if (provider.offlineEvents.isEmpty) {
await provider.saveEventsData(widget.event);
SnackBarWidget.displaySnackBar(
"Event Saved Offline", context);
} else {
if (!provider.offlineExists) {
await provider.saveEventsData(widget.event);
SnackBarWidget.displaySnackBar(
"Event Saved Offline", context);
} else {
await provider.delateOfflineEvent(widget.event);
provider.offlineExists = false;
SnackBarWidget.displaySnackBar(
"Removed from Offline", context);
}
}
Navigator.pop(context);
},
child: ListTile(
title: Text("Download Pdf"),
title: Text(provider.offlineExists
? "Remove the event from offline"
: "Save the event offline"),
leading: Icon(
Icons.download,
color: Colors.blue,
@ -322,8 +619,8 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
InkWell(
onTap: () {
if (widget.event.isAttending) {
widget.event.isAttending = false;
if (widget.event.eventUserAttendee!) {
widget.event.eventUserAttendee = false;
// if (event.isAttending) {
// SnackBarWidget.displaySnackBar(
@ -428,10 +725,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
ProfileInfoItem(
"Session(s)", provider.eventSessionCount),
ProfileInfoItem(
"Speakers(s)",
// int.parse(
// provider.overviewData!.attendeeCount
0),
"Speaker(s)", provider.speakersList.length),
//ProfileInfoItem("Note(s)", 1),
], widget.event, provider),
SizedBox(
@ -445,7 +739,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
pinned: true,
floating: true,
delegate: ContestTabHeader(
const TabBar(
TabBar(
indicatorSize: TabBarIndicatorSize.tab,
labelColor: Colors.black,
tabAlignment: TabAlignment.fill,
@ -455,6 +749,17 @@ class _EventsListingScreenState extends State<EventsListingScreen>
fontWeight: FontWeight.bold,
),
labelPadding: EdgeInsets.all(2),
onTap: (index) {
// print(controller.index);
// print(index);
if (index == 1) {
print('Same Tab Clicked');
// await provider
// .getInitialSpeakersDetails(widget.event.id!);
pagingController.refresh();
}
},
tabs: _tabs,
),
),
@ -464,15 +769,16 @@ class _EventsListingScreenState extends State<EventsListingScreen>
body: TabBarView(
//controller: _tabController,
children: [
expandableDetails(),
speakersList(provider),
expandableDetails(provider),
speakersList(context, provider),
EventsInsights(
eventid: widget.event.eventId!,
kFlutterHashtags: provider.kFlutterHashtags,
specialtyList: provider.specialtyList,
affiliations: provider.affiliations,
),
SocialMedia(),
// medicalInsights(),
//SocialMedia(),
],
),
),
@ -861,7 +1167,8 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
InkWell(
onTap: () async {
await _launchUrl(provider.eventdetailList[0].url1!);
print("URL:${event.url1!}");
await _launchUrl(event.url1!);
},
child: RichText(
text: TextSpan(
@ -967,7 +1274,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
}
Widget favbtn(EventsList event, EventsProvider provider) {
return event.isfav
return event.eventUserInterest!
? SizedBox(
height: 40,
child: TextButton(
@ -977,18 +1284,19 @@ class _EventsListingScreenState extends State<EventsListingScreen>
onPressed: () async {
// String msg = await provider
// .addEventsToFavs(event.eventId!);
setState(() {
event.isfav = !event.isfav;
if (event.isfav) {
provider.favsEventsData(event);
event.eventUserInterest = !event.eventUserInterest!;
if (event.eventUserInterest!) {
await provider.addEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar(
"You are following the event!", context);
} else {
provider.delateEventsData(event);
// provider.delateOfflineEvent(event);
await provider.removeEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar("Not Following", context);
}
});
setState(() {});
},
child: AnimatedSwitcher(
duration: Duration(seconds: 1),
@ -1025,18 +1333,19 @@ class _EventsListingScreenState extends State<EventsListingScreen>
// String msg = await provider
// .addEventsToFavs(event.eventId!);
setState(() {
event.isfav = !event.isfav;
event.eventUserInterest = !event.eventUserInterest!;
if (event.isfav) {
provider.favsEventsData(event);
if (event.eventUserInterest!) {
await provider.addEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar(
"You are following the event!", context);
} else {
provider.delateEventsData(event);
// provider.delateOfflineEvent(event);
await provider.removeEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar("Not Following", context);
}
});
setState(() {});
},
label: AnimatedSwitcher(
duration: Duration(seconds: 1),
@ -1058,14 +1367,16 @@ class _EventsListingScreenState extends State<EventsListingScreen>
// ),
Icon(
Icons.favorite,
color: event.isfav ? Colors.red : Colors.grey,
color: event.eventUserInterest!
? Colors.white
: Colors.grey,
size: 14,
),
const SizedBox(
width: 10,
),
Text(
event.isfav ? "Following" : "Follow",
event.eventUserInterest! ? "Following" : "Follow",
style: TextStyle(color: Colors.black),
)
],
@ -1074,7 +1385,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
}
Widget attendingbtn(EventsList event, EventsProvider provider) {
return event.isAttending
return event.eventUserAttendee!
? SizedBox(
height: 40,
child: TextButton(
@ -1082,22 +1393,18 @@ class _EventsListingScreenState extends State<EventsListingScreen>
// : Colors.transparent,
onPressed: () async {
if (!event.isfav) {
event.isfav = !event.isfav;
// String msg1 = await provider
// .addEventsToFavs(event.eventId!);
}
event.eventUserAttendee = !event.eventUserAttendee!;
// String msg = await provider
// .markAttending(event.eventId!);
setState(() {
event.isAttending = !event.isAttending;
if (event.isAttending) {
if (event.eventUserAttendee!) {
await provider.attendNotAttendEvent(event.eventId!, "1");
SnackBarWidget.displaySnackBar("Attending", context);
} else {
await provider.attendNotAttendEvent(event.eventId!, "0");
SnackBarWidget.displaySnackBar("Not Attending", context);
}
setState(() {
//
});
},
child: AnimatedSwitcher(
@ -1131,23 +1438,26 @@ class _EventsListingScreenState extends State<EventsListingScreen>
elevation: 1,
backgroundColor: EventsConstants.bgcolor,
onPressed: () async {
if (!event.isfav) {
event.isfav = !event.isfav;
if (!event.eventUserInterest!) {
await provider.addEventsToFavs(event.eventId!);
event.eventUserInterest = !event.eventUserInterest!;
// String msg1 = await provider
// .addEventsToFavs(event.eventId!);
}
// String msg = await provider
// .markAttending(event.eventId!);
setState(() {
event.isAttending = !event.isAttending;
if (event.isAttending) {
event.eventUserAttendee = !event.eventUserAttendee!;
// String msg = await provider
// .markAttending(event.eventId!);
if (event.eventUserAttendee!) {
await provider.attendNotAttendEvent(event.eventId!, "1");
SnackBarWidget.displaySnackBar("Attending", context);
} else {
await provider.attendNotAttendEvent(event.eventId!, "0");
SnackBarWidget.displaySnackBar("Not Attending", context);
}
});
setState(() {});
},
//heroTag: "attending545",
label: AnimatedSwitcher(
@ -1162,7 +1472,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
axis: Axis.horizontal,
),
),
child: event.isAttending
child: event.eventUserAttendee!
? Row(
children: [
Padding(
@ -1197,7 +1507,22 @@ class _EventsListingScreenState extends State<EventsListingScreen>
);
}
Widget expandableDetails() {
Widget expandableDetails(EventsProvider provider) {
List<String> topSpeakers = [];
List<String> topSponsors = [];
List<String> topTopics = [];
if (provider.overviewData!.topSpeakers!.length != 0) {
for (var obj in provider.overviewData!.topSpeakers!) {
topSpeakers.add(obj.firstName!);
}
}
if (provider.overviewData!.eventSponsers!.length != 0) {
for (var obj in provider.overviewData!.eventSponsers!) {
topSponsors.add(obj.sessionSponsor!);
}
}
return
// isTablet
// ? Container(
@ -1220,22 +1545,23 @@ class _EventsListingScreenState extends State<EventsListingScreen>
color: EventsConstants.bgcolor,
padding: EdgeInsets.only(left: 8, right: 8),
child: SingleChildScrollView(
child: Expanded(
child: Column(children: [
SizedBox(
height: 5,
),
listViewTopicCard("Top 3 topics", widget.event.topTopics ?? "", true),
listViewTopicCard("Top 3 topics", topTopics, true),
SizedBox(
height: 3,
),
listViewTopicCard(
"Speakers with most sessions", widget.event.topSpeakers!, true),
listViewTopicCard("Speakers with most sessions", topSpeakers, true),
SizedBox(
height: 3,
),
listViewTopicCard("Sponsors", widget.event.sponsors!, true)
listViewTopicCard("Sponsors", topSponsors, true)
]),
),
),
);
}
@ -1270,7 +1596,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
);
}
Widget listViewTopicCard(String title, String content, bool visible) {
Widget listViewTopicCard(String title, List<String> content, bool visible) {
return Visibility(
visible: visible,
child: Card(
@ -1299,13 +1625,24 @@ class _EventsListingScreenState extends State<EventsListingScreen>
SizedBox(
height: 5,
),
Text(
content,
content.isNotEmpty
? SizedBox(
height: 70,
child: ListView.builder(
shrinkWrap: true,
itemCount: content.length,
itemBuilder: (context, index) {
return Text(
"${index + 1}. ${content[index]}",
style: TextStyle(
fontSize: isTablet ? 22 : 14,
color: Colors.grey[900],
),
);
},
),
)
: SizedBox.shrink(),
],
),
),
@ -1314,8 +1651,14 @@ class _EventsListingScreenState extends State<EventsListingScreen>
);
}
Widget speakersList(EventsProvider provider) {
void _updateSearchTerm(String searchTerm) {
setState(() => searchSpeaker = searchTerm);
pagingController.refresh();
}
Widget speakersList(BuildContext context, EventsProvider provider) {
var searchtextEditingController;
// pagingController.refresh();
return Container(
width: double.maxFinite,
padding: EdgeInsets.only(left: 8),
@ -1332,15 +1675,15 @@ class _EventsListingScreenState extends State<EventsListingScreen>
// decoration: BoxDecoration(
// // color: Colors.white,
// borderRadius: BorderRadius.circular(5.0)),
child: TextField(
controller: searchtextEditingController,
onChanged: (String txt) async {
if (txt.length >= 2) {
provider.OnSearchSpeakers(txt);
if (txt.length >= 1) {
_updateSearchTerm(txt);
}
if (txt.length < 2) {
await provider
.onSearchSpeakersReset(widget.event.eventId!);
if (txt.length == 0) {
_updateSearchTerm("");
}
},
decoration: InputDecoration(
@ -1374,26 +1717,38 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
),
Expanded(
child: ListView.separated(
padding: const EdgeInsets.all(8),
itemCount: provider.isSearchSpeakers
? provider.srcheventdetailList.length
: provider.eventdetailList.length,
itemBuilder: (BuildContext context, int index) {
Eventsdetail detail = provider.isSearchSpeakers
? provider.srcheventdetailList[index]
: provider.eventdetailList[index];
child: PagedListView<int, EventSpeakersData>.separated(
pagingController: pagingController,
builderDelegate: PagedChildBuilderDelegate<EventSpeakersData>(
//padding: const EdgeInsets.all(8),
// itemCount: provider.isSearchSpeakers
// ? provider.srcheventdetailList.length
// : provider.eventdetailList.length,
itemBuilder: (BuildContext context, detail, int index) {
// Eventsdetail detail = provider.isSearchSpeakers
// ? provider.srcheventdetailList[index]
// : provider.eventdetailList[index];
return GestureDetector(
onTap: () {
if (widget.event.eventUserInterest!) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => HCPProfileScreen(
eventsdetail: detail,
eventid: widget.event.eventId!,
eventid: "47336",
title: widget.event.name1!,
sessionNames: detail.sessionName != ""
? detail.sessionName!.split(",")
: [],
topics: detail.eventTopics != ""
? detail.eventTopics!.split("|")
: [],
kolFullName: detail.kolFullName!,
),
),
);
}
},
child: Container(
// height: double.infinity,
@ -1434,11 +1789,13 @@ class _EventsListingScreenState extends State<EventsListingScreen>
SizedBox(
width: 20,
),
Column(
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
detail.kolFullName!,
"$index : ${detail.kolFullName!}",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14,
@ -1449,11 +1806,12 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
SizedBox(
width: isTablet
? MediaQuery.of(context).size.width * 0.25
: MediaQuery.of(context).size.width * 0.5,
? MediaQuery.of(context).size.width *
0.25
: MediaQuery.of(context).size.width *
0.5,
child: Text(
detail.eventTopics ??
'Programmed Cell Death 1 Receptor | Human Epidermal Growth Factor Receptor 2 +6more',
detail.eventTopics ?? "",
maxLines: 3,
style: TextStyle(
// decoration: TextDecoration.underline,
@ -1467,6 +1825,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
),
],
),
),
// const Spacer(),
// SizedBox(
// height: 30,
@ -1521,8 +1880,12 @@ class _EventsListingScreenState extends State<EventsListingScreen>
)),
);
},
),
separatorBuilder: (BuildContext context, int index) {
return Divider();
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 14.0),
child: Divider(),
);
},
),
),
@ -1562,7 +1925,7 @@ class _EventsListingScreenState extends State<EventsListingScreen>
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
item.value.toString(),
item.value.toString() == 0 ? "..." : item.value.toString(),
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14,
@ -1642,7 +2005,7 @@ const _tabs = [
Tab(text: "Details"),
Tab(text: "Speakers"),
Tab(text: "Insights"),
Tab(text: "Social Media"),
// Tab(text: "Medical Insights"),
];
class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
@ -1666,3 +2029,27 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
return true;
}
}
class ContestTabHeader extends SliverPersistentHeaderDelegate {
ContestTabHeader(
this.searchUI,
);
final TabBar searchUI;
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return Container(color: Colors.white, child: searchUI);
}
@override
double get maxExtent => 52.0;
@override
double get minExtent => 52.0;
@override
bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) {
return true;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +1,12 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:konectar_events/model/eventsmodel.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/view/eventdetailstab.dart';
import 'package:konectar_events/view/eventsdetails.dart';
import 'package:konectar_events/view/eventslist.dart';
import 'package:konectar_events/view/insights.dart';
import 'package:konectar_events/view/socialmedia.dart';
import 'package:konectar_events/widgets/autocompletetags_widget.dart';
import 'package:konectar_events/widgets/customactionsheet.dart';
import 'package:konectar_events/widgets/gridview.dart';
import 'package:konectar_events/widgets/word_cloud.dart';
import 'package:word_cloud/word_cloud_data.dart';
import 'package:word_cloud/word_cloud_shape.dart';
import 'package:word_cloud/word_cloud_tap.dart';
import 'package:word_cloud/word_cloud_tap_view.dart';
import 'package:word_cloud/word_cloud_view.dart';
import 'package:flutter/material.dart';
import 'package:add_2_calendar/add_2_calendar.dart';
class EventsTab extends StatefulWidget {

View File

@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/widgets/customappbar.dart';
import 'package:konectar_events/widgets/customeventsappbar.dart';
class HcpListScreen extends StatefulWidget {
const HcpListScreen({super.key});

226
lib/view/helpdesk.dart Normal file
View File

@ -0,0 +1,226 @@
import 'dart:convert';
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/custombutton.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/widgets/customappbar.dart';
import 'package:konectar_events/widgets/customtextfield.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:path/path.dart' as p;
class HelpDeskScreen extends StatefulWidget {
const HelpDeskScreen({super.key});
@override
State<HelpDeskScreen> createState() => _HelpDeskScreenState();
}
class _HelpDeskScreenState extends State<HelpDeskScreen> {
TextEditingController subjectTextController = TextEditingController(text: "");
TextEditingController TextController = TextEditingController(text: "");
String? _selectedValue;
final List<String> type = [
"Question",
"Software Issue",
"Content Issue",
"Training Request",
"Callback Request",
"Feature Request",
];
Widget dropDown({
Widget? underline,
Widget? icon,
TextStyle? style,
TextStyle? hintStyle,
Color? dropdownColor,
}) =>
DropdownButton<String>(
value: _selectedValue,
underline: underline,
icon: Align(alignment: Alignment.centerRight, child: icon),
dropdownColor: dropdownColor,
isExpanded: true,
style: TextStyle(
//fontFamily: "SourceSerif",
color: Colors.black,
fontSize: 14.0,
),
// iconEnabledColor: iconEnabledColor,
onChanged: (String? newValue) {
setState(() {
_selectedValue = newValue;
});
},
hint: Text("Select Type", style: hintStyle),
items: type
.map((session) => DropdownMenuItem<String>(
value: session, child: Text(session)))
.toList());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Help Desk",
style: TextStyle(color: Colors.white),
),
automaticallyImplyLeading: false,
backgroundColor: EventsConstants.blueColor,
centerTitle: true,
),
body: Container(
height: MediaQuery.of(context).size.height / 2,
padding: EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 30,
),
CustomTextField(
labelText: "Subject*", controller: subjectTextController),
SizedBox(
height: 30,
),
Container(
padding: const EdgeInsets.all(8.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(8.0)),
child: dropDown(underline: Container())),
SizedBox(
height: 30,
),
TextFormField(
validator: (value) {
// add email validation
if (value == null || value.isEmpty) {
return 'Please enter some text';
}
// bool emailValid = RegExp(
// r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
// .hasMatch(value);
// if (!emailValid) {
// return 'Please enter a valid email';
// }
return null;
},
maxLines: 3,
decoration: const InputDecoration(
labelText: 'Description',
hintText: 'Description',
border: OutlineInputBorder(),
),
),
SizedBox(
height: 10,
),
Row(
children: [
Text("Attach a file :"),
SizedBox(
width: 10,
),
CustomButton(
backgroundColor: const Color.fromARGB(255, 233, 229, 229),
onPressed: () async {
// sectionItem.selectedValue = [];
// sectionItem.extension = [];
// sectionItem.fileName = [];
await getEncodedFile();
setState(() {});
},
width: 120,
height: 40,
fontsize: 12,
textColor: Colors.black,
title: "Choose file"),
],
),
SizedBox(
height: 30,
),
Center(
child: CustomButton(
backgroundColor: EventsConstants.blueColor,
onPressed: () => (),
title: "Submit",
textColor: Colors.white,
),
)
],
),
),
);
}
Future<void> getEncodedFile() async {
String base64Image = '';
var status = Platform.isAndroid
? await Permission.manageExternalStorage.status
: await Permission.storage.status;
if (status.isGranted) {
FilePickerResult? result =
await FilePicker.platform.pickFiles(allowMultiple: true);
if (result != null) {
print(result.files.first.path);
print(result.files.last.path);
for (var files in result.files) {
File file = File(files.path!);
print("check file path : ${file.path}");
var fileName = file.path.split('/').last;
// Get the application folder directory
Directory? directory = Platform.isAndroid
? await getExternalStorageDirectory() //FOR ANDROID
: await getApplicationDocumentsDirectory();
String newPath = ""; //FOR ios
String convertedDirectoryPath = (directory?.path).toString();
print("see the converted directory path $convertedDirectoryPath");
newPath = "$convertedDirectoryPath/konectar/files";
print("new path :$newPath");
directory = Directory(newPath);
if (!await directory.exists()) {
await directory.create(recursive: true);
}
File newFile = await file.copy('${directory.path}/$fileName');
print("new path is ${newFile.path}");
final extension = p.extension(newFile.path);
List<int> imageBytes = await newFile.readAsBytes();
Uint8List imageUint8List = Uint8List.fromList(imageBytes);
base64Image = base64Encode(imageUint8List);
// sectionItem.selectedValue!.add(base64Image);
// sectionItem.extension!.add(extension);
// sectionItem.fileName!.add(fileName);
}
}
} else {
print("not permitted");
await requestPermission(Platform.isAndroid
? Permission.manageExternalStorage
: Permission.storage);
}
}
Future<void> requestPermission(Permission permission) async {
final status = await permission.request();
setState(() {
print(status);
// _permissionStatus = status;
// print(_permissionStatus);
});
}
}

View File

@ -1,11 +1,21 @@
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:konectar_events/contacts_module/custom_widget/show_alert.dart';
import 'package:konectar_events/model/keywords_model.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/utils/apicall.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/utils/dateformater.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/view/eventslist.dart';
import 'package:konectar_events/view/eventstab.dart';
@ -43,16 +53,30 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
List<int> selectedIndex = [];
bool selectedFav = false;
bool isExtended = false;
String search = "";
final ScrollController _scrollController = ScrollController();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
AnimationController? animationController;
bool _isSearch = false;
List<String> therapeuticList = [];
static const _pageSize = 20;
String filter_startdate = "";
String filter_enddate = "";
final PagingController<int, EventsList> pagingController =
PagingController(firstPageKey: 0);
List<ConnectivityResult> connectionStatus = [ConnectivityResult.none];
final Connectivity _connectivity = Connectivity();
get developer => null;
late StreamSubscription<List<ConnectivityResult>> _connectivitySubscription;
@override
void dispose() {
animationController?.dispose();
pagingController.dispose();
super.dispose();
}
@ -61,18 +85,109 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
animationController = AnimationController(
duration: const Duration(milliseconds: 1000), vsync: this);
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
initConnectivity();
_connectivitySubscription =
_connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
init();
});
pagingController.addPageRequestListener((pageKey) {
_fetchPage(pageKey);
});
super.initState();
}
Future<void> initConnectivity() async {
late List<ConnectivityResult> result;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
result = await _connectivity.checkConnectivity();
} on PlatformException catch (e) {
developer.log('Couldn\'t check connectivity status', error: e);
return;
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) {
return Future.value(null);
}
return _updateConnectionStatus(result);
}
Future<void> _updateConnectionStatus(List<ConnectivityResult> result) async {
setState(() {
connectionStatus = result;
});
// ignore: avoid_print
print('Connectivity changed: $connectionStatus');
}
Future<void> _fetchPage(int pageKey) async {
print("DATE SELECTED :$filter_enddate,$filter_startdate");
await initConnectivity();
if (connectionStatus.toString().contains("ConnectivityResult.none")) {
try {
final newItems =
await Provider.of<EventsProvider>(context, listen: false)
.getOfflineMyEvents();
final isLastPage = newItems.length < _pageSize;
if (isLastPage) {
pagingController.appendLastPage(newItems);
} else {
final nextPageKey = pageKey + newItems.length;
pagingController.appendPage(newItems, nextPageKey);
}
} catch (error) {
pagingController.error = error;
}
} else {
try {
final newItems =
await Provider.of<EventsProvider>(context, listen: false).getEvents(
pageKey,
searchtxt: search,
startdate: filter_startdate,
enddate: filter_enddate);
// final newItems =
// await Provider.of<EventsProvider>(context, listen: false)
// .getOfflineMyEvents();
//OLD
final isLastPage = newItems.length < _pageSize;
if (isLastPage) {
pagingController.appendLastPage(newItems);
} else {
final nextPageKey = pageKey + newItems.length;
pagingController.appendPage(newItems, nextPageKey);
}
//NEW
// final isLastPage = pageKey + _pageSize >= newItems.length;
// final nextItems = newItems
// .skip(pageKey)
// .take(_pageSize)
// .toList(); // Get next batch of items
// if (isLastPage) {
// pagingController.appendLastPage(nextItems);
// } else {
// final nextPageKey = pageKey + nextItems.length;
// pagingController.appendPage(nextItems, nextPageKey);
// }
} catch (error) {
pagingController.error = error;
}
}
}
init() async {
await Provider.of<EventsProvider>(context, listen: false).initFiltersData();
await Provider.of<EventsProvider>(context, listen: false).getEvents();
// await Provider.of<EventsProvider>(context, listen: false).getMyEvents(0);
await Provider.of<EventsProvider>(context, listen: false)
.getAddedSessionNotes();
//await ApiCall().dummyapi();
setState(() {});
}
@ -228,12 +343,31 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
borderRadius: BorderRadius.circular(5.0)),
child: TextField(
controller: searchtextEditingController,
onEditingComplete: () {
String txt = searchtextEditingController.text;
if (txt.length >= 2) {
search = txt;
provider.isSearch = true;
pagingController.refresh();
// await provider.OnSearch(txt);
}
if (txt.length == 0) {
provider.isSearch = false;
pagingController.refresh();
}
},
onChanged: (String txt) async {
if (txt.length >= 2) {
provider.OnSearch(txt);
search = txt;
provider.isSearch = true;
pagingController.refresh();
// await provider.OnSearch(txt);
}
if (txt.length < 2) {
await provider.onSearchReset();
if (txt.length == 0) {
provider.isSearch = false;
search = txt;
pagingController.refresh();
}
},
decoration: InputDecoration(
@ -268,6 +402,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
_isSearch = !_isSearch;
if (!_isSearch) {
searchtextEditingController.clear();
search = "";
pagingController.refresh();
}
});
},
@ -277,8 +413,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
))
],
),
body: Stack(
children: <Widget>[
body: Stack(children: <Widget>[
InkWell(
splashColor: Colors.transparent,
focusColor: Colors.transparent,
@ -320,15 +455,17 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
];
},
body: Container(
color: EventsConstants.bgcolor,
child: buildListView(context, provider)),
//color: EventsConstants.bgcolor,
color: Colors.white,
child: buildPaginationListView(context, provider)),
),
),
],
]),
),
),
// ),
);
// ),
// );
}
Widget getFilterBarUI(EventsProvider provider) {
@ -352,7 +489,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
),
),
Container(
color: EventsConstants.bgcolor,
//color: EventsConstants.bgcolor,
color: Colors.white,
child: Padding(
padding:
const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 4),
@ -422,12 +560,24 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
child: CupertinoSwitch(
activeColor: Color.fromARGB(255, 0, 71, 132),
value: provider.isFavSeleted,
onChanged: (value) async {
onChanged: (value) {
provider.isFavSeleted = value;
if (provider.isFavSeleted) {
await provider.onSelectMy();
pagingController.refresh();
//_pagingController.
// _pagingController
// .addPageRequestListener((pageKey) {
// await _fetchPage(0);
// });
} else {
await provider.onSelectAll();
provider.isFavSeleted = false;
provider.isAllSelected = !provider.isAllSelected;
pagingController.refresh();
// _pagingController
// .addPageRequestListener((pageKey) {
// await _fetchPage(0);
// });
}
setState(() {});
},
@ -551,10 +701,15 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
child: TextField(
onChanged: (String txt) async {
if (txt.length >= 3) {
provider.OnSearch(txt);
search = txt;
provider.isSearch = true;
pagingController.refresh();
// await provider.OnSearch(txt);
}
if (txt.length <= 3) {
await provider.onSearchReset();
provider.isSearch = false;
pagingController.refresh();
//await provider.onSearchReset();
}
},
style: const TextStyle(
@ -591,10 +746,17 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
),
onTap: () async {
FocusScope.of(context).requestFocus(FocusNode());
if (searchtextEditingController.text.length >= 3)
provider.OnSearch(searchtextEditingController.text);
else
await provider.onSearchReset();
if (searchtextEditingController.text.length >= 3) {
search = searchtextEditingController.text;
provider.isSearch = true;
pagingController.refresh();
// await provider.OnSearch(searchtextEditingController.text);
} else {
//search = searchtextEditingController.text;
provider.isSearch = false;
pagingController.refresh();
}
// await provider.onSearchReset();
},
child: Padding(
padding: const EdgeInsets.all(16.0),
@ -769,7 +931,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
// DrawerHeader(
// child: Center(
@ -779,7 +941,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
// ),
// ),
Container(
//color: Colors.transparent,
color: EventsConstants.bgcolor,
padding: EdgeInsets.only(top: 20, left: 5.0),
),
@ -805,37 +967,29 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
style: TextStyle(fontSize: 20),
),
const Spacer(),
Align(
alignment: Alignment.topRight,
child: Container(
height: 30,
child: OutlinedButton(
onPressed: () {
print("&&&");
print(provider.selectedTherapeutic);
if (provider.selectedTherapeutic.isNotEmpty) {
provider.OnFilters();
}
// Align(
// alignment: Alignment.topRight,
// child: Container(
// height: 30,
// child: OutlinedButton(
// onPressed: () {
setState(() {
Navigator.pop(context);
});
},
child: Text(
'Apply',
style: TextStyle(
// fontFamily: "SourceSerif",
fontSize: 14,
color: Colors.white,
fontWeight: FontWeight.normal),
),
style: OutlinedButton.styleFrom(
shape: StadiumBorder(),
backgroundColor: Colors.green,
),
),
),
),
// },
// child: Text(
// 'Apply',
// style: TextStyle(
// // fontFamily: "SourceSerif",
// fontSize: 14,
// color: Colors.white,
// fontWeight: FontWeight.normal),
// ),
// style: OutlinedButton.styleFrom(
// shape: StadiumBorder(),
// backgroundColor: Colors.green,
// ),
// ),
// ),
// ),
SizedBox(
width: 8.0,
),
@ -994,22 +1148,6 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
],
),
// Center(
// child: SizedBox(
// width: 200,
// height: 40,
// child: ListTile(
// title: Container(
// color: Colors.blue,
// child: Center(
// child: Text(
// 'Apply',
// style: TextStyle(color: Colors.white),
// ))),
// onTap: () {},
// ),
// ),
// ),
Divider(
height: 1,
color: Colors.black,
@ -1044,72 +1182,68 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
),
],
),
// Row(
// children: [
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('City'),
// subtitle: customAutoCompletedropdown(
// ["Chicago", "Seattle", "San Deigo"]),
// onTap: () {},
// ),
// ),
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('State'),
// subtitle: customAutoCompletedropdown(
// ["California", "Illinois", "New York"]),
// onTap: () {},
// ),
// ),
// ],
// ),
// Row(
// children: [
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('Country'),
// subtitle: customAutoCompletedropdown([
// "Netherlands",
// "Switzerland",
// "United States"
// ]),
// onTap: () {},
// ),
// ),
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('Number of Attendees'),
// subtitle: buildTextFieldWidget(),
// onTap: () {},
// ),
// ),
// ],
// ),
// Row(
// children: [
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('Client Attendees'),
// subtitle: buildTextFieldWidget(),
// onTap: () {},
// ),
// ),
// SizedBox(
// width: (MediaQuery.of(context).size.width * 0.99) / 2,
// child: ListTile(
// title: Text('New Attendees'),
// subtitle: buildTextFieldWidget(),
// onTap: () {},
// ),
// ),
// ],
// ),
],
),
SizedBox(
height: 20,
),
Column(
children: [
Align(
alignment: Alignment.bottomCenter,
child: SizedBox(
width: 200,
height: 50,
child: FloatingActionButton.extended(
backgroundColor: Colors.green,
onPressed: () {
print("&&&");
print(provider.selectedTherapeutic);
if (provider.selectedTherapeutic.isNotEmpty) {
provider.OnFilters();
}
pagingController.refresh();
setState(() {
Navigator.pop(context);
});
},
elevation: 0,
label: const Text("Apply Filters",
style: TextStyle(
color: Colors.white,
)),
),
),
),
SizedBox(
height: 10,
),
Align(
alignment: Alignment.bottomCenter,
child: SizedBox(
width: 200,
height: 50,
child: FloatingActionButton.extended(
backgroundColor: Colors.blue,
onPressed: () {
startDatetextEditingController.clear();
endDatetextEditingController.clear();
filter_enddate = "";
filter_startdate = "";
setState(() {});
pagingController.refresh();
Navigator.pop(context);
},
elevation: 0,
label: const Text("Clear Filters",
style: TextStyle(
color: Colors.white,
)),
),
),
),
],
),
],
@ -1122,21 +1256,24 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
Widget buildDateWidget(TextEditingController controller, String hint) {
return SizedBox(
width: isTablet ? 200 : MediaQuery.of(context).size.width,
//width: isTablet ? 200 : MediaQuery.of(context).size.width,
height: isTablet ? 50 : 40,
child: TextField(
controller: controller,
//editing controller of this TextField
decoration: InputDecoration(
// border: OutlineInputBorder(),
border: OutlineInputBorder(),
// border: OutlineInputBorder(
// borderRadius: BorderRadius.circular(10.0),
// ),
// labelStyle: const TextStyle(fontSize: 16),
suffixIcon: const Icon(Icons.calendar_today), //icon of text field
suffixIcon: const Icon(
Icons.calendar_today,
size: 16,
), //icon of text field
// labelText: "Enter Date" //label text of field
hintText: hint,
// hintText: hint,
),
readOnly: true, //set it true, so that user will not able to edit text
@ -1145,8 +1282,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
context: context,
anchorPoint: Offset(20.0, 30.0),
initialDate: DateTime.now(),
firstDate: DateTime(
2000), //DateTime.now() - not to allow to choose before today.
firstDate: DateTime
.now(), //DateTime.now() - not to allow to choose before today.
lastDate: DateTime(2101));
if (pickedDate != null) {
@ -1156,9 +1293,14 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
print(
formattedDate); //formatted date output using intl package => 2021-03-16
//you can implement different kind of Date Format here according to your requirement
if (hint == "Start Date") {
filter_startdate = formattedDate;
} else {
filter_enddate = formattedDate;
}
setState(() {
// output date to TextField value.
controller.text = formattedDate;
});
} else {
@ -1316,6 +1458,38 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
);
}
Set<int> selectedIndexes = {};
Widget buildPaginationListView(
BuildContext context, EventsProvider provider) {
return RefreshIndicator(
onRefresh: () async => pagingController.refresh(),
child: PagedListView<int, EventsList>(
pagingController: pagingController,
padding: EdgeInsets.zero,
builderDelegate: PagedChildBuilderDelegate<EventsList>(
itemBuilder: (BuildContext context, item, int index) {
print(
"VALUE RENDER ${item.eventId} - ${item.name1}- ${item.eventUserInterest}");
final int count = provider.eventList.length > 10
? 10
: provider.eventList.length;
final Animation<double> animation =
Tween<double>(begin: 0.0, end: 1.0).animate(CurvedAnimation(
parent: animationController!,
curve: Interval((1 / count) * index, 1.0,
curve: Curves.fastOutSlowIn)));
animationController?.forward();
return _buildlistCard(
animation: animation,
animationController: animationController!,
provider: provider,
eventsList: provider.isSearch ? item : item,
);
},
)),
);
}
Widget _buildlistCard(
{required Animation<double>? animation,
required AnimationController? animationController,
@ -1344,7 +1518,9 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
},
child: Card(
elevation: 4,
//color: EventsConstants.homeCardBackgound,
surfaceTintColor: Colors.white,
//surfaceTintColor: EventsConstants.homeCardBackgound,
// shadowColor: Constants.bgcolor,
child: buildCardView(context, eventsList, provider),
),
@ -1408,7 +1584,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
// fullscreenDialog: true));
},
child: Card(
elevation: 2,
elevation: 1,
shadowColor: EventsConstants.bgcolor,
child: buildCardView(
context, provider.eventList[index], provider)));
@ -1423,6 +1599,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
buildCardView(
BuildContext context, EventsList event, EventsProvider provider) {
print(
"CHECK EVENT INTERESTED : ${provider.checkIfUserInterested(event.eventId!)}}");
double height = isTablet
? MediaQuery.of(context).size.height * 0.35
: MediaQuery.of(context).size.height * 0.65;
@ -1433,8 +1611,10 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
// color: Color.fromARGB(179, 248, 238, 238),
color: Colors.white,
// color: EventsConstants.homeCardBackgound,
borderRadius: BorderRadius.all(Radius.circular(20))),
// height: MediaQuery.of(context).size.height * 0.2,
// height: 136,
// height: double.minPositive,
padding: isTablet
? EdgeInsets.symmetric(horizontal: 8.0, vertical: 2.0)
@ -1458,22 +1638,36 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
children: [
Align(
alignment: FractionalOffset.topLeft,
child: Text(
event.name1 ?? "",
child: RichText(
text: TextSpan(children: [
// WidgetSpan(
// child: Icon(Icons.bookmark,
// color: EventsConstants.blueColor,
// size: isTablet ? 14 : 18)
// // provider.ifOfflineExists(event.eventId!)
// // ? Icon(Icons.bookmark,
// // color: EventsConstants.blueColor,
// // size: isTablet ? 14 : 18)
// // : SizedBox.shrink(),
// ),
TextSpan(
text: event.name1 ?? "",
style: TextStyle(
// decoration: TextDecoration.underline,
// decorationColor: Colors.blue,
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: isTablet ? 22 : 16,
// fontFamily: "SourceSerif",
),
maxLines: isTablet ? 4 : 4,
softWrap: true,
overflow: TextOverflow.ellipsis,
// maxLines: isTablet ? 4 : 4,
// softWrap: true,
// overflow: TextOverflow.ellipsis,
),
])),
),
//const Spacer(),
SizedBox(
height: 14,
),
@ -1482,7 +1676,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
Align(
alignment: FractionalOffset.bottomLeft,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
@ -1496,11 +1690,12 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
child: Icon(Icons.calendar_month, size: 16),
),
TextSpan(
text: ' ${event.start} to ${event.end}',
text:
' ${CustomDateFormatter().formatYearDate(CustomDateFormatter().convertStringToDate(event.start!))} to ${CustomDateFormatter().formatYearDate(CustomDateFormatter().convertStringToDate(event.end!))}',
style: TextStyle(
color: Colors.black,
//fontStyle: FontStyle.italic,
fontSize: isTablet ? 20 : 14),
fontSize: isTablet ? 20 : 12),
),
],
),
@ -1521,7 +1716,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
style: TextStyle(
color: Colors.black,
//fontStyle: FontStyle.italic,
fontSize: isTablet ? 20 : 14),
fontSize: isTablet ? 20 : 12),
),
],
),
@ -1531,10 +1727,20 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
Align(
alignment: FractionalOffset.bottomRight,
child: Column(
child: Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
provider.ifOfflineExists(event.eventId!)
? Padding(
padding: EdgeInsets.only(right: 10),
child: Icon(Icons.bookmark,
color: EventsConstants.blueColor,
size: isTablet ? 14 : 18),
)
: SizedBox.shrink(),
SizedBox(
width: 40,
height: 30,
@ -1542,26 +1748,29 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
elevation: 1,
shape: CircleBorder(),
backgroundColor: EventsConstants.bgcolor,
//backgroundColor: EventsConstants.homeCardBackgound,
onPressed: () async {
// String msg = await provider
// .addEventsToFavs(event.eventId!);
// event.isfav = !event.isfav;
setState(() {
event.isfav = !event.isfav;
if (event.isfav) {
if (event.eventUserInterest!) {
//If event is added to fav then unfollow
String msg = await provider
.removeEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar(
"Added to favorites!", context);
"Removed from My Events!", context);
} else {
String msg = await provider
.addEventsToFavs(event.eventId!);
SnackBarWidget.displaySnackBar(
"Removed from favorites!", context);
}
});
if (event.isfav) {
await provider.favsEventsData(event);
} else {
await provider.delateEventsData(event);
"Added to My Events", context);
}
pagingController.refresh();
setState(() {});
// if (event.isfav) {
// // await provider.favsEventsData(event);
// } else {
// // await provider.delateEventsData(event);
// }
},
label: AnimatedSwitcher(
duration: Duration(seconds: 1),
@ -1575,7 +1784,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
axis: Axis.horizontal,
),
),
child: event.isfav
child: event.eventUserInterest!
? Column(
children: [
Icon(
@ -1594,20 +1803,20 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
SizedBox(
height: 2,
),
event.isfav
event.eventUserInterest!
? RichText(
text: TextSpan(
children: [
WidgetSpan(
child: Icon(Icons.check,
color: Colors.grey[600],
size: isTablet ? 14 : 12),
size: isTablet ? 14 : 10),
),
TextSpan(
text: ' following',
text: ' Following',
style: TextStyle(
color: Colors.grey[600],
fontSize: isTablet ? 14 : 12),
fontSize: isTablet ? 14 : 10),
),
],
),
@ -1617,10 +1826,10 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
text: TextSpan(
children: [
TextSpan(
text: 'follow ',
text: 'Follow ',
style: TextStyle(
color: Colors.grey[600],
fontSize: isTablet ? 14 : 12),
fontSize: isTablet ? 14 : 10),
),
],
),
@ -1628,6 +1837,8 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
),
],
),
],
),
),
// Align(
// alignment: Alignment.bottomRight,

1890
lib/view/homeoffline.dart Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,34 +1,23 @@
import 'dart:math';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_scatter/flutter_scatter.dart';
import 'package:konectar_events/model/affiliationsmodel.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/model/specialtymodel.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/viewmodel/eventsprovider.dart';
import 'package:konectar_events/viewmodel/hcpprofprovider.dart';
import 'package:konectar_events/widgets/chartline.dart';
import 'package:konectar_events/widgets/customappbar.dart';
import 'package:konectar_events/widgets/customeventsappbar.dart';
import 'package:konectar_events/widgets/flutter_hashtags.dart';
import 'package:konectar_events/widgets/piechart.dart';
import 'package:konectar_events/widgets/word_cloud.dart';
import 'package:provider/provider.dart';
import 'package:word_cloud/word_cloud_data.dart';
import 'package:word_cloud/word_cloud_view.dart';
class EventsInsights extends StatefulWidget {
//EventsList eventsdetail;
String eventid;
List<FlutterHashtag> kFlutterHashtags = [];
List<Specialty> specialtyList = [];
Affiliations affiliations;
List<Affiliations> affiliations;
EventsInsights(
{super.key,
required this.eventid,
@ -67,10 +56,14 @@ class _EventsInsightsState extends State<EventsInsights> {
final screenSize = MediaQuery.of(context).size;
final ratio = screenSize.width / (screenSize.height / 2);
List<int> affCountList = [];
for (var obj in widget.affiliations.affiliationCount) {
affCountList.add(int.parse(obj));
int maximum = 0;
if (widget.affiliations.isNotEmpty) {
for (var obj in widget.affiliations) {
affCountList.add(int.parse(obj.orgCount!));
}
int maximum = affCountList.reduce(max);
maximum = affCountList.reduce(max);
}
return Consumer<HcpProfileProvider>(
builder: (BuildContext context, provider, Widget? child) {
List<Widget> widgets = <Widget>[];
@ -121,7 +114,8 @@ class _EventsInsightsState extends State<EventsInsights> {
// height: 20,
// ),
labelWidget("Topics Discussed"),
Card(
widgets.isNotEmpty
? Card(
surfaceTintColor: Colors.white,
child: Container(
padding: EdgeInsets.all(2.0),
@ -130,19 +124,21 @@ class _EventsInsightsState extends State<EventsInsights> {
width: screenSize.width,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(20))),
borderRadius:
BorderRadius.all(Radius.circular(20))),
child: Center(
child: FittedBox(
child: Scatter(
fillGaps: true,
delegate:
ArchimedeanSpiralScatterDelegate(ratio: ratio),
delegate: ArchimedeanSpiralScatterDelegate(
ratio: ratio),
children: widgets,
),
),
),
),
),
)
: SizedBox.shrink(),
SizedBox(
height: 20,
),
@ -177,7 +173,8 @@ class _EventsInsightsState extends State<EventsInsights> {
height: 20,
),
labelWidget("Speaker counts by providers"),
Card(
widget.affiliations.isNotEmpty
? Card(
surfaceTintColor: Colors.white,
child: Container(
padding: EdgeInsets.all(12.0),
@ -185,29 +182,29 @@ class _EventsInsightsState extends State<EventsInsights> {
// height: screenSize.height / 3,
width: screenSize.width,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderRadius:
BorderRadius.all(Radius.circular(20)),
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: List.generate(
widget.affiliations.affiliationCount.length,
(index) {
widget.affiliations.length, (index) {
return ChartLine(
title:
widget.affiliations.affiliationNames[index],
title: widget.affiliations[index].orgName!,
number: int.parse(
widget.affiliations.affiliationCount[index]),
rate: int.parse(widget.affiliations
.affiliationCount[index]) ==
widget.affiliations[index].orgCount!),
rate: int.parse(widget.affiliations[index]
.orgCount!) ==
maximum
? 1
: int.parse(widget.affiliations
.affiliationCount[index]) /
: int.parse(widget.affiliations[index]
.orgCount!) /
maximum);
}),
)),
),
)
: SizedBox.shrink(),
SizedBox(
height: 20,
),

View File

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_svg/svg.dart';
import 'package:konectar_events/firebaseexample.dart';
import 'package:konectar_events/model/userdata_model.dart';
import 'package:konectar_events/utils/apicall.dart';
@ -87,26 +88,35 @@ class _LoginScreenState extends State<LoginScreen> {
return OrientationBuilder(
builder: (BuildContext context, Orientation orientation) {
return Scaffold(
appBar: CustomAppBar(
backgroundcolor: EventsConstants.blueColor,
title: "Sign In",
),
// appBar: CustomAppBar(
// backgroundcolor: EventsConstants.blueColor,
// title: "Sign In",
// ),
// resizeToAvoidBottomInset: true,
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/background_login.jpg"),
fit: BoxFit.fitHeight,
),
body: Stack(children: [
SvgPicture.asset(
'assets/images/sc2bg500.svg',
fit: BoxFit.cover,
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
),
Container(
// decoration: BoxDecoration(
// image: DecorationImage(
// image: AssetImage("assets/images/background_login.jpg"),
// fit: BoxFit.fitHeight,
// ),
// ),
child: orientation == Orientation.portrait
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: _buildBody(orientation, provider),
)
: Row(
children: _buildBody(orientation, provider),
),
));
),
]));
});
});
}
@ -155,8 +165,16 @@ class _LoginScreenState extends State<LoginScreen> {
// ),
// ),
// ),
SizedBox(
height: 10,
),
SvgPicture.asset(
"assets/images/konectar_logo.svg",
fit: BoxFit.cover,
),
Expanded(
flex: 2,
child: Center(
child: Container(
// decoration: const BoxDecoration(
// gradient: LinearGradient(
@ -183,13 +201,42 @@ class _LoginScreenState extends State<LoginScreen> {
// )),
child: _buildform(provider),
),
)
),
),
Padding(
padding: const EdgeInsets.all(20.0),
child: Align(
alignment: Alignment.center,
child: Column(
children: [
Center(
child: Text(
"By continuing, you agree to the Aissel Conditions of Use Privacy Notice.",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14),
),
),
SizedBox(
height: 20,
),
Text(
"Contact Helpdesk : Support@aissel.com",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14),
),
],
),
),
),
];
}
Widget _buildform(LoginProvider provider) {
return SingleChildScrollView(
child: Column(mainAxisAlignment: MainAxisAlignment.start, children: [
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Text(
// 'Please fill the details',
// style: TextStyle(
@ -198,22 +245,23 @@ class _LoginScreenState extends State<LoginScreen> {
// color: Colors.blue[900]),
// ),
SizedBox(
height: 30,
child: Image.asset(
"assets/images/konector_image_logo.png",
fit: BoxFit.cover,
),
),
const SizedBox(
height: 40,
),
// const SizedBox(
// height: 40,
// ),
// CustomTextField(labelText: "Name", controller: nameTextController),
// const SizedBox(
// height: 20,
// ),
CustomTextField(labelText: "Email", controller: emailTextController),
Text(
"Sign-In to your account",
style: TextStyle(fontSize: 20),
),
const SizedBox(
height: 20,
),
CustomTextField(
labelText: "Email", controller: emailTextController),
// const SizedBox(),
// CustomTextField(
// labelText: "Application url", controller: domainTextConrtroller),
@ -234,8 +282,9 @@ class _LoginScreenState extends State<LoginScreen> {
SizedBox(
height: isTablet ? 40 : 20,
),
CustomButton(
backgroundColor: EventsConstants.blueColor,
Center(
child: CustomButton(
backgroundColor: EventsConstants.onboardButtonColor,
onPressed: () async {
setState(() {
print("loading");
@ -296,7 +345,8 @@ class _LoginScreenState extends State<LoginScreen> {
} else {
provider.code = secretKeyTextConrtroller.text;
Map<String, dynamic> resp = await provider.verifyCode(
emailTextController.text, secretKeyTextConrtroller.text);
emailTextController.text,
secretKeyTextConrtroller.text);
if (resp["code"] == "1200") {
provider.loading = false;
provider.showCodeField = false;
@ -341,7 +391,8 @@ class _LoginScreenState extends State<LoginScreen> {
},
textColor: Colors.white,
fontsize: isTablet ? 22 : 18,
title: provider.showCodeField ? "Verify" : "Submit"),
title: provider.showCodeField ? "Verify" : "Sign In"),
),
SizedBox(
height: 10,
),
@ -381,7 +432,7 @@ class _LoginScreenState extends State<LoginScreen> {
return isloggedout;
});
});
await SessionManager().setLoggedIn(isloggedin);
// await SessionManager().setLoggedIn(isloggedin);
// UserData userData =
// UserData(email: email, name: token, domainUrl: domain, secretkey: key);
// await provider.saveUserData(userData);

View File

@ -0,0 +1,139 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class CareView extends StatelessWidget {
final AnimationController animationController;
const CareView({Key? key, required this.animationController})
: super(key: key);
@override
Widget build(BuildContext context) {
final _firstHalfAnimation =
Tween<Offset>(begin: Offset(1, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
));
final _secondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-1, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastOutSlowIn,
),
));
final _relaxFirstHalfAnimation =
Tween<Offset>(begin: Offset(2, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
));
final _relaxSecondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-2, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastOutSlowIn,
),
));
final _imageFirstHalfAnimation =
Tween<Offset>(begin: Offset(4, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
));
final _imageSecondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-4, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastOutSlowIn,
),
));
return SlideTransition(
position: _firstHalfAnimation,
child: SlideTransition(
position: _secondHalfAnimation,
child: Stack(children: [
SvgPicture.asset(
'assets/images/sc2bg500.svg',
fit: BoxFit.fill,
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
),
Container(
padding: const EdgeInsets.only(bottom: 100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SlideTransition(
position: _relaxFirstHalfAnimation,
child: SlideTransition(
position: _relaxSecondHalfAnimation,
child: Center(
//child: Padding(
// padding: EdgeInsets.only(
// left: 34, right: 64, bottom: 16, top: 30),
child: Text(
"Discover, Profile & Engage Top HCPs! ",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 22.0,
fontWeight: FontWeight.bold,
),
//),
),
),
),
),
Padding(
padding:
EdgeInsets.only(left: 64, right: 64, bottom: 16, top: 30),
child: Text(
"Tier & segment top HCPs, access detailed profiles for effective engagement.",
textAlign: TextAlign.center,
),
),
SlideTransition(
position: _imageFirstHalfAnimation,
child: SlideTransition(
position: _imageSecondHalfAnimation,
child: Container(
constraints:
BoxConstraints(maxWidth: 350, maxHeight: 250),
child: Image.asset(
'assets/images/sc2img2x.png',
fit: BoxFit.cover,
),
),
),
),
],
),
),
]),
),
);
}
}

View File

@ -0,0 +1,205 @@
import 'package:animations/animations.dart';
import 'package:flutter/material.dart';
import 'package:konectar_events/utils/constants.dart';
class CenterNextButton extends StatelessWidget {
final AnimationController animationController;
final VoidCallback onNextClick;
const CenterNextButton(
{Key? key, required this.animationController, required this.onNextClick})
: super(key: key);
@override
Widget build(BuildContext context) {
final _topMoveAnimation =
Tween<Offset>(begin: Offset(0, 5), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.0,
0.2,
curve: Curves.fastOutSlowIn,
),
));
final _signUpMoveAnimation =
Tween<double>(begin: 0, end: 1.0).animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
final _loginTextMoveAnimation =
Tween<Offset>(begin: Offset(0, 5), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
return Padding(
padding:
EdgeInsets.only(bottom: 2 + MediaQuery.of(context).padding.bottom),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SlideTransition(
position: _topMoveAnimation,
child: AnimatedBuilder(
animation: animationController,
builder: (context, child) => AnimatedOpacity(
opacity: animationController.value >= 0.2 &&
animationController.value <= 0.6
? 1
: 0,
duration: Duration(milliseconds: 480),
child: _pageView(),
),
),
),
SlideTransition(
position: _topMoveAnimation,
child: AnimatedBuilder(
animation: animationController,
builder: (context, child) => Padding(
padding: EdgeInsets.only(
bottom: 38 - (38 * _signUpMoveAnimation.value)),
child: Container(
height: 58,
width: 58 + (200 * _signUpMoveAnimation.value),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
8 + 32 * (1 - _signUpMoveAnimation.value)),
//color: Color(0xff132137),
color: EventsConstants.onboardButtonColor,
),
child: PageTransitionSwitcher(
duration: Duration(milliseconds: 480),
reverse: _signUpMoveAnimation.value < 0.7,
transitionBuilder: (
Widget child,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return SharedAxisTransition(
fillColor: Colors.transparent,
child: child,
animation: animation,
secondaryAnimation: secondaryAnimation,
transitionType: SharedAxisTransitionType.vertical,
);
},
child: _signUpMoveAnimation.value > 0.5
? InkWell(
key: ValueKey('Sign Up button'),
onTap: onNextClick,
child: Padding(
padding: EdgeInsets.only(left: 16.0, right: 16.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'Sign Up',
style: TextStyle(
color: Colors.white,
fontSize: 18,
fontWeight: FontWeight.w500,
),
),
Icon(Icons.arrow_forward_rounded,
color: Colors.white),
],
),
),
)
: InkWell(
key: ValueKey('next button'),
onTap: onNextClick,
child: Padding(
padding: EdgeInsets.all(16.0),
child: Icon(Icons.arrow_forward_ios_rounded,
color: Colors.white),
),
),
),
),
),
),
),
Padding(
padding: const EdgeInsets.only(top: 8),
child: SlideTransition(
position: _loginTextMoveAnimation,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Already have an account? ',
style: TextStyle(
color: Colors.grey,
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
Text(
'Login',
style: TextStyle(
color: Color(0xff132137),
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
],
),
),
),
],
),
);
}
Widget _pageView() {
int _selectedIndex = 0;
// if (animationController.value >= 0.7) {
// _selectedIndex = 3;
// } else
if (animationController.value >= 0.5) {
_selectedIndex = 2;
} else if (animationController.value >= 0.3) {
_selectedIndex = 1;
} else if (animationController.value >= 0.1) {
_selectedIndex = 0;
}
return Padding(
padding: const EdgeInsets.only(bottom: 16),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
for (var i = 0; i < 3; i++)
Padding(
padding: const EdgeInsets.all(4),
child: AnimatedContainer(
duration: Duration(milliseconds: 480),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(32),
color: _selectedIndex == i
? Color(0xff132137)
: Color(0xffE3E4E4),
),
width: 10,
height: 10,
),
)
],
),
);
}
}

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,211 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/view/home.dart';
import 'package:konectar_events/view/login.dart';
import 'package:konectar_events/view/login_components/care_view.dart';
import 'package:konectar_events/view/login_components/center_next_button.dart';
import 'package:konectar_events/view/login_components/mood_diary_vew.dart';
import 'package:konectar_events/view/login_components/relax_view.dart';
import 'package:konectar_events/view/login_components/splash_view.dart';
import 'package:konectar_events/view/login_components/top_back_skip_view.dart';
import 'package:konectar_events/view/login_components/welcome_view.dart';
import 'package:konectar_events/view/navigation_home_screen.dart';
import 'package:konectar_events/widgets/home_drawer.dart';
class IntroductionAnimationScreen extends StatefulWidget {
const IntroductionAnimationScreen({Key? key}) : super(key: key);
@override
_IntroductionAnimationScreenState createState() =>
_IntroductionAnimationScreenState();
}
class _IntroductionAnimationScreenState
extends State<IntroductionAnimationScreen> with TickerProviderStateMixin {
AnimationController? _animationController;
@override
void initState() {
_animationController =
AnimationController(vsync: this, duration: Duration(seconds: 8));
_animationController?.animateTo(0.2);
super.initState();
}
@override
void dispose() {
_animationController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
print(_animationController?.value);
return SafeArea(
top: true,
child: Scaffold(
// appBar: AppBar(
// backgroundColor: EventsConstants.bgcolor,
// title: Container(
// // constraints: BoxConstraints(maxWidth: 350, maxHeight: 350),
// child: Image.asset(
// 'assets/images/onboardklogo.png',
// fit: BoxFit.contain,
// ),
// ),
// centerTitle: true,
// ),
backgroundColor: Colors.white,
body: ClipRect(
child: Stack(
children: [
SplashView(
animationController: _animationController!,
),
CareView(
animationController: _animationController!,
),
RelaxView(
animationController: _animationController!,
),
// CareView(
// animationController: _animationController!,
// ),
MoodDiaryVew(
animationController: _animationController!,
),
// WelcomeView(
// animationController: _animationController!,
// ),
TopBackSkipView(
onBackClick: _onBackClick,
onSkipClick: _onSkipClick,
animationController: _animationController!,
),
CenterNextButton(
animationController: _animationController!,
onNextClick: _onNextClick,
),
],
),
),
),
);
}
void _onSkipClick() {
_animationController?.animateTo(0.8,
duration: Duration(milliseconds: 1200));
}
void _onBackClick() {
// if (_animationController!.value >= 0 &&
// _animationController!.value <= 0.2) {
// _animationController?.animateTo(0.0);
// }
// else
if (_animationController!.value > 0.2 &&
_animationController!.value <= 0.4) {
_animationController?.animateTo(0.2);
} else if (_animationController!.value > 0.4 &&
_animationController!.value <= 0.6) {
_animationController?.animateTo(0.4);
}
//else
// if (_animationController!.value > 0.6 &&
// _animationController!.value <= 0.8) {
// _animationController?.animateTo(0.6);
// } else
// if (_animationController!.value > 0.8 &&
// _animationController!.value <= 1.0) {
// _animationController?.animateTo(0.8);
// }
}
void _onNextClick() {
if (_animationController!.value >= 0 &&
_animationController!.value <= 0.2) {
_animationController?.animateTo(0.4);
} else if (_animationController!.value > 0.2 &&
_animationController!.value <= 0.4) {
_animationController?.animateTo(0.6);
} else if (_animationController!.value > 0.4 &&
_animationController!.value <= 0.6) {
_signUpClick();
}
// else if (_animationController!.value > 0.4 &&
// _animationController!.value <= 0.8) {
// _signUpClick();
// }
}
void _signUpClick() {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => NavigationHomeScreen()),
);
}
}
// void _onSkipClick() {
// _animationController?.animateTo(0.8,
// duration: Duration(milliseconds: 1200));
// }
// void _onBackClick() {
// // if (_animationController!.value >= 0 &&
// // _animationController!.value <= 0.2) {
// // _animationController?.animateTo(0.0);
// // } else
// // if (_animationController!.value > 0.2 &&
// // _animationController!.value <= 0.4) {
// // _animationController?.animateTo(0.2);
// // } else
// if (_animationController!.value > 0.4 &&
// _animationController!.value <= 0.6) {
// _animationController?.animateTo(0.4);
// } else if (_animationController!.value > 0.6 &&
// _animationController!.value <= 0.8) {
// _animationController?.animateTo(0.6);
// } else if (_animationController!.value > 0.8 &&
// _animationController!.value <= 1.0) {
// _animationController?.animateTo(0.8);
// }
// }
// void _onNextClick() {
// // if (_animationController!.value <= 0.2) {
// // _animationController?.animateTo(0.0);
// // } else
// // if (_animationController!.value > 0.2 &&
// // _animationController!.value <= 0.4) {
// // _animationController?.animateTo(0.2);
// // } else
// if (_animationController!.value > 0.4 &&
// _animationController!.value <= 0.6) {
// _animationController?.animateTo(0.4);
// } else if (_animationController!.value > 0.6 &&
// _animationController!.value <= 0.8) {
// _animationController?.animateTo(0.6);
// } else if (_animationController!.value > 0.8 &&
// _animationController!.value <= 1.0) {
// _signUpClick();
// }
// if (_animationController!.value >= 0 &&
// _animationController!.value <= 0.2) {
// _animationController?.animateTo(0.4);
// } else if (_animationController!.value > 0.2 &&
// _animationController!.value <= 0.4) {
// _animationController?.animateTo(0.6);
// } else if (_animationController!.value > 0.4 &&
// _animationController!.value <= 0.6) {
// _animationController?.animateTo(0.8);
// } else if (_animationController!.value > 0.6 &&
// _animationController!.value <= 0.8) {
// _signUpClick();
// }
// }
// }

View File

@ -0,0 +1,147 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class MoodDiaryVew extends StatelessWidget {
final AnimationController animationController;
const MoodDiaryVew({Key? key, required this.animationController})
: super(key: key);
@override
Widget build(BuildContext context) {
final _firstHalfAnimation =
Tween<Offset>(begin: Offset(1, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastEaseInToSlowEaseOut,
),
));
final _secondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-1, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
final _moodFirstHalfAnimation =
Tween<Offset>(begin: Offset(2, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastOutSlowIn,
),
));
final _moodSecondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-2, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
final _imageFirstHalfAnimation =
Tween<Offset>(begin: Offset(4, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.4,
0.6,
curve: Curves.fastOutSlowIn,
),
));
final _imageSecondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-4, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
return SlideTransition(
position: _firstHalfAnimation,
child: SlideTransition(
position: _secondHalfAnimation,
child: Stack(children: [
Padding(
padding: const EdgeInsets.only(left: 4.0),
child: SvgPicture.asset(
'assets/images/sc1bg1500.svg',
fit: BoxFit.cover,
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
),
),
Container(
padding: const EdgeInsets.only(bottom: 100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// SlideTransition(
// position: _relaxAnimation,
// child: Container(
// constraints: BoxConstraints(maxWidth: 350, maxHeight: 350),
// child: Image.asset(
// 'assets/introduction_animation/introduction_image1.png',
// fit: BoxFit.contain,
// ),
// ),
// ),
Center(
child: SlideTransition(
position: _secondHalfAnimation,
child: Padding(
padding: EdgeInsets.only(
left: 20,
),
child: Text(
"Stay updated on medical events tailored to your areas of interest",
style: TextStyle(
fontSize: 18.0, fontWeight: FontWeight.bold),
),
),
),
),
SlideTransition(
position: _secondHalfAnimation,
child: Padding(
padding: EdgeInsets.only(
left: 64, right: 64, top: 30, bottom: 16),
child: Text(
"Get curated conference listings to optimize event participation, KOL strategies and outreach.",
textAlign: TextAlign.center,
),
),
),
SlideTransition(
position: _imageSecondHalfAnimation,
child: Container(
constraints: BoxConstraints(maxWidth: 350, maxHeight: 250),
child: Image.asset(
'assets/images/sc3img2x.png',
fit: BoxFit.cover,
),
),
),
],
),
),
]),
),
);
}
}

View File

@ -0,0 +1,134 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:flutter_svg_provider/flutter_svg_provider.dart';
class RelaxView extends StatelessWidget {
final AnimationController animationController;
const RelaxView({Key? key, required this.animationController})
: super(key: key);
@override
Widget build(BuildContext context) {
final _firstHalfAnimation =
Tween<Offset>(begin: Offset(0, 1), end: Offset(0, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.0,
0.2,
curve: Curves.fastOutSlowIn,
),
),
);
final _secondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-1, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
),
);
final _textAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-2, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
),
);
final _imageAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-4, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.2,
0.4,
curve: Curves.fastOutSlowIn,
),
),
);
final _relaxAnimation =
Tween<Offset>(begin: Offset(0, -2), end: Offset(0, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.0,
0.2,
curve: Curves.fastOutSlowIn,
),
),
);
return SlideTransition(
position: _firstHalfAnimation,
child: SlideTransition(
position: _secondHalfAnimation,
child: Stack(children: [
SvgPicture.asset(
'assets/images/sc1bg1500.svg',
fit: BoxFit.cover,
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
),
Container(
padding: const EdgeInsets.only(bottom: 100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// SlideTransition(
// position: _relaxAnimation,
// child: Container(
// constraints: BoxConstraints(maxWidth: 350, maxHeight: 350),
// child: Image.asset(
// 'assets/introduction_animation/introduction_image1.png',
// fit: BoxFit.contain,
// ),
// ),
// ),
Center(
child: SlideTransition(
position: _relaxAnimation,
child: Text(
"Welcome!",
style: TextStyle(
fontSize: 30.0, fontWeight: FontWeight.bold),
),
),
),
SlideTransition(
position: _textAnimation,
child: Padding(
padding: EdgeInsets.only(
left: 64, right: 64, top: 30, bottom: 16),
child: Text(
"An AI-powered platform that offers intelligent, data-driven insights into the HCP landscape.",
textAlign: TextAlign.center,
),
),
),
SlideTransition(
position: _imageAnimation,
child: Container(
constraints: BoxConstraints(maxWidth: 350, maxHeight: 250),
child: Image.asset(
'assets/images/sc1img2x.png',
fit: BoxFit.cover,
),
),
),
],
),
),
]),
),
);
}
}

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,103 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class SplashView extends StatefulWidget {
final AnimationController animationController;
const SplashView({Key? key, required this.animationController})
: super(key: key);
@override
_SplashViewState createState() => _SplashViewState();
}
class _SplashViewState extends State<SplashView> {
@override
Widget build(BuildContext context) {
final _introductionanimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(0.0, -1.0))
.animate(CurvedAnimation(
parent: widget.animationController,
curve: Interval(
0.0,
0.2,
curve: Curves.fastOutSlowIn,
),
));
return SlideTransition(
position: _introductionanimation,
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(bottom: 100.0),
child: Column(
children: [
// Padding(
// padding: EdgeInsets.all(8.0),
// child: SizedBox(
// //width: MediaQuery.of(context).size.width,
// child: SvgPicture.asset(
// 'assets/klogo.svg',
// fit: BoxFit.cover,
// ),
// ),
// ),
// SizedBox(
// height: 80,
// ),
// Padding(
// padding: EdgeInsets.only(top: 8.0, bottom: 8.0),
// child: Text(
// "Track Events Everywhere",
// style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
// ),
// ),
// Align(
// alignment: Alignment.bottomCenter,
// child: Padding(
// padding: EdgeInsets.only(left: 64, right: 64),
// child: Text(
// "Available on your phone,tablet and laptop",
// textAlign: TextAlign.center,
// ),
// ),
// ),
// SizedBox(
// height: 100,
// ),
// Padding(
// padding: EdgeInsets.only(
// bottom: MediaQuery.of(context).padding.bottom + 16),
// child: InkWell(
// onTap: () {
// widget.animationController.animateTo(0.2);
// },
// child: Container(
// height: 58,
// padding: EdgeInsets.only(
// left: 56.0,
// right: 56.0,
// top: 16,
// bottom: 16,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(38.0),
// color: Color(0xff132137),
// ),
// child: Text(
// "Let's begin",
// style: TextStyle(
// fontSize: 18,
// color: Colors.white,
// ),
// ),
// ),
// ),
// ),
],
),
),
),
);
}
}

View File

@ -0,0 +1,93 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class TopBackSkipView extends StatelessWidget {
final AnimationController animationController;
final VoidCallback onBackClick;
final VoidCallback onSkipClick;
const TopBackSkipView({
Key? key,
required this.onBackClick,
required this.onSkipClick,
required this.animationController,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final _animation =
Tween<Offset>(begin: Offset(0, -1), end: Offset(0.0, 0.0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.0,
0.2,
curve: Curves.fastOutSlowIn,
),
));
// final _backAnimation =
// Tween<Offset>(begin: Offset(0, 0), end: Offset(-2, 0))
// .animate(CurvedAnimation(
// parent: animationController,
// curve: Interval(
// 0.6,
// 0.8,
// curve: Curves.fastOutSlowIn,
// ),
// ));
final _skipAnimation = Tween<Offset>(begin: Offset(0, 0), end: Offset(2, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
return SlideTransition(
position: _animation,
child: Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
child: Container(
height: 80,
child: Padding(
padding: const EdgeInsets.only(left: 8, right: 16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// SlideTransition(
// position: _backAnimation,
// child:
IconButton(
onPressed: onBackClick,
icon: Icon(Icons.arrow_back_ios_new_rounded),
color: Colors.white,
// ),
),
Container(
padding: EdgeInsets.only(top: 20),
// constraints: BoxConstraints(maxWidth: 350, maxHeight: 350),
child: SvgPicture.asset('assets/images/konectar_logo.svg')
// Image.asset(
// 'assets/klogo.svg',
// fit: BoxFit.contain,
// ),
),
SlideTransition(
position: _skipAnimation,
child: IconButton(
onPressed: onSkipClick,
icon: Text('Skip'),
),
),
],
),
),
),
),
);
}
}

View File

@ -0,0 +1,107 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class WelcomeView extends StatelessWidget {
final AnimationController animationController;
const WelcomeView({Key? key, required this.animationController})
: super(key: key);
@override
Widget build(BuildContext context) {
final _firstHalfAnimation =
Tween<Offset>(begin: Offset(1, 0), end: Offset(0, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
),
);
final _secondHalfAnimation =
Tween<Offset>(begin: Offset(0, 0), end: Offset(-1, 0)).animate(
CurvedAnimation(
parent: animationController,
curve: Interval(
0.8,
1.0,
curve: Curves.fastOutSlowIn,
),
),
);
final _welcomeFirstHalfAnimation =
Tween<Offset>(begin: Offset(2, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
final _welcomeImageAnimation =
Tween<Offset>(begin: Offset(4, 0), end: Offset(0, 0))
.animate(CurvedAnimation(
parent: animationController,
curve: Interval(
0.6,
0.8,
curve: Curves.fastOutSlowIn,
),
));
return SlideTransition(
position: _firstHalfAnimation,
child: SlideTransition(
position: _secondHalfAnimation,
child: Stack(children: [
SvgPicture.asset(
'assets/images/sc2bg500.svg',
fit: BoxFit.cover,
// width: MediaQuery.of(context).size.width,
// height: MediaQuery.of(context).size.height,
),
Container(
padding: const EdgeInsets.only(bottom: 100),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// SlideTransition(
// position: _welcomeFirstHalfAnimation,
// child: Container(
// constraints: BoxConstraints(maxWidth: 350, maxHeight: 350),
// child: Image.asset(
// 'assets/introduction_animation/introduction_image1.png',
// fit: BoxFit.contain,
// ),
// ),
// ),
SizedBox(
height: 50,
),
SlideTransition(
position: _welcomeFirstHalfAnimation,
child: Text(
"Sign In",
style:
TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
),
),
Padding(
padding:
EdgeInsets.only(left: 64, right: 64, top: 16, bottom: 16),
child: Text(
"",
textAlign: TextAlign.center,
),
),
],
),
),
]),
),
);
}
}

View File

@ -1,9 +1,20 @@
import 'package:flutter/material.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/new_dynamicform.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_contacts.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_editinteraction.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_viewinteraction.dart';
import 'package:konectar_events/utils/app_theme.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/utils/dateformater.dart';
import 'package:konectar_events/view/helpdesk.dart';
import 'package:konectar_events/view/home.dart';
import 'package:konectar_events/widgets/drawerusercontroller.dart';
import 'package:konectar_events/widgets/home_drawer.dart';
import 'package:provider/provider.dart';
import '../contacts_module/ui_screen/interactionform/configprovider.dart';
class NavigationHomeScreen extends StatefulWidget {
@override
@ -45,6 +56,159 @@ class _NavigationHomeScreenState extends State<NavigationHomeScreen> {
);
}
Widget medicalInsights() {
return Consumer<ViewInteractionProvider>(
builder: (BuildContext context, provider, Widget? child) {
return Container(
color: EventsConstants.bgcolor,
child: Column(
children: [
SizedBox(
height: 20,
),
Center(
child: FloatingActionButton.extended(
backgroundColor: Colors.green,
onPressed: () async {
final ConfigDataProvider configDataProvider =
ConfigDataProvider();
await configDataProvider.initConfigUIDataMediccalInsight();
await Provider.of<InteractionProvider>(context, listen: false)
.initConfigData();
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => InteractionScreen1(
index: 0,
form: Provider.of<InteractionProvider>(context,
listen: false)
.intConfigDataList[0]
.name,
title: "Hope Neuman",
)));
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const InteractionListScreen()));
},
heroTag: 'medicalinsights',
elevation: 0,
label: const Text("Add Medical Insights",
style: TextStyle(
color: Colors.white,
)),
icon: const Icon(
Icons.add,
color: Colors.white,
),
),
),
SizedBox(
height: 20,
),
provider.savedList.isEmpty
? SizedBox.shrink()
: ListView.builder(
itemCount: provider.savedList.length,
shrinkWrap: true,
cacheExtent:
double.parse(provider.savedList.length.toString()),
itemBuilder: (context, index) {
return Column(
children: [
ListTile(
subtitle: Text(
'Updated on ${CustomDateFormatter().convertDateTimeToDate(provider.savedList[index].updatedTime!)}',
//style: TextStyle(fontStyle: FontStyle.italic),
),
title: Text(
provider.savedList[index].id,
),
trailing: SizedBox(
width: 100,
child: Row(children: [
IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
icon: const Icon(
Icons.info_outline,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
IconButton(
onPressed: () async {
await provider.initConfigData().then({
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (BuildContext context) =>
// EditInteractionScreen(
// saveInteraction: provider
// .savedList[index],
// )))
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
EditInteractionScreen1(
saveInteraction: provider
.savedList[index],
)))
});
},
icon: const Icon(
Icons.edit,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
// IconButton(
// onPressed: () {
// showDeleteRecordAlertDialog(
// context,
// provider.savedList[index].id,
// provider.savedList[index]);
// },
// icon: const Icon(
// Icons.delete,
// size: 24,
// color: Color.fromARGB(255, 8, 39, 92),
// ),
// ),
]),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
),
const Divider(),
],
);
}),
],
),
);
});
}
void changeIndex(DrawerIndex drawerIndexdata) {
if (drawerIndex != drawerIndexdata) {
drawerIndex = drawerIndexdata;
@ -61,12 +225,12 @@ class _NavigationHomeScreenState extends State<NavigationHomeScreen> {
break;
case DrawerIndex.FeedBack:
setState(() {
screenView = HomeScreen();
screenView = HelpDeskScreen();
});
break;
case DrawerIndex.Invite:
setState(() {
screenView = HomeScreen();
screenView = medicalInsights();
});
break;
default:

View File

@ -1,28 +1,54 @@
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:avatar_stack/avatar_stack.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:konectar_events/contacts_module/model_class/speaker.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/configprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionlistscreen.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/interactionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/new_dynamicform.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/viewinteractionprovider.dart';
import 'package:konectar_events/contacts_module/ui_screen/interactionform/widget/custombutton.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_editinteraction.dart';
import 'package:konectar_events/contacts_module/ui_screen/new_viewinteraction.dart';
import 'package:konectar_events/model/events_speakers_k1.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventspeakers.dart';
import 'package:konectar_events/model/sessionnotesmodel.dart';
import 'package:konectar_events/model/sessionstopics_model.dart';
import 'package:konectar_events/utils/constants.dart';
import 'package:konectar_events/utils/dateformater.dart';
import 'package:konectar_events/utils/util.dart';
import 'package:konectar_events/viewmodel/hcpprofprovider.dart';
import 'package:konectar_events/widgets/customdropdown.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:path/path.dart' as p;
class HCPProfileScreen extends StatefulWidget {
Eventsdetail eventsdetail;
EventSpeakersData eventsdetail;
String eventid;
String title;
List<String> sessionNames;
List<String> topics;
String kolFullName;
HCPProfileScreen(
{super.key,
required this.eventsdetail,
required this.eventid,
required this.kolFullName,
required this.sessionNames,
required this.topics,
required this.title});
@override
@ -31,8 +57,10 @@ class HCPProfileScreen extends StatefulWidget {
class _HCPProfileScreenState extends State<HCPProfileScreen> {
String? _selectedFruit;
SessionsTopicsData? sessionsTopicsData;
bool isExtended = false;
List<String> sessionList = [];
String attachedFileName = '';
final List<String> _fruits = ['Events', 'Sessions'];
final List<String> topics = [
" Admin. & Managemente",
@ -44,7 +72,8 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
];
TextEditingController notesController = TextEditingController(text: "");
List<String> sessionNotesList = [];
Future<void> dialogBuilder(BuildContext context, Eventsdetail eventsdetail) {
Future<void> dialogBuilder(BuildContext context, Eventsdetail eventsdetail,
HcpProfileProvider provider) {
return showDialog<void>(
context: context,
builder: (BuildContext context) {
@ -58,7 +87,7 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(8.0)),
child: dropDown(underline: Container())),
child: dropDown(underline: Container(), provider: provider)),
TextFormField(
validator: (value) {
// add email validation
@ -109,15 +138,15 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
);
}
Widget dropDown({
Widget? underline,
Widget dropDown(
{Widget? underline,
Widget? icon,
TextStyle? style,
TextStyle? hintStyle,
Color? dropdownColor,
}) =>
DropdownButton<String>(
value: _selectedFruit,
required HcpProfileProvider provider}) =>
DropdownButton<SessionsTopicsData>(
value: sessionsTopicsData,
underline: underline,
icon: Align(alignment: Alignment.centerRight, child: icon),
dropdownColor: dropdownColor,
@ -128,15 +157,16 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
fontSize: 14.0,
),
// iconEnabledColor: iconEnabledColor,
onChanged: (String? newValue) {
onChanged: (SessionsTopicsData? newValue) {
setState(() {
_selectedFruit = newValue;
_selectedFruit = newValue!.sessionName;
sessionsTopicsData = newValue;
});
},
hint: Text("Select Session", style: hintStyle),
items: sessionList
.map((session) => DropdownMenuItem<String>(
value: session, child: Text(session)))
items: provider.sessionTopics
.map((session) => DropdownMenuItem<SessionsTopicsData>(
value: session, child: Text(session.sessionName!)))
.toList());
@override
@ -152,7 +182,21 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
await Provider.of<HcpProfileProvider>(context, listen: false)
.getSessionData();
await Provider.of<HcpProfileProvider>(context, listen: false)
.getCounts(widget.eventsdetail);
.getSessionTopics(widget.eventsdetail);
// await Provider.of<HcpProfileProvider>(context, listen: false)
// .getCounts(widget.eventsdetail);
await Provider.of<InteractionProvider>(context, listen: false)
.initConfigData();
await Provider.of<InteractionProvider>(context, listen: false).getRecords();
String formname = Provider.of<InteractionProvider>(context, listen: false)
.intConfigDataList[0]
.name;
await Provider.of<ViewInteractionProvider>(context, listen: false)
.getRecords(formname, hcp: widget.kolFullName);
setState(() {});
}
@ -265,7 +309,7 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
];
},
body: TabBarView(children: [
topicsTab(widget.eventsdetail),
topicsTab(widget.eventsdetail, provider),
sessionNotes(context, widget.eventsdetail, provider),
medicalInsights(),
// sessionNotes(context)
@ -290,7 +334,8 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
});
}
buildprofile(BuildContext context, Eventsdetail eventsdetail, String title) {
buildprofile(
BuildContext context, EventSpeakersData eventsdetail, String title) {
MediaQuery.of(context).size.height * 0.35;
return Container(
@ -409,7 +454,7 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
));
}
Widget buildCardView(BuildContext context, Eventsdetail eventsdetail,
Widget buildCardView(BuildContext context, EventSpeakersData eventsdetail,
HcpProfileProvider provider) {
return Container(
// color: Constants.bgcolor,
@ -519,8 +564,8 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
// const Spacer(),
Center(
child: _ProfileInfoRow(items: [
ProfileInfoItem("Topic(s)", provider.totalTopics),
ProfileInfoItem("Session(s)", provider.totalSessions),
ProfileInfoItem("Topic(s)", widget.topics.length),
ProfileInfoItem("Session(s)", widget.sessionNames.length),
ProfileInfoItem("Note(s)", provider.totalNotes),
])),
// SizedBox(
@ -531,9 +576,10 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
);
}
Widget sessionNotes(BuildContext context, Eventsdetail eventsdetail,
Widget sessionNotes(BuildContext context, EventSpeakersData eventsdetail,
HcpProfileProvider provider) {
sessionList = eventsdetail.sessionName!.split(",");
// sessionList = eventsdetail.sessionName!.split(',');
sessionList = widget.sessionNames;
return Container(
color: EventsConstants.bgcolor,
child: Column(
@ -554,7 +600,8 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(4.0)),
child: dropDown(underline: Container())),
child:
dropDown(underline: Container(), provider: provider)),
SizedBox(
height: 15,
),
@ -584,6 +631,43 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
focusedBorder: OutlineInputBorder(),
),
),
SizedBox(
height: 10,
),
Row(
children: [
// Text("Attach a file :"),
// SizedBox(
// width: 10,
// ),
CustomButton(
backgroundColor:
const Color.fromARGB(255, 233, 229, 229),
onPressed: () async {
// sectionItem.selectedValue = [];
// sectionItem.extension = [];
// sectionItem.fileName = [];
await getEncodedFile();
setState(() {});
},
width: 120,
height: 40,
fontsize: 12,
textColor: Colors.black,
title: "Upload file"),
SizedBox(
width: 5,
),
Text(
attachedFileName != "" ? attachedFileName : "",
style: TextStyle(
color: attachedFileName != ""
? Colors.green
: Colors.red),
),
],
),
],
)),
Align(
@ -596,27 +680,32 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
onPressed: () async {
//"Program Committee Admin. & Management"
//setState(() {
print("ADD : ${_selectedFruit} ${notesController.text}");
if (notesController.text.length != 0 ||
notesController.text != "" ||
_selectedFruit != "" ||
_selectedFruit != null) {
notesController.text != "") {
sessionNotesList
.add("${_selectedFruit} \n\n ${notesController.text}");
// });
print(
" eventid:${widget.eventid},hcp:${widget.eventsdetail.kolId}");
print(" eventid:${widget.eventid},hcp:${widget.eventid}");
await provider.submitSessionNotes(eventsdetail,
sessionsTopicsData!, notesController.text);
SessionNotesModel notesModel = SessionNotesModel(
notes: notesController.text,
addedBy: "user",
addedDate: CustomDateFormatter().formatDate(),
eventid: widget.eventid,
hcpid: widget.eventsdetail.kolId,
hcpid: widget.eventid,
selectedSession: _selectedFruit);
print(
"${notesModel.addedBy},${notesModel.notes},${notesModel.addedDate},${notesModel.eventid},${notesModel.hcpid},${notesModel.selectedSession}");
await provider.addSessionNotes(notesModel);
_selectedFruit = null;
sessionsTopicsData = null;
notesController.clear();
} else {
print("something went wrong");
}
},
heroTag: 'addnotes',
@ -723,9 +812,72 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
);
}
Widget topicsTab(Eventsdetail eventsdetail) {
print("${eventsdetail.sessionName!.split(",").length} @@@lengtg");
List<String> sessions = eventsdetail.sessionName!.split(",");
Future<void> getEncodedFile() async {
String base64Image = '';
var status = Platform.isAndroid
? await Permission.manageExternalStorage.status
: await Permission.storage.status;
if (status.isGranted) {
FilePickerResult? result =
await FilePicker.platform.pickFiles(allowMultiple: true);
if (result != null) {
print(result.files.first.path);
print(result.files.last.path);
for (var files in result.files) {
File file = File(files.path!);
print("check file path : ${file.path}");
var fileName = file.path.split('/').last;
// Get the application folder directory
Directory? directory = Platform.isAndroid
? await getExternalStorageDirectory() //FOR ANDROID
: await getApplicationDocumentsDirectory();
String newPath = ""; //FOR ios
String convertedDirectoryPath = (directory?.path).toString();
print("see the converted directory path $convertedDirectoryPath");
newPath = "$convertedDirectoryPath/konectar/files";
print("new path :$newPath");
directory = Directory(newPath);
if (!await directory.exists()) {
await directory.create(recursive: true);
}
File newFile = await file.copy('${directory.path}/$fileName');
print("new path is ${newFile.path}");
final extension = p.extension(newFile.path);
List<int> imageBytes = await newFile.readAsBytes();
Uint8List imageUint8List = Uint8List.fromList(imageBytes);
base64Image = base64Encode(imageUint8List);
attachedFileName = fileName;
// sectionItem.selectedValue!.add(base64Image);
// sectionItem.extension!.add(extension);
// sectionItem.fileName!.add(fileName);
}
}
} else {
print("not permitted");
await requestPermission(Platform.isAndroid
? Permission.manageExternalStorage
: Permission.storage);
}
}
Future<void> requestPermission(Permission permission) async {
final status = await permission.request();
setState(() {
print(status);
// _permissionStatus = status;
// print(_permissionStatus);
});
}
Widget topicsTab(
EventSpeakersData eventsdetail, HcpProfileProvider provider) {
//print("${eventsdetail.sessionName!.join(",").length} @@@lengtg");
// List<String> sessions = eventsdetail.sessionName!.split(",");
return Container(
width: double.maxFinite,
padding: EdgeInsets.only(left: 8),
@ -735,9 +887,10 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
),
child: ListView.separated(
padding: EdgeInsets.only(top: 10.0, left: 4.0),
itemCount: sessions.length,
itemCount: provider.sessionTopics.length,
itemBuilder: (context, index) {
List<String> topics = eventsdetail.eventTopics!.split("|");
List<String> topics =
provider.sessionTopics[index].eventTopics!.split('|');
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -753,7 +906,7 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
// overflow: TextOverflow.ellipsis,
// ),
Text(
"${index + 1}.${sessions[index]}",
"${index + 1}.${provider.sessionTopics[index].sessionName}",
style: TextStyle(
// fontFamily: "SourceSerif",
@ -856,12 +1009,42 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
}
Widget medicalInsights() {
return Consumer<ViewInteractionProvider>(
builder: (BuildContext context, provider, Widget? child) {
return Container(
color: EventsConstants.bgcolor,
child: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
Center(
child: FloatingActionButton.extended(
backgroundColor: Colors.green,
onPressed: () {},
onPressed: () async {
final ConfigDataProvider configDataProvider =
ConfigDataProvider();
await configDataProvider.initConfigUIDataMediccalInsight();
await Provider.of<InteractionProvider>(context, listen: false)
.initConfigData();
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => InteractionScreen1(
index: 0,
form: Provider.of<InteractionProvider>(context,
listen: false)
.intConfigDataList[0]
.name,
title: "${widget.kolFullName}",
)));
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const InteractionListScreen()));
},
heroTag: 'medicalinsights',
elevation: 0,
label: const Text("Add Medical Insights",
@ -874,7 +1057,108 @@ class _HCPProfileScreenState extends State<HCPProfileScreen> {
),
),
),
SizedBox(
height: 20,
),
provider.savedList.isEmpty
? SizedBox.shrink()
: ListView.builder(
itemCount: provider.savedList.length,
shrinkWrap: true,
cacheExtent:
double.parse(provider.savedList.length.toString()),
itemBuilder: (context, index) {
return Column(
children: [
ListTile(
subtitle: Text(
'Updated on ${CustomDateFormatter().convertDateTimeToDate(provider.savedList[index].updatedTime!)}',
//style: TextStyle(fontStyle: FontStyle.italic),
),
title: Text(
provider.savedList[index].id,
),
trailing: SizedBox(
width: 100,
child: Row(children: [
IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
icon: const Icon(
Icons.info_outline,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
IconButton(
onPressed: () async {
await provider.initConfigData().then({
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (BuildContext context) =>
// EditInteractionScreen(
// saveInteraction: provider
// .savedList[index],
// )))
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
EditInteractionScreen1(
saveInteraction: provider
.savedList[index],
)))
});
},
icon: const Icon(
Icons.edit,
size: 24,
color: Color.fromARGB(255, 8, 39, 92),
),
),
// IconButton(
// onPressed: () {
// showDeleteRecordAlertDialog(
// context,
// provider.savedList[index].id,
// provider.savedList[index]);
// },
// icon: const Icon(
// Icons.delete,
// size: 24,
// color: Color.fromARGB(255, 8, 39, 92),
// ),
// ),
]),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
ViewInteractionScreen1(
saveInteraction:
provider.savedList[index],
)));
},
),
const Divider(),
],
);
}),
],
),
);
});
}
}

View File

@ -1,13 +1,21 @@
import 'dart:async';
import 'dart:math';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/contacts_module/model_class/k2_api_model/kol_event_k2.dart';
import 'package:konectar_events/model/affiliationsmodel.dart';
import 'package:konectar_events/model/events_details.dart';
import 'package:konectar_events/model/events_list_resp_2.dart';
import 'package:konectar_events/model/events_speakers_k1.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventsmodel.dart';
import 'package:konectar_events/model/eventsoverview.dart';
import 'package:konectar_events/model/eventspeakers.dart';
import 'package:konectar_events/model/keywords_model.dart';
import 'package:konectar_events/model/my_events_list_model.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/model/scope_model.dart';
import 'package:konectar_events/model/sessionnotesmodel.dart';
@ -21,75 +29,118 @@ class EventsProvider extends ChangeNotifier {
List<Keyword> keywordList = [];
List<Therapeutic> therapeuticList = [];
List<EventsList> eventList = [];
List<EventsListingData> neweventList = [];
List<EventsList> searchList = [];
List<EventsList> myEvents = [];
List<EventsList> offlineEvents = [];
List<Eventsdetail> eventdetailList = [];
List<Eventsdetail> srcheventdetailList = [];
List<String> selectedTherapeutic = [];
List<SessionNotesModel> addedSessionNotes = [];
List<EventSpeakersData> speakersList = [];
List<String> myEventids = [];
bool showCheckbox = false;
bool offlineExists = false;
int eventSessionCount = 0;
String message = "";
int speakercount = 0;
late Box<EventsList> box;
// late Box<MyEventsList> myeventsbox;
late Box<SessionNotesModel> sessionBox;
bool isAllSelected = true;
bool isFavSeleted = false;
bool isFavSeleted = true;
bool isSearch = false;
bool isSearchSpeakers = false;
List<FlutterHashtag> kFlutterHashtags = [];
List<TopicsCloudData> topics = [];
List<Specialty> specialtyList = [];
OverviewData? overviewData;
Affiliations affiliations =
Affiliations(affiliationCount: [], affiliationNames: []);
EventsOverviewData? overviewData;
List<Affiliations> affiliations = [];
onSelectAll() async {
// isFavSeleted = false;
// isAllSelected = !isAllSelected;
eventList = await getEvents();
late StreamSubscription<List<ConnectivityResult>> connectivitySubscription;
Future<void> onSelectAll(int page) async {
isFavSeleted = false;
isAllSelected = !isAllSelected;
eventList = await getEvents(page);
notifyListeners();
}
onSelectMy() async {
// isFavSeleted = !isFavSeleted;
eventList = await getMyEventsData();
Future<void> onSelectMy() async {
isFavSeleted = !isFavSeleted;
eventList = [];
eventList = await getMyEvents(1);
notifyListeners();
}
OnSearch(String searchtxt) {
// searchtxt = searchtxt.toLowerCase();
isSearch = true;
if (isFavSeleted) {
searchList = eventList
.where((element) => element.name1!.toLowerCase().contains(searchtxt))
// (element.city != "" &&
// element.city!.toLowerCase().contains(searchtxt)) ||
// (element.region != "" &&
// element.region!.toLowerCase().contains(searchtxt)) ||
// (element.country != "" &&
// element.country!.toLowerCase().contains(searchtxt)))
.toList();
bool checkIfUserInterested(String eventid) {
bool user = false;
if (eventList.isNotEmpty) {
int index = eventList.indexWhere(
(element) => element.eventId == eventid,
);
print("FOR EVENT ID :$eventid : ${eventList[index].eventUserInterest}");
user = eventList[index].eventUserInterest ?? false;
}
return user;
}
List<EventsList> OnSearch(String searchtxt) {
print("Searching.......");
// // searchtxt = searchtxt.toLowerCase();
// isSearch = true;
// if (isFavSeleted) {
// searchList = eventList
// .where((element) => element.name1!.toLowerCase().contains(searchtxt))
// // (element.city != "" &&
// // element.city!.toLowerCase().contains(searchtxt)) ||
// // (element.region != "" &&
// // element.region!.toLowerCase().contains(searchtxt)) ||
// // (element.country != "" &&
// // element.country!.toLowerCase().contains(searchtxt)))
// .toList();
// } else {
// eventList =
// await ApiCall().getSearchedEventsFromK2(1, "event_name", searchtxt);
// // searchList = eventList
// // .where((element) => element.name1!.toLowerCase().contains(searchtxt))
// // // element.city!.toLowerCase().contains(searchtxt) ||
// // // element.region!.toLowerCase().contains(searchtxt) ||
// // // element.country!.toLowerCase().contains(searchtxt))
// // .toList();
// }
List<EventsList> searchList = eventList
..where((element) => element.name1!.toLowerCase().contains(searchtxt));
return searchList;
// print("###$searchList@@@");
// notifyListeners();
}
bool ifOfflineExists(String eventid) {
if (offlineEvents.isNotEmpty) {
offlineEvents.forEach(
(element) {
if (element.eventId == eventid) {
offlineExists = true;
} else {
searchList = eventList
.where((element) => element.name1!.toLowerCase().contains(searchtxt))
// element.city!.toLowerCase().contains(searchtxt) ||
// element.region!.toLowerCase().contains(searchtxt) ||
// element.country!.toLowerCase().contains(searchtxt))
.toList();
offlineExists = false;
}
},
);
}
print("###$searchList@@@");
notifyListeners();
return offlineExists;
}
getSessionCount() {
List<String> sessions = [];
eventSessionCount = 0;
for (var obj in eventdetailList) {
sessions.addAll(obj.sessionName!.split(','));
eventSessionCount += int.parse(obj.numSess ?? "0");
for (var obj in speakersList) {
sessions.addAll(obj.sessionName!.split(','));
}
print("Count ${sessions.toSet().toList().length}");
print("Count2 ${sessions.toList().length}");
@ -118,9 +169,9 @@ class EventsProvider extends ChangeNotifier {
onFilterReset() async {
if (isFavSeleted) {
eventList = await getMyEventsData();
myEvents = await getMyEvents(1);
} else {
eventList = await getEvents();
eventList = await getEvents(1);
}
isSearch = false;
@ -131,9 +182,9 @@ class EventsProvider extends ChangeNotifier {
onSearchReset() async {
if (isFavSeleted) {
eventList = await getMyEventsData();
myEvents = await getMyEvents(1);
} else {
eventList = await getEvents();
eventList = await getEvents(1);
}
isSearch = false;
@ -176,16 +227,58 @@ class EventsProvider extends ChangeNotifier {
//notifyListeners();
}
Future<List<EventsList>> getEvents() async {
eventList = await getAllEventsData();
Future<List<EventsList>> getEvents(int page,
{String? searchtxt, String? startdate, String? enddate}) async {
// eventList = await getAllEventsData();
eventList.clear();
eventList = [];
offlineEvents = await getOfflineMyEvents();
eventList = isFavSeleted
? await ApiCall().getEventsFromK1(type: "2")
: await ApiCall().getEventsFromK1();
print("see the list : $neweventList");
if (eventList.isEmpty) {
eventList = (await ApiCall().getEvents())!;
// eventList = (await ApiCall().getEvents())!;
eventList = isFavSeleted
? await ApiCall().getEventsFromK1(type: "2")
: await ApiCall().getEventsFromK1();
//eventList = (await ApiCall().getStagingEvents())!;
for (var events in eventList) {
await saveEventsData(events);
}
}
if (searchtxt != "") {
return OnSearch(searchtxt!);
}
//add to favs old
if (myEventids.isNotEmpty) {
for (var events in eventList) {
if (myEventids.contains(events.eventId)) {
events.isfav = true;
}
}
}
return eventList;
//notifyListeners();
}
Future<List<EventsList>> getMyEvents(int page) async {
// eventList = await getAllEventsData();
myEvents = await ApiCall().getEventsFromK1(type: "2");
print("see the list : $myEvents");
if (myEvents.isEmpty) {
// eventList = (await ApiCall().getEvents())!;
myEvents = await ApiCall().getEventsFromK1(type: "2");
//eventList = (await ApiCall().getStagingEvents())!;
}
for (var events in myEvents) {
myEventids.add(events.eventId!);
}
return myEvents;
//notifyListeners();
}
@ -209,14 +302,96 @@ class EventsProvider extends ChangeNotifier {
}
Future<List<Eventsdetail>> getEventsDetails(String eventid) async {
eventdetailList = (await ApiCall().getLocalEventsDetail(eventid))!;
eventdetailList = (await ApiCall().getLocalEventsDetail("142682"))!;
return eventdetailList;
//notifyListeners();
}
Future<String> addEventsToFavs(String eventid) async {
message = await ApiCall().addEventsToFav(eventid);
Future<List<EventSpeakersData>> getInitialSpeakersDetails(String eventid,
{required String searchkey}) async {
speakersList = (await ApiCall().getEventsSpeakersFromK1(eventid));
getSessionCount();
if (searchkey.length != 0) {
List<EventSpeakersData> searchspeakers = speakersList
.where((element) =>
element.kolFullName!.toLowerCase().contains(searchkey))
.toList();
if (searchspeakers.isEmpty) {
searchspeakers = speakersList
.where((element) =>
element.eventTopics!.toLowerCase().contains(searchkey))
.toList();
}
return searchspeakers;
} else {
return await ApiCall().getEventsSpeakersFromK1(eventid);
}
//return speakersList = (await ApiCall().getEventsSpeakersFromK1(eventid));
// notifyListeners();
}
Future<List<EventSpeakersData>> getSpeakersDetails(int page, String eventid,
String event_unique_id, String searchkey, int lastIndex) async {
// speakercount = data["count"];
speakersList = (await ApiCall().getEventsSpeakersFromK1(eventid));
// getSessionCount();
// if (speakersList.isEmpty) {
//
// }
if (page == 0) {
speakersList = speakersList.getRange(0, lastIndex).toList();
} else if (page > 0) {
int nextIndex = lastIndex + 40;
if (nextIndex < speakersList.length) {
speakersList = speakersList.getRange(lastIndex, nextIndex).toList();
} else {
speakersList =
speakersList.getRange(lastIndex, speakersList.length - 1).toList();
}
}
// if (searchkey.length != 0) {
// List<EventSpeakersData> searchspeakers = speakersList
// .where((element) =>
// element.kolFullName!.toLowerCase().contains(searchkey))
// .toList();
// return searchspeakers;
// } else {
return speakersList;
// }
//notifyListeners();
}
Future<String> addEventsToFavs(String eventid) async {
message = await ApiCall().followUnfollowEvent("1", eventid);
if (myEventids.isNotEmpty) {
if (!myEventids.contains(eventid)) {
myEventids.add(eventid);
}
} else {
myEventids.add(eventid);
}
return message;
//notifyListeners();
}
Future<String> attendNotAttendEvent(String eventid, String flag) async {
message = await ApiCall().attendNotAttendEvent(flag, eventid);
return message;
//notifyListeners();
}
Future<String> removeEventsToFavs(String eventid) async {
message = await ApiCall().followUnfollowEvent("0", eventid);
if (myEventids.isNotEmpty) {
if (myEventids.contains(eventid)) {
myEventids.remove(eventid);
}
}
return message;
//notifyListeners();
}
@ -231,7 +406,9 @@ class EventsProvider extends ChangeNotifier {
box = await Hive.openBox<EventsList>('EventsListBox');
box.add(eventsData);
List<EventsList> eventsData2 = await getMyEventsData();
offlineEvents.clear();
offlineEvents = await getOfflineMyEvents();
print("OFFLINE TOTAL :${offlineEvents.length}");
notifyListeners();
}
@ -242,26 +419,11 @@ class EventsProvider extends ChangeNotifier {
(element) => element.eventId == eventsData.eventId,
);
box.putAt(index, eventsData);
List<EventsList> eventsData2 = await getMyEventsData();
// List<EventsList> eventsData2 = await getMyEventsData();
notifyListeners();
}
Future<List<EventsList>> getMyEventsData() async {
box = await Hive.openBox<EventsList>('EventsListBox');
Iterable<EventsList> data = box.values;
myEvents = data
.where(
(element) => element.isfav == true,
)
.toList();
// EventsList eventsdata = EventsList();
// for (var obj in data) {
// eventsdata = new EventsList.fromJson(obj.toJson());
// }
return myEvents;
}
Future<List<EventsList>> getAllEventsData() async {
Future<List<EventsList>> getOfflineMyEvents() async {
box = await Hive.openBox<EventsList>('EventsListBox');
Iterable<EventsList> data = box.values;
myEvents = data.toList();
@ -288,7 +450,7 @@ class EventsProvider extends ChangeNotifier {
box.clear();
}
FutureOr delateEventsData(EventsList event) async {
FutureOr delateOfflineEvent(EventsList event) async {
//DELETE
// box = await Hive.openBox<EventsList>('EventsListBox');
// List<EventsList> data = box.values.toList();
@ -303,8 +465,11 @@ class EventsProvider extends ChangeNotifier {
(element) => element.eventId == event.eventId,
);
event.isfav = false;
box.putAt(index, event);
eventList = await getMyEventsData();
// box.putAt(index, event);
box.deleteAt(index);
//eventList = await getMyEventsData();
offlineEvents.clear();
offlineEvents = await getOfflineMyEvents();
notifyListeners();
}
@ -316,9 +481,9 @@ class EventsProvider extends ChangeNotifier {
notifyListeners();
}
FutureOr getTopicsCloud(String eventid) async {
List<TopicsCloudData> topics =
(await ApiCall().getTopicsCloudData(eventid))!;
FutureOr getTopicsCloud(EventsList event) async {
List<TopicsCloudData> topics = (await ApiCall().insightsTopicsCloud(
eventid: event.eventId!, startDate: event.start!, endDate: event.end!));
// for (var events in eventList) {
// await saveEventsData(events);
// }
@ -332,14 +497,20 @@ class EventsProvider extends ChangeNotifier {
notifyListeners();
}
FutureOr getSpecialtyData(String eventid) async {
specialtyList = (await ApiCall().getSpecialty(eventid))!;
FutureOr getSpecialtyData(EventsList event) async {
specialtyList = (await ApiCall().specialtyOfSpeakers(
eventid: event.eventId!,
startDate: CustomDateFormatter().formatYearDate(
CustomDateFormatter().convertStringToDate(event.start!)),
endDate: CustomDateFormatter().formatYearDate(
CustomDateFormatter().convertStringToDate(event.end!))));
notifyListeners();
}
FutureOr getAffiliations(String eventid) async {
affiliations = (await ApiCall().getSpeakerCounts(eventid))!;
FutureOr getAffiliations(EventsList event) async {
affiliations = (await ApiCall().insightsBarChart(
eventid: event.eventId!, startDate: event.start!, endDate: event.end!));
notifyListeners();
}
@ -351,4 +522,6 @@ class EventsProvider extends ChangeNotifier {
notifyListeners();
}
//INTERNET CONNECTIVITY
}

View File

@ -1,10 +1,14 @@
import 'dart:async';
import 'dart:math';
import 'package:flutter/cupertino.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/model/events_speakers_k1.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventspeakers.dart';
import 'package:konectar_events/model/sessionnotesmodel.dart';
import 'package:konectar_events/model/sessionstopics_model.dart';
import 'package:konectar_events/model/topics_cloud_model.dart';
import 'package:konectar_events/utils/apicall.dart';
import 'package:konectar_events/widgets/word_cloud.dart';
@ -15,8 +19,27 @@ class HcpProfileProvider extends ChangeNotifier {
int totalTopics = 0;
int totalSessions = 0;
int totalNotes = 0;
List<SessionsTopicsData> sessionTopics = [];
late Box<SessionNotesModel> box;
Future<void> getSessionTopics(EventSpeakersData detail) async {
sessionTopics = await ApiCall().getSessionsTopics(detail.eid!,
detail.kolId == "0" ? detail.hcpPinAlias! : detail.kolId!, detail.kId!);
totalSessions = sessionTopics.length;
notifyListeners();
}
Future<dynamic> submitSessionNotes(EventSpeakersData detail,
SessionsTopicsData sessionsTopicsData, String notes) async {
var data = await ApiCall().addSessionNotes(
sessionsTopicsData.kolEventsId!,
detail.kolId == "0" ? detail.hcpPinAlias! : detail.kolId!,
detail.eventAttendeesId!,
detail.kId!,
notes);
return data;
}
getCounts(Eventsdetail eventsdetail) {
List<String> topics = eventsdetail.eventTopics!.split("|");
totalTopics = topics.length;
@ -33,9 +56,9 @@ class HcpProfileProvider extends ChangeNotifier {
}
List<SessionNotesModel> getSessionNotesList(
String eid, Eventsdetail eventsdetail) {
String eid, EventSpeakersData eventsdetail) {
print("Check hcp id");
print("$eid,${eventsdetail.kolId}");
print("$eid,${eventsdetail.id}");
sessionNotesList = sessionNotesList
.where(
(element) => element.eventid == eid,
@ -50,10 +73,10 @@ class HcpProfileProvider extends ChangeNotifier {
String fname = element.hcpname!.split(" ")[0];
String lname = element.hcpname!.split(" ").last;
print("${element.hcpname}");
return fname.toLowerCase() == eventsdetail.firstName!.toLowerCase() &&
lname.toLowerCase() == eventsdetail.lastName!.toLowerCase();
return fname.toLowerCase() == eventsdetail.kolFullName!.toLowerCase() &&
lname.toLowerCase() == eventsdetail.kolFullName!.toLowerCase();
} else {
return element.hcpid == eventsdetail.kolId;
return element.hcpid == eventsdetail.id;
}
}).toList();
totalNotes = sessionNotesList.length;

View File

@ -0,0 +1,325 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:konectar_events/model/eventsdetailmodel.dart';
import 'package:konectar_events/model/eventsmodel.dart';
import 'package:konectar_events/model/keywords_model.dart';
import 'package:konectar_events/model/neweventsmodel.dart';
import 'package:konectar_events/model/scope_model.dart';
import 'package:konectar_events/model/sessionnotesmodel.dart';
import 'package:konectar_events/model/topics_cloud_model.dart';
import 'package:konectar_events/utils/apicall.dart';
import 'package:konectar_events/utils/dateformater.dart';
import 'package:konectar_events/widgets/word_cloud.dart';
class EventsOfflineProvider extends ChangeNotifier {
List<Keyword> keywordList = [];
List<Therapeutic> therapeuticList = [];
List<EventsList> eventList = [];
List<EventsList> searchList = [];
List<EventsList> myEvents = [];
List<Eventsdetail> eventdetailList = [];
List<Eventsdetail> srcheventdetailList = [];
List<String> selectedTherapeutic = [];
List<SessionNotesModel> addedSessionNotes = [];
int eventSessionCount = 0;
String message = "";
late Box<EventsList> box;
late Box<SessionNotesModel> sessionBox;
bool isAllSelected = true;
bool isFavSeleted = false;
bool isSearch = false;
bool isSearchSpeakers = false;
List<FlutterHashtag> kFlutterHashtags = [];
List<TopicsCloudData> topics = [];
onSelectAll() async {
// isFavSeleted = false;
// isAllSelected = !isAllSelected;
eventList = await getEvents();
notifyListeners();
}
onSelectMy() async {
// isFavSeleted = !isFavSeleted;
eventList = await getMyEventsData();
notifyListeners();
}
OnSearch(String searchtxt) {
// searchtxt = searchtxt.toLowerCase();
isSearch = true;
if (isFavSeleted) {
searchList = eventList
.where((element) => element.name1!.toLowerCase().contains(searchtxt))
// (element.city != "" &&
// element.city!.toLowerCase().contains(searchtxt)) ||
// (element.region != "" &&
// element.region!.toLowerCase().contains(searchtxt)) ||
// (element.country != "" &&
// element.country!.toLowerCase().contains(searchtxt)))
.toList();
} else {
searchList = eventList
.where((element) => element.name1!.toLowerCase().contains(searchtxt))
// element.city!.toLowerCase().contains(searchtxt) ||
// element.region!.toLowerCase().contains(searchtxt) ||
// element.country!.toLowerCase().contains(searchtxt))
.toList();
}
print("###$searchList@@@");
notifyListeners();
}
getSessionCount() {
List<String> sessions = [];
eventSessionCount = 0;
for (var obj in eventdetailList) {
sessions.addAll(obj.sessionName!.split(','));
eventSessionCount += int.parse(obj.numSess ?? "0");
}
print("Count ${sessions.toSet().toList().length}");
print("Count2 ${sessions.toList().length}");
print("SEE SESSIONS ${sessions.toSet().toList()}");
eventSessionCount = sessions.toSet().toList().length;
notifyListeners();
}
OnFilters() {
isSearch = true;
if (isFavSeleted) {
searchList = myEvents
.where((element) =>
selectedTherapeutic.contains(element.therapeuticArea))
.toList();
} else {
searchList = myEvents
.where((element) =>
selectedTherapeutic.contains(element.therapeuticArea))
.toList();
}
print("###$searchList@@@");
notifyListeners();
}
onFilterReset() async {
if (isFavSeleted) {
eventList = await getMyEventsData();
} else {
eventList = await getEvents();
}
isSearch = false;
searchList.clear();
notifyListeners();
}
onSearchReset() async {
if (isFavSeleted) {
eventList = await getMyEventsData();
} else {
eventList = await getEvents();
}
isSearch = false;
searchList.clear();
notifyListeners();
}
OnSearchSpeakers(String searchtxt) {
searchtxt = searchtxt.toLowerCase();
isSearchSpeakers = true;
srcheventdetailList = eventdetailList
.where((element) =>
element.kolFullName!.toLowerCase().contains(searchtxt) ||
element.eventTopics!.toLowerCase().contains(searchtxt))
.toList();
notifyListeners();
}
onSearchSpeakersReset(String eventid) async {
eventdetailList = await getEventsDetails(eventid);
isSearchSpeakers = false;
srcheventdetailList.clear();
notifyListeners();
}
initFiltersData() async {
// keywordList = await ApiCall().getkeywords('');
therapeuticList = await ApiCall().getscopes();
notifyListeners();
}
Future<List<Keyword>> getKeywordList(String keyword) async {
keywordList = await ApiCall().getkeywords(keyword);
return keywordList;
//notifyListeners();
}
Future<List<EventsList>> getEvents() async {
eventList = await getAllEventsData();
if (eventList.isEmpty) {
eventList = (await ApiCall().getEvents())!;
for (var events in eventList) {
await saveEventsData(events);
}
}
return eventList;
//notifyListeners();
}
Future<List<SessionNotesModel>> getAddedSessionNotes() async {
addedSessionNotes = await getAllSessionNotesList();
if (addedSessionNotes.isEmpty && eventList.isNotEmpty) {
addedSessionNotes = (await ApiCall().getSessionNotes())!;
for (SessionNotesModel notes in addedSessionNotes) {
int i =
eventList.indexWhere((element) => element.name1 == notes.eventname);
if (i != -1) {
notes.eventid = eventList[i].eventId;
}
notes.addedBy = "user";
notes.addedDate = CustomDateFormatter().formatDate();
await saveSessionDataFromResp(notes);
}
}
return addedSessionNotes;
//notifyListeners();
}
Future<List<Eventsdetail>> getEventsDetails(String eventid) async {
eventdetailList = (await ApiCall().getLocalEventsDetail(eventid))!;
return eventdetailList;
//notifyListeners();
}
Future<String> addEventsToFavs(String eventid) async {
message = await ApiCall().addEventsToFav(eventid);
return message;
//notifyListeners();
}
Future<String> markAttending(String eventid) async {
message = await ApiCall().attendEvents(eventid);
return message;
//notifyListeners();
}
FutureOr saveEventsData(EventsList eventsData) async {
box = await Hive.openBox<EventsList>('EventsListBox');
box.add(eventsData);
List<EventsList> eventsData2 = await getMyEventsData();
notifyListeners();
}
FutureOr favsEventsData(EventsList eventsData) async {
box = await Hive.openBox<EventsList>('EventsListBox');
List<EventsList> data = box.values.toList();
int index = data.indexWhere(
(element) => element.eventId == eventsData.eventId,
);
box.putAt(index, eventsData);
List<EventsList> eventsData2 = await getMyEventsData();
notifyListeners();
}
Future<List<EventsList>> getMyEventsData() async {
box = await Hive.openBox<EventsList>('EventsListBox');
Iterable<EventsList> data = box.values;
myEvents = data
.where(
(element) => element.isfav == true,
)
.toList();
// EventsList eventsdata = EventsList();
// for (var obj in data) {
// eventsdata = new EventsList.fromJson(obj.toJson());
// }
return myEvents;
}
Future<List<EventsList>> getAllEventsData() async {
box = await Hive.openBox<EventsList>('EventsListBox');
Iterable<EventsList> data = box.values;
myEvents = data.toList();
// EventsList eventsdata = EventsList();
// for (var obj in data) {
// eventsdata = new EventsList.fromJson(obj.toJson());
// }
return myEvents;
}
Future<List<SessionNotesModel>> getAllSessionNotesList() async {
sessionBox = await Hive.openBox<SessionNotesModel>('SessionNotesModelBox');
Iterable<SessionNotesModel> data = sessionBox.values;
addedSessionNotes = data.toList();
// EventsList eventsdata = EventsList();
// for (var obj in data) {
// eventsdata = new EventsList.fromJson(obj.toJson());
// }
return addedSessionNotes;
}
FutureOr deleteAllEventsData() async {
box = await Hive.openBox<EventsList>('EventsListBox');
box.clear();
}
FutureOr delateEventsData(EventsList event) async {
//DELETE
// box = await Hive.openBox<EventsList>('EventsListBox');
// List<EventsList> data = box.values.toList();
// int index = data.indexWhere(
// (element) => element.eventId == eventid,
// );
// await box.deleteAt(index);
//REMOVE FROM FAVS
box = await Hive.openBox<EventsList>('EventsListBox');
List<EventsList> data = box.values.toList();
int index = data.indexWhere(
(element) => element.eventId == event.eventId,
);
event.isfav = false;
box.putAt(index, event);
eventList = await getMyEventsData();
notifyListeners();
}
FutureOr saveSessionDataFromResp(SessionNotesModel notesModel) async {
sessionBox = await Hive.openBox<SessionNotesModel>('SessionNotesModelBox');
sessionBox.add(notesModel);
notifyListeners();
}
FutureOr getTopicsCloud(String eventid) async {
List<TopicsCloudData> topics =
(await ApiCall().getTopicsCloudData(eventid))!;
// for (var events in eventList) {
// await saveEventsData(events);
// }
//notifyListeners();
kFlutterHashtags = [];
for (var topic in topics) {
kFlutterHashtags
.add(FlutterHashtag(topic.topic!, int.parse(topic.total!), false));
}
notifyListeners();
}
}

View File

@ -196,6 +196,7 @@ class _StringAutoCompleteTagsState extends State<StringAutoCompleteTags> {
width: 1.0,
),
),
//helperText: 'Enter language...',
helperStyle: const TextStyle(
color: Colors.black,

View File

@ -42,27 +42,29 @@ class _HomeDrawerState extends State<HomeDrawer> {
void setDrawerListArray() {
drawerList = <DrawerList>[
DrawerList(
index: DrawerIndex.HOME,
labelName: 'Events',
//icon: Icon(Icons.home),
),
DrawerList(
index: DrawerIndex.Help,
labelName: 'Contacts',
icon: Icon(Icons.account_circle),
// isAssetsImage: true,
// imageName: 'assets/images/supportIcon.png',
),
// DrawerList(
// index: DrawerIndex.FeedBack,
// labelName: 'FeedBack',
// icon: Icon(Icons.help),
// ),
// DrawerList(
// index: DrawerIndex.Invite,
// labelName: 'Invite Friend',
// icon: Icon(Icons.group),
// ),
DrawerList(
index: DrawerIndex.HOME,
labelName: 'Events',
icon: Icon(Icons.event),
),
DrawerList(
index: DrawerIndex.FeedBack,
labelName: 'HelpDesk',
icon: Icon(Icons.help),
),
DrawerList(
index: DrawerIndex.Invite,
labelName: 'Medical Insight',
icon: Icon(Icons.group),
),
// DrawerList(
// index: DrawerIndex.Share,
// labelName: 'Rate the app',
@ -95,68 +97,64 @@ class _HomeDrawerState extends State<HomeDrawer> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
AnimatedBuilder(
animation: widget.iconAnimationController!,
builder: (BuildContext context, Widget? child) {
return ScaleTransition(
scale: AlwaysStoppedAnimation<double>(1.0 -
(widget.iconAnimationController!.value) * 0.2),
child: RotationTransition(
turns: AlwaysStoppedAnimation<double>(Tween<double>(
begin: 0.0, end: 24.0)
.animate(CurvedAnimation(
parent: widget.iconAnimationController!,
curve: Curves.fastOutSlowIn))
.value /
360),
child: Container(
height: 100,
width: 100,
decoration: BoxDecoration(
shape: BoxShape.circle,
boxShadow: <BoxShadow>[
BoxShadow(
color: AppTheme.grey.withOpacity(0.6),
offset: const Offset(2.0, 4.0),
blurRadius: 8),
],
SizedBox(
height: 30,
child: Image.asset(
"assets/images/konector_image_logo.png",
fit: BoxFit.cover,
),
child: ClipRRect(
borderRadius:
const BorderRadius.all(Radius.circular(60.0)),
child: CircleAvatar(
radius: 24,
backgroundColor: EventsConstants.blueColor,
// child: Icon(
// Icons.person,
// size: 18,
// color: Colors.white,
),
// AnimatedBuilder(
// animation: widget.iconAnimationController!,
// builder: (BuildContext context, Widget? child) {
// return ScaleTransition(
// scale: AlwaysStoppedAnimation<double>(1.0 -
// (widget.iconAnimationController!.value) * 0.2),
// child: RotationTransition(
// turns: AlwaysStoppedAnimation<double>(Tween<double>(
// begin: 0.0, end: 24.0)
// .animate(CurvedAnimation(
// parent: widget.iconAnimationController!,
// curve: Curves.fastOutSlowIn))
// .value /
// 360),
// child: Container(
// height: 100,
// width: 100,
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// boxShadow: <BoxShadow>[
// BoxShadow(
// color: AppTheme.grey.withOpacity(0.6),
// offset: const Offset(2.0, 4.0),
// blurRadius: 8),
// ],
// ),
// child: ClipRRect(
// borderRadius:
// const BorderRadius.all(Radius.circular(60.0)),
// child: CircleAvatar(
// radius: 24,
// backgroundColor: EventsConstants.blueColor,
// // child: Icon(
// // Icons.person,
// // size: 18,
// // color: Colors.white,
// // ),
// child: Text(
// "S",
// style: TextStyle(
// fontSize: 24,
// fontWeight: FontWeight.bold,
// color: Colors.white),
// ),
// ),
// ),
// ),
// ),
// );
// },
// ),
child: Text(
"S",
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
),
),
),
);
},
),
Padding(
padding: const EdgeInsets.only(top: 8, left: 4),
child: Text(
'Snehalatha Desai',
style: TextStyle(
fontWeight: FontWeight.w600,
color: isLightMode ? AppTheme.grey : AppTheme.white,
fontSize: 18,
),
),
),
],
),
),
@ -178,6 +176,17 @@ class _HomeDrawerState extends State<HomeDrawer> {
},
),
),
Padding(
padding: const EdgeInsets.only(top: 8, left: 4),
child: Text(
'Logged in as Snehalatha Desai',
style: TextStyle(
fontWeight: FontWeight.w300,
color: isLightMode ? AppTheme.grey : AppTheme.white,
fontSize: 18,
),
),
),
Divider(
height: 1,
color: AppTheme.grey.withOpacity(0.6),

View File

@ -66,7 +66,7 @@ class CustomPieChartState extends State<CustomPieChart> {
return Indicator(
size: 10,
color: AppColors().appcolors[i],
text: widget.specialtyList[i].specialtyName,
text: widget.specialtyList[i].specialtyName!,
isSquare: true,
);
})
@ -131,7 +131,7 @@ class CustomPieChartState extends State<CustomPieChart> {
List<PieChartSectionData> showingSections(List<Specialty> specialtyList) {
double total = 0.0;
for (var obj in specialtyList) {
total += double.parse(obj.specialtyCount);
total += double.parse(obj.specialtyCount!);
}
return List.generate(specialtyList.length, (i) {
@ -141,10 +141,10 @@ class CustomPieChartState extends State<CustomPieChart> {
const shadows = [Shadow(color: Colors.black, blurRadius: 2)];
return PieChartSectionData(
color: AppColors().appcolors[i],
value: ((double.parse(specialtyList[i].specialtyCount) / total) * 100)
value: ((double.parse(specialtyList[i].specialtyCount!) / total) * 100)
.roundToDouble(),
title:
'${((double.parse(specialtyList[i].specialtyCount) / total) * 100).roundToDouble()}%',
'${((double.parse(specialtyList[i].specialtyCount!) / total) * 100).floorToDouble()}%',
radius: radius,
titleStyle: TextStyle(
fontSize: fontSize,

View File

@ -1,75 +1,134 @@
PODS:
- connectivity_plus (0.0.1):
- FlutterMacOS
- ReachabilitySwift
- device_info_plus (0.0.1):
- Flutter
- FlutterMacOS
- file_selector_macos (0.0.1):
- FlutterMacOS
- flutter_inappwebview_macos (0.0.1):
- Firebase/CoreOnly (10.25.0):
- FirebaseCore (= 10.25.0)
- Firebase/RemoteConfig (10.25.0):
- Firebase/CoreOnly
- FirebaseRemoteConfig (~> 10.25.0)
- firebase_core (2.31.0):
- Firebase/CoreOnly (~> 10.25.0)
- FlutterMacOS
- OrderedSet (~> 5.0)
- firebase_remote_config (4.4.5):
- Firebase/CoreOnly (~> 10.25.0)
- Firebase/RemoteConfig (~> 10.25.0)
- firebase_core
- FlutterMacOS
- FirebaseABTesting (10.28.0):
- FirebaseCore (~> 10.0)
- FirebaseCore (10.25.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.12)
- GoogleUtilities/Logger (~> 7.12)
- FirebaseCoreInternal (10.28.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseInstallations (10.28.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseRemoteConfig (10.25.0):
- FirebaseABTesting (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- FirebaseRemoteConfigInterop (~> 10.23)
- FirebaseSharedSwift (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseRemoteConfigInterop (10.28.0)
- FirebaseSharedSwift (10.28.0)
- FlutterMacOS (1.0.0)
- OrderedSet (5.0.0)
- package_info_plus (0.0.1):
- FlutterMacOS
- GoogleUtilities/Environment (7.13.3):
- GoogleUtilities/Privacy
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.13.3):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- "GoogleUtilities/NSData+zlib (7.13.3)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (7.13.3)
- GoogleUtilities/UserDefaults (7.13.3):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- ReachabilitySwift (5.0.0)
- PromisesObjC (2.4.0)
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.3):
- Flutter
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
DEPENDENCIES:
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
- firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
- firebase_remote_config (from `Flutter/ephemeral/.symlinks/plugins/firebase_remote_config/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
SPEC REPOS:
trunk:
- OrderedSet
- ReachabilitySwift
- Firebase
- FirebaseABTesting
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseRemoteConfig
- FirebaseRemoteConfigInterop
- FirebaseSharedSwift
- GoogleUtilities
- PromisesObjC
EXTERNAL SOURCES:
connectivity_plus:
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
file_selector_macos:
:path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
flutter_inappwebview_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos
firebase_core:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos
firebase_remote_config:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_remote_config/macos
FlutterMacOS:
:path: Flutter/ephemeral
package_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
shared_preferences_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
SPEC CHECKSUMS:
connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9
flutter_inappwebview_macos: 9600c9df9fdb346aaa8933812009f8d94304203d
Firebase: 0312a2352584f782ea56f66d91606891d4607f06
firebase_core: fdf12e0c4349815c2e832d9dcad59fbff0ff394b
firebase_remote_config: 610707ec6f4efbf11225da2c6598e4b092962308
FirebaseABTesting: 589bc28c0ab3e5554336895a34aa262e24276665
FirebaseCore: 7ec4d0484817f12c3373955bc87762d96842d483
FirebaseCoreInternal: 58d07f1362fddeb0feb6a857d1d1d1c5e558e698
FirebaseInstallations: 60c1d3bc1beef809fd1ad1189a8057a040c59f2e
FirebaseRemoteConfig: 9f3935cefecd85d5b312192117f444957de24a75
FirebaseRemoteConfigInterop: 70d200c6956ef3b5c3592a95e824c1210682d785
FirebaseSharedSwift: 48de4aec81a6b79bb30404e5e6db43ea74848fed
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367

View File

@ -41,6 +41,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.4.1"
animations:
dependency: "direct main"
description:
name: animations
sha256: d3d6dcfb218225bbe68e87ccf6378bbb2e32a94900722c5f81611dad089911cb
url: "https://pub.dev"
source: hosted
version: "2.0.11"
archive:
dependency: transitive
description:
@ -574,6 +582,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.2.0"
flutter_staggered_grid_view:
dependency: transitive
description:
name: flutter_staggered_grid_view
sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
flutter_svg:
dependency: "direct main"
description:
@ -582,6 +598,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.10+1"
flutter_svg_provider:
dependency: "direct main"
description:
name: flutter_svg_provider
sha256: cda47ab350671ba51ae4605d48f4c82fa5a2c399d22ebda367c1b407234c5048
url: "https://pub.dev"
source: hosted
version: "1.0.7"
flutter_test:
dependency: "direct dev"
description: flutter
@ -768,6 +792,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.2.1+1"
infinite_scroll_pagination:
dependency: "direct main"
description:
name: infinite_scroll_pagination
sha256: b68bce20752fcf36c7739e60de4175494f74e99e9a69b4dd2fe3a1dd07a7f16a
url: "https://pub.dev"
source: hosted
version: "4.0.0"
info_popup:
dependency: "direct main"
description:
@ -952,6 +984,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.8"
overlay_support:
dependency: "direct main"
description:
name: overlay_support
sha256: fc39389bfd94e6985e1e13b2a88a125fc4027608485d2d4e2847afe1b2bb339c
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_config:
dependency: transitive
description:
@ -1269,6 +1309,14 @@ packages:
description: flutter
source: sdk
version: "0.0.99"
sliver_tools:
dependency: transitive
description:
name: sliver_tools
sha256: eae28220badfb9d0559207badcbbc9ad5331aac829a88cb0964d330d2a4636a6
url: "https://pub.dev"
source: hosted
version: "0.2.12"
source_gen:
dependency: transitive
description:

View File

@ -90,7 +90,10 @@ dependencies:
cached_network_image: ^3.4.0
url_launcher: ^6.3.0
infinite_scroll_pagination: ^4.0.0
animations: ^2.0.11
overlay_support: ^2.1.0
flutter_svg_provider: ^1.0.7
dev_dependencies:
@ -141,8 +144,10 @@ flutter:
- assets/contact.json
- assets/section.json
- assets/images/
- assets/icon/
- assets/introduction_animation/
- assets/response.json
- shorebird.yaml
# - shorebird.yaml
- assets/
# - assets/events.json
# - images/a_dot_ham.jpeg