Added UI Components for Marathon Module.. WIP

merge-requests/27/head
FaizHashmiCS22 3 years ago
parent 80a3d179eb
commit 5c848fec87

@ -0,0 +1,356 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="411" height="166" viewBox="0 0 411 166">
<defs>
<filter id="Rectangle_17686" x="0" y="0" width="404" height="166" filterUnits="userSpaceOnUse">
<feOffset input="SourceAlpha"/>
<feGaussianBlur stdDeviation="13" result="blur"/>
<feFlood flood-opacity="0.082"/>
<feComposite operator="in" in2="blur"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="Rectangle_17368" x="0" y="0" width="411" height="166" filterUnits="userSpaceOnUse">
<feOffset input="SourceAlpha"/>
<feGaussianBlur stdDeviation="13" result="blur-2"/>
<feFlood flood-opacity="0.082"/>
<feComposite operator="in" in2="blur-2"/>
<feComposite in="SourceGraphic"/>
</filter>
<clipPath id="clip-path">
<rect id="Rectangle_17622" data-name="Rectangle 17622" width="113.78" height="88.523" transform="translate(0 4)" fill="none"/>
</clipPath>
<clipPath id="clip-path-2">
<rect id="Rectangle_17530" data-name="Rectangle 17530" width="139.781" height="112.186" fill="none"/>
</clipPath>
<clipPath id="clip-path-5">
<rect id="Rectangle_17532" data-name="Rectangle 17532" width="54.986" height="20.029" fill="none"/>
</clipPath>
<clipPath id="clip-path-7">
<rect id="Rectangle_17534" data-name="Rectangle 17534" width="53.565" height="20.029" fill="none"/>
</clipPath>
<clipPath id="clip-path-16">
<rect id="Rectangle_17611" data-name="Rectangle 17611" width="3.17" height="3.078" fill="none"/>
</clipPath>
<clipPath id="clip-path-17">
<rect id="Rectangle_17612" data-name="Rectangle 17612" width="24.935" height="20.245" fill="none"/>
</clipPath>
<clipPath id="clip-path-18">
<rect id="Rectangle_17613" data-name="Rectangle 17613" width="3.055" height="3.482" fill="none"/>
</clipPath>
<clipPath id="clip-path-19">
<rect id="Rectangle_17614" data-name="Rectangle 17614" width="28.702" height="40.403" fill="none"/>
</clipPath>
<clipPath id="clip-path-20">
<rect id="Rectangle_17615" data-name="Rectangle 17615" width="5.095" height="7.494" fill="none"/>
</clipPath>
<clipPath id="clip-path-21">
<rect id="Rectangle_17616" data-name="Rectangle 17616" width="2.545" height="2.051" fill="none"/>
</clipPath>
<clipPath id="clip-path-22">
<rect id="Rectangle_17617" data-name="Rectangle 17617" width="10.274" height="13.454" fill="none"/>
</clipPath>
<clipPath id="clip-path-24">
<rect id="Rectangle_17619" data-name="Rectangle 17619" width="6.621" height="5.261" fill="none"/>
</clipPath>
<clipPath id="clip-path-25">
<rect id="Rectangle_17620" data-name="Rectangle 17620" width="61.469" height="15.006" fill="none"/>
</clipPath>
<clipPath id="clip-path-26">
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Rectangle_17686)">
<rect id="Rectangle_17686-2" data-name="Rectangle 17686" width="326" height="88" rx="15" transform="translate(1)" fill="#fff"/>
</g>
</clipPath>
<clipPath id="clip-path-27">
<rect id="Rectangle_17685" data-name="Rectangle 17685" width="111.63" height="31.894" transform="translate(0 0)" fill="none"/>
</clipPath>
</defs>
<g id="Group_8897" data-name="Group 8897" transform="translate(18 -283)">
<g id="Group_8890" data-name="Group 8890" transform="translate(20 317.477)">
<g id="Group_8745" data-name="Group 8745">
<g transform="matrix(1, 0, 0, 1, -38, -34.48)" filter="url(#Rectangle_17368)">
<rect id="Rectangle_17368-2" data-name="Rectangle 17368" width="333" height="88" rx="15" transform="translate(39 39)" fill="#fff"/>
</g>
<g id="Group_8889" data-name="Group 8889" transform="translate(1)">
<g id="Group_8874" data-name="Group 8874" clip-path="url(#clip-path)">
<rect id="Rectangle_17517" data-name="Rectangle 17517" width="139.781" height="0.075" transform="translate(-14 80.757)" fill="#ebebeb"/>
<rect id="Rectangle_17518" data-name="Rectangle 17518" width="9.26" height="0.075" transform="translate(102.515 85.603)" fill="#ebebeb"/>
<rect id="Rectangle_17519" data-name="Rectangle 17519" width="2.43" height="0.075" transform="translate(76.166 86.42)" fill="#ebebeb"/>
<rect id="Rectangle_17520" data-name="Rectangle 17520" width="5.365" height="0.075" transform="translate(96.87 82.807)" fill="#ebebeb"/>
<rect id="Rectangle_17521" data-name="Rectangle 17521" width="12.075" height="0.075" transform="translate(0.665 83.313)" fill="#ebebeb"/>
<rect id="Rectangle_17522" data-name="Rectangle 17522" width="1.77" height="0.075" transform="translate(15.229 83.313)" fill="#ebebeb"/>
<rect id="Rectangle_17523" data-name="Rectangle 17523" width="26.188" height="0.075" transform="translate(22.754 84.584)" fill="#ebebeb"/>
<g id="Group_8796" data-name="Group 8796" transform="translate(-14 -13.831)">
<g id="Group_8795" data-name="Group 8795" clip-path="url(#clip-path-2)">
<path id="Path_13974" data-name="Path 13974" d="M93.786,85.16H39.8a1.662,1.662,0,0,1-1.6-1.719V1.719A1.663,1.663,0,0,1,39.8,0H93.786a1.663,1.663,0,0,1,1.6,1.719V83.441a1.662,1.662,0,0,1-1.6,1.719M39.8.075a1.589,1.589,0,0,0-1.526,1.643V83.441A1.589,1.589,0,0,0,39.8,85.085H93.786a1.59,1.59,0,0,0,1.526-1.643V1.719A1.59,1.59,0,0,0,93.786.075Z" transform="translate(-27.526)" fill="#ebebeb"/>
<path id="Path_13975" data-name="Path 13975" d="M310.083,85.16H256.1a1.662,1.662,0,0,1-1.6-1.719V1.719A1.662,1.662,0,0,1,256.1,0h53.983a1.663,1.663,0,0,1,1.6,1.719V83.441a1.662,1.662,0,0,1-1.6,1.719M256.1.075a1.589,1.589,0,0,0-1.526,1.643V83.441a1.589,1.589,0,0,0,1.526,1.643h53.983a1.59,1.59,0,0,0,1.526-1.643V1.719A1.59,1.59,0,0,0,310.083.075Z" transform="translate(-183.355)" fill="#ebebeb"/>
<path id="Path_13976" data-name="Path 13976" d="M375.306,83.743l1.573-.7H389.2l2.8,5.96v1.567Z" transform="translate(-270.385 -58.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17524" data-name="Rectangle 17524" width="1.229" height="49.47" transform="translate(114.478 30.231)" fill="#e0e0e0"/>
<path id="Path_13977" data-name="Path 13977" d="M392.3,92.514H378.694l-3.123-6.829h13.605Z" transform="translate(-270.576 -59.887)" fill="#f0f0f0"/>
<path id="Path_13978" data-name="Path 13978" d="M383.558,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-274.439 -61.228)" fill="#fafafa"/>
<path id="Path_13979" data-name="Path 13979" d="M394.938,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-282.637 -61.228)" fill="#fafafa"/>
<path id="Path_13980" data-name="Path 13980" d="M406.318,88.875c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-290.836 -61.228)" fill="#fafafa"/>
<path id="Path_13981" data-name="Path 13981" d="M417.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-299.034 -61.228)" fill="#fafafa"/>
<path id="Path_13982" data-name="Path 13982" d="M388.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-278.13 -68.499)" fill="#fafafa"/>
<path id="Path_13983" data-name="Path 13983" d="M400.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-286.328 -68.499)" fill="#fafafa"/>
<path id="Path_13984" data-name="Path 13984" d="M411.442,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-294.527 -68.499)" fill="#fafafa"/>
<path id="Path_13985" data-name="Path 13985" d="M422.821,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-302.725 -68.499)" fill="#fafafa"/>
<path id="Path_13986" data-name="Path 13986" d="M106.306,83.743l1.573-.7H120.2l2.8,5.96v1.567Z" transform="translate(-76.587 -58.043)" fill="#e0e0e0"/>
<rect id="Rectangle_17525" data-name="Rectangle 17525" width="1.229" height="49.47" transform="translate(39.276 30.231)" fill="#e0e0e0"/>
<path id="Path_13987" data-name="Path 13987" d="M123.3,92.514H109.694l-3.123-6.829h13.605Z" transform="translate(-76.778 -59.887)" fill="#f0f0f0"/>
<path id="Path_13988" data-name="Path 13988" d="M114.558,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-80.641 -61.228)" fill="#fafafa"/>
<path id="Path_13989" data-name="Path 13989" d="M125.939,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-88.84 -61.228)" fill="#fafafa"/>
<path id="Path_13990" data-name="Path 13990" d="M137.318,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-97.037 -61.228)" fill="#fafafa"/>
<path id="Path_13991" data-name="Path 13991" d="M148.7,88.875c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-105.236 -61.228)" fill="#fafafa"/>
<path id="Path_13992" data-name="Path 13992" d="M119.681,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-84.332 -68.499)" fill="#fafafa"/>
<path id="Path_13993" data-name="Path 13993" d="M131.061,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-92.53 -68.499)" fill="#fafafa"/>
<path id="Path_13994" data-name="Path 13994" d="M142.441,99.278c.321.7.022,1.271-.667,1.271a2.248,2.248,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-100.729 -68.499)" fill="#fafafa"/>
<path id="Path_13995" data-name="Path 13995" d="M153.822,99.278c.321.7.022,1.271-.667,1.271a2.247,2.247,0,0,1-1.829-1.271c-.321-.7-.022-1.271.667-1.271a2.247,2.247,0,0,1,1.829,1.271" transform="translate(-108.928 -68.499)" fill="#fafafa"/>
<path id="Path_13996" data-name="Path 13996" d="M227.482,166.051H170.545v6.925h-7.227V180.2h-7.012v6.925h-7.288v22.882h78.464Z" transform="translate(-107.359 -116.056)" fill="#e0e0e0"/>
<rect id="Rectangle_17526" data-name="Rectangle 17526" width="48.83" height="6.254" transform="translate(63.186 50.666)" fill="#ebebeb"/>
<rect id="Rectangle_17527" data-name="Rectangle 17527" width="48.872" height="6.457" transform="translate(55.959 57.689)" fill="#ebebeb"/>
<rect id="Rectangle_17528" data-name="Rectangle 17528" width="48.849" height="6.358" transform="translate(48.948 64.712)" fill="#ebebeb"/>
<rect id="Rectangle_17529" data-name="Rectangle 17529" width="48.83" height="6.254" transform="translate(41.66 71.823)" fill="#ebebeb"/>
</g>
</g>
<g id="Group_8803" data-name="Group 8803" transform="translate(-14 -17.831)">
<g id="Group_8802" data-name="Group 8802" clip-path="url(#clip-path-2)">
<g id="Group_8801" data-name="Group 8801" transform="translate(17.645 78.597)" style="isolation: isolate">
<g id="Group_8800" data-name="Group 8800">
<g id="Group_8799" data-name="Group 8799" clip-path="url(#clip-path-5)">
<path id="Path_13998" data-name="Path 13998" d="M118.1,281.077H67.812l1.112-19.237,44.482-.792Z" transform="translate(-63.115 -261.048)" fill="#126055"/>
</g>
</g>
</g>
</g>
</g>
<path id="Path_13999" data-name="Path 13999" d="M101.091,261.048l-44.6,1.146-7.765,18.883h47.67Z" transform="translate(-47.216 -200.282)" fill="#407bff"/>
<g id="Group_8811" data-name="Group 8811" transform="translate(-14 -17.831)">
<g id="Group_8810" data-name="Group 8810" clip-path="url(#clip-path-2)">
<g id="Group_8806" data-name="Group 8806" transform="translate(14.31 78.597)" style="isolation: isolate">
<g id="Group_8805" data-name="Group 8805">
<g id="Group_8804" data-name="Group 8804" clip-path="url(#clip-path-7)">
<path id="Path_14000" data-name="Path 14000" d="M98.713,261.048l-44.552.705L46.1,281.076H94.22Z" transform="translate(-45.148 -261.048)" fill="#2bb8a6"/>
</g>
</g>
</g>
<g id="Group_8809" data-name="Group 8809" transform="translate(70.795 78.597)" style="isolation: isolate">
<g id="Group_8808" data-name="Group 8808">
<g id="Group_8807" data-name="Group 8807" clip-path="url(#clip-path-5)">
<path id="Path_14001" data-name="Path 14001" d="M308.221,281.077h-50.29l-4.7-20.029h50.29Z" transform="translate(-253.235 -261.048)" fill="#126055"/>
</g>
</g>
</g>
</g>
</g>
<path id="Path_14002" data-name="Path 14002" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-184.185 -200.282)" fill="#407bff"/>
<g id="Group_8816" data-name="Group 8816" transform="translate(-14 -17.831)">
<g id="Group_8815" data-name="Group 8815" clip-path="url(#clip-path-2)">
<g id="Group_8814" data-name="Group 8814" transform="translate(66.039 78.597)" style="isolation: isolate">
<g id="Group_8813" data-name="Group 8813">
<g id="Group_8812" data-name="Group 8812" clip-path="url(#clip-path-5)">
<path id="Path_14003" data-name="Path 14003" d="M291.211,261.048h-50.29l-4.7,20.029h50.29Z" transform="translate(-236.224 -261.048)" fill="#2bb8a6"/>
</g>
</g>
</g>
</g>
</g>
<g id="Group_8865" data-name="Group 8865" transform="translate(-14 -17.831)">
<g id="Group_8864" data-name="Group 8864" clip-path="url(#clip-path-2)">
<path id="Path_14006" data-name="Path 14006" d="M233.648,116.585a3.128,3.128,0,0,0-3.22-1.913c-2.516.25-4.939,3.663-7.222,2.961s-2-2.249-2-2.249-.839,2.227,2,4.095,6.7-2.849,9.921-1.444Z" transform="translate(-159.279 -80.134)" fill="#2e353a"/>
<path id="Path_14007" data-name="Path 14007" d="M240.7,114.478a4.2,4.2,0,0,0-3.5-2.829c-2.691-.226-4.263,3.437-6.325,2.829" transform="translate(-166.331 -78.027)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14008" data-name="Path 14008" d="M267.912,122.383s.956-4.252-2.358-5.11-4.805,1.234-5.364,3.55.851,5.538,3.85,5.006,3.751-2.438,3.871-3.446" transform="translate(-187.365 -81.827)" fill="#2e353a"/>
<path id="Path_14009" data-name="Path 14009" d="M288.639,115.829c2.724-1.365,6.3-4.351,6.235-5.439s-2.813-8.4-2.813-8.4a2.068,2.068,0,0,1-.631-.323c-.27-.218-.607-2.908-.2-3.054a11.433,11.433,0,0,1,2.093-.364c.337,0,.2,2.4.067,2.981,0,0,4.357,6.539,4.069,9.668s-7.04,8.572-9.4,9.341.585-4.41.585-4.41" transform="translate(-206.865 -68.668)" fill="#e4897b"/>
<path id="Path_14010" data-name="Path 14010" d="M186.8,270.838l.772-1.769,2.415.868,2.214.8-.6,2.261-2.542-1.142Z" transform="translate(-134.582 -188.057)" fill="#e4897b"/>
<path id="Path_14011" data-name="Path 14011" d="M177.621,264.516c.179.1-1.009,2.421-1.009,2.421a7.677,7.677,0,0,0-2.974,2.043c-.938,1.274-1.387.07-.688-1.531l1.728-3.96c.5-1.137,1.086.029,2.943,1.027" transform="translate(-124.355 -183.83)" fill="#2e353a"/>
<path id="Path_14012" data-name="Path 14012" d="M183.027,277.67a.233.233,0,0,1-.049-.005.242.242,0,0,1-.212-.178c-.078-.333.615-.966.755-1.089a.063.063,0,0,1,.027-.014h0s.008,0,.013,0a.076.076,0,0,1,.038.013h0s0,0,0,0h0l0,0h0a1.566,1.566,0,0,1,.434.873.417.417,0,0,1-.143.306c-.1.085-.181.106-.256.063-.114-.066-.157-.3-.168-.54a1.1,1.1,0,0,1-.289.51.261.261,0,0,1-.157.057m.435-1.034c-.293.283-.607.661-.57.817,0,.014.013.055.111.076a.132.132,0,0,0,.108-.029,1.8,1.8,0,0,0,.352-.863m.15-.021c-.03.419-.006.849.091.906.03.018.083-.023.112-.048a.277.277,0,0,0,.1-.2,1.2,1.2,0,0,0-.3-.654" transform="translate(-131.667 -193.169)" fill="#407bff"/>
<g id="Group_8845" data-name="Group 8845" transform="translate(54.432 81.856)" opacity="0.2" style="isolation: isolate">
<g id="Group_8844" data-name="Group 8844">
<g id="Group_8843" data-name="Group 8843" clip-path="url(#clip-path-16)">
<path id="Path_14013" data-name="Path 14013" d="M194.7,273.79l.934-1.916,2.236.811-.588,2.267Z" transform="translate(-194.704 -271.874)"/>
</g>
</g>
</g>
<path id="Path_14014" data-name="Path 14014" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524,4.342-10.438,4.342-10.438Z" transform="translate(-143.313 -164.853)" fill="#407bff"/>
<g id="Group_8848" data-name="Group 8848" transform="translate(55.612 71.015)" style="isolation: isolate">
<g id="Group_8847" data-name="Group 8847">
<g id="Group_8846" data-name="Group 8846" clip-path="url(#clip-path-17)">
<path id="Path_14015" data-name="Path 14015" d="M223.861,235.868c-1.012,4.721-5.537,20.832-12.57,20.228s-12.2-4.774-12.345-6.678.4-2.95,2.159-2.954,6.907,1.7,9.153,1.524,4.342-10.438,4.342-10.438Z" transform="translate(-198.925 -235.868)" fill="#157e8c"/>
</g>
</g>
</g>
<path id="Path_14016" data-name="Path 14016" d="M341.771,336.388l-1.666.776-1.276-2.372-1.168-2.178,1.839-1.267,1.2,2.668Z" transform="translate(-243.263 -231.585)" fill="#e4897b"/>
<path id="Path_14017" data-name="Path 14017" d="M344.957,348.294c-.075-.2,2.244-1.1,2.244-1.1a7.267,7.267,0,0,0,3.485.589c1.486-.286,1.082.937-.425,1.639l-3.729,1.736c-1.071.5-.8-.8-1.575-2.868" transform="translate(-248.519 -242.663)" fill="#2e353a"/>
<path id="Path_14018" data-name="Path 14018" d="M354.247,345.2a1.5,1.5,0,0,0-.169.026h-.038a.2.2,0,0,1-.058-.034v-.022a.028.028,0,0,0-.006-.02s.006-.011.006-.016h0c0-.009.013-.019.013-.029a1.661,1.661,0,0,1,.221-.963.365.365,0,0,1,.3-.127c.124,0,.2.05.233.135.044.131-.064.334-.2.524a.948.948,0,0,1,.531-.176.258.258,0,0,1,.187.108.3.3,0,0,1,.049.3c-.119.248-.739.3-1.065.3m.784-.567a1.708,1.708,0,0,0-.763.4c.393,0,.861-.062.929-.206.006-.013.024-.051-.037-.135a.135.135,0,0,0-.1-.055l-.03,0m-.525-.611c-.074,0-.135.092-.186.149a1.327,1.327,0,0,0-.177.735c.279-.292.526-.68.488-.792a.172.172,0,0,0-.113-.092Z" transform="translate(-255.017 -240.437)" fill="#407bff"/>
<g id="Group_8851" data-name="Group 8851" transform="translate(94.406 99.775)" opacity="0.2" style="isolation: isolate">
<g id="Group_8850" data-name="Group 8850">
<g id="Group_8849" data-name="Group 8849" clip-path="url(#clip-path-18)">
<path id="Path_14019" data-name="Path 14019" d="M340.75,334.1l-1.878.77-1.178-2.2,1.834-1.28Z" transform="translate(-337.695 -331.388)"/>
</g>
</g>
</g>
<path id="Path_14020" data-name="Path 14020" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.225,62.225,0,0,0,.383-8.972Z" transform="translate(-177.386 -143.118)" fill="#407bff"/>
<g id="Group_8854" data-name="Group 8854" transform="translate(68.833 61.652)" style="isolation: isolate">
<g id="Group_8853" data-name="Group 8853">
<g id="Group_8852" data-name="Group 8852" clip-path="url(#clip-path-19)">
<path id="Path_14021" data-name="Path 14021" d="M249.431,204.77s-3.9,6.256-3.1,10.916c.942,5.5,13.25,11.694,16.6,14.431s4.927,13.073,9.1,15.056l2.274-.878a5.739,5.739,0,0,0,.292-4.65c-3.631-12.285-6.636-18.156-16.666-25.512a62.225,62.225,0,0,0,.383-8.972Z" transform="translate(-246.219 -204.77)" fill="#1d92aa"/>
</g>
</g>
</g>
<path id="Path_14022" data-name="Path 14022" d="M278.512,244.82l-.559.217c-1.269-1.74-2.306-4.878-3.394-8.171-1.155-3.49-2.348-7.1-3.754-8.53a57.1,57.1,0,0,0-5.661-4.384c-5.13-3.712-10.948-7.918-11.336-10.484-.411-2.728.883-6.612,1.658-8.611l.6.027c-.735,1.876-2.105,5.844-1.7,8.488.349,2.306,6.559,6.8,11.093,10.08a57.033,57.033,0,0,1,5.737,4.447c1.5,1.532,2.664,5.043,3.894,8.764,1.062,3.213,2.158,6.527,3.427,8.156" transform="translate(-182.796 -143.179)" fill="#126055"/>
<g id="Group_8857" data-name="Group 8857" transform="translate(75.901 63.521)" opacity="0.1" style="isolation: isolate">
<g id="Group_8856" data-name="Group 8856">
<g id="Group_8855" data-name="Group 8855" clip-path="url(#clip-path-20)">
<path id="Path_14023" data-name="Path 14023" d="M276.146,218.472s-2.06-1.451-4.646-3.258l3.777,1.629a17.714,17.714,0,0,0,1.317-5.865c.034,3.146-.447,7.494-.447,7.494" transform="translate(-271.5 -210.978)"/>
</g>
</g>
</g>
<path id="Path_14024" data-name="Path 14024" d="M254.676,166.173l8.951.987a85.559,85.559,0,0,0,2.188-16.281,16.509,16.509,0,0,1-6.508.8,16.257,16.257,0,0,1-5.807-2.133,110.806,110.806,0,0,1,1.176,16.627" transform="translate(-182.631 -104.521)" fill="#2e353a"/>
<path id="Path_14025" data-name="Path 14025" d="M270.6,150.361a4.087,4.087,0,0,1-2.663-1.682c1.54-1.207.685-3.784.685-3.784l2.545.882a8.849,8.849,0,0,0-.242,1.168c-.222,1.7.492,1.816.492,1.816.348.986-.816,1.6-.816,1.6" transform="translate(-193.029 -101.27)" fill="#e4897b"/>
<g id="Group_8860" data-name="Group 8860" transform="translate(75.589 43.625)" opacity="0.2" style="isolation: isolate">
<g id="Group_8859" data-name="Group 8859">
<g id="Group_8858" data-name="Group 8858" clip-path="url(#clip-path-21)">
<path id="Path_14026" data-name="Path 14026" d="M272.928,145.777a8.851,8.851,0,0,0-.242,1.168,3.024,3.024,0,0,1-2.3-2.05Z" transform="translate(-270.383 -144.895)"/>
</g>
</g>
</g>
<path id="Path_14027" data-name="Path 14027" d="M269.361,121.076c2.282.178,2.928,1.551,2.925,4.1,0,3.181-.806,5.379-3.614,4.481-3.813-1.22-3.1-8.872.689-8.577" transform="translate(-191.738 -84.616)" fill="#e4897b"/>
<path id="Path_14028" data-name="Path 14028" d="M282.814,133.863a5.312,5.312,0,0,0,.6,1.071.61.61,0,0,1-.62.231Z" transform="translate(-203.732 -93.559)" fill="#de5753"/>
<path id="Path_14029" data-name="Path 14029" d="M276.76,131.956c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-199.062 -91.962)" fill="#2e353a"/>
<path id="Path_14030" data-name="Path 14030" d="M276.99,131.251l.416-.151s-.22.359-.416.151" transform="translate(-199.554 -91.628)" fill="#2e353a"/>
<path id="Path_14031" data-name="Path 14031" d="M285.117,132.224c-.009.2-.118.361-.243.354s-.219-.176-.21-.378.118-.361.243-.354.219.176.21.378" transform="translate(-205.082 -92.15)" fill="#2e353a"/>
<path id="Path_14032" data-name="Path 14032" d="M285.346,131.52l.416-.151s-.22.359-.416.151" transform="translate(-205.574 -91.816)" fill="#2e353a"/>
<path id="Path_14033" data-name="Path 14033" d="M275.641,127.141a1.127,1.127,0,0,0-1.015.294" transform="translate(-197.851 -88.846)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14034" data-name="Path 14034" d="M284.213,127.23a1.009,1.009,0,0,1,.9.273" transform="translate(-204.758 -88.909)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.696"/>
<path id="Path_14035" data-name="Path 14035" d="M277.4,139.972a6.506,6.506,0,0,0-.323.833c-.049-.008-.1-.016-.146-.026-.659-.124-.927-.416-1.024-.7a1,1,0,0,1-.037-.438.959.959,0,0,1,.059-.244,3.027,3.027,0,0,0,1.247.532c.137.033.224.046.224.046" transform="translate(-198.74 -97.425)" fill="#2e353a"/>
<path id="Path_14036" data-name="Path 14036" d="M277.2,139.926l-.1.243a1.926,1.926,0,0,1-1.2-.531.952.952,0,0,1,.059-.244,3.026,3.026,0,0,0,1.247.532" transform="translate(-198.765 -97.425)" fill="#fff"/>
<path id="Path_14037" data-name="Path 14037" d="M277.048,142.361c-.659-.124-.927-.416-1.024-.7a2.066,2.066,0,0,1,.707.294.86.86,0,0,1,.317.409" transform="translate(-198.858 -99.008)" fill="#de5753"/>
<path id="Path_14038" data-name="Path 14038" d="M265.157,122.691a7.738,7.738,0,0,0,1.146-3.507s4.656-1.637,4.547,3.323c0,0,.737-4.355-3.179-4.758s-4.315,5.778-2.413,7.778a3.252,3.252,0,0,1-.1-2.835" transform="translate(-190.307 -82.283)" fill="#2e353a"/>
<path id="Path_14039" data-name="Path 14039" d="M264.724,133.543a1.048,1.048,0,0,0-1.011-1.069c-.713.028-1.155,1.565.579,2.078.249.074.409-.181.432-1.009" transform="translate(-189.536 -92.588)" fill="#e4897b"/>
<path id="Path_14040" data-name="Path 14040" d="M237.873,107.488a8.912,8.912,0,0,1,.736,6.06s-6.188-7.417-6.747-9.109,3.469-11.327,3.469-11.327a9.2,9.2,0,0,1-.533-2.484c.14-.452,1.887-1.505,2.306-1.2s.28,3.613.07,4.065l-.21.452s-2.154,8.725-1.881,9.368,2.789,4.18,2.789,4.18" transform="translate(-167.005 -62.462)" fill="#e4897b"/>
<path id="Path_14041" data-name="Path 14041" d="M267.432,119.779s-2.449,3.95-5.7,3.317c0,0-.159-2.991,2.016-3.648a4.62,4.62,0,0,1,3.683.33" transform="translate(-188.561 -83.327)" fill="#2e353a"/>
<path id="Path_14042" data-name="Path 14042" d="M276.032,121.068s1.02,1.65-1.759,2.741" transform="translate(-197.597 -84.617)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14043" data-name="Path 14043" d="M284.369,119.5s1.17,1.158,1.656-.5" transform="translate(-204.87 -83.169)" fill="none" stroke="#263238" stroke-linecap="round" stroke-linejoin="round" stroke-width="0.48"/>
<path id="Path_14044" data-name="Path 14044" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.047,16.047,0,0,0-2.78.416l.226.452a32.211,32.211,0,0,1,5.022-.216l3.113.306a15.805,15.805,0,0,1,1.66.374" transform="translate(-184.612 -106.953)" fill="#407bff"/>
<g id="Group_8863" data-name="Group 8863" transform="translate(71.638 46.074)" style="isolation: isolate">
<g id="Group_8862" data-name="Group 8862">
<g id="Group_8861" data-name="Group 8861" clip-path="url(#clip-path-22)">
<path id="Path_14045" data-name="Path 14045" d="M266.271,166.48l.253-.464s-.312-.1-.854-.235c.227-1.683.93-8.052-.785-12.184l-.318.263a8.484,8.484,0,0,1,.874,3.876l-5.924-.038s-.68-3.575-1.522-4.673l-.212.107a28.5,28.5,0,0,1,1.248,12.016,16.047,16.047,0,0,0-2.78.416l.226.452a32.211,32.211,0,0,1,5.022-.216l3.113.306a15.805,15.805,0,0,1,1.66.374" transform="translate(-256.25 -153.026)" fill="#fff"/>
</g>
</g>
</g>
<path id="Path_14046" data-name="Path 14046" d="M274.7,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.675.675,0,0,0,.089-.409v-.771a.636.636,0,0,1-1.082.126,1.256,1.256,0,0,1-.171-.717v-.771a1.156,1.156,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.47.47,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-196.557 -121.255)" fill="#125765"/>
<path id="Path_14047" data-name="Path 14047" d="M282.617,176.706a1.261,1.261,0,0,1-.229.816.864.864,0,0,1-.71.28.848.848,0,0,1-.685-.274,1.184,1.184,0,0,1-.232-.786v-.108h.582v.15a.471.471,0,0,0,.087.322.3.3,0,0,0,.232.093.308.308,0,0,0,.252-.108.674.674,0,0,0,.09-.409v-.771a.636.636,0,0,1-1.082.126,1.257,1.257,0,0,1-.171-.717v-.771a1.156,1.156,0,0,1,.24-.786,1.014,1.014,0,0,1,1.387,0,1.156,1.156,0,0,1,.24.786Zm-.934-1.024a.3.3,0,0,0,.232-.094.469.469,0,0,0,.087-.322v-.759a.459.459,0,0,0-.087-.319.343.343,0,0,0-.464,0,.459.459,0,0,0-.087.319v.759a.469.469,0,0,0,.087.322.3.3,0,0,0,.232.094" transform="translate(-202.263 -121.255)" fill="#125765"/>
</g>
</g>
<g id="Group_8873" data-name="Group 8873" transform="translate(-14 -17.831)">
<g id="Group_8872" data-name="Group 8872" clip-path="url(#clip-path-2)">
<path id="Path_14048" data-name="Path 14048" d="M335.17,173.594a35.718,35.718,0,0,0-24.292-.479c-3.483,1.135-7.173,2.571-10.74,3.962q-1.448.564-2.9,1.126c-.542.209-1.5.615-1.581,1.194l.877,2.27c1.8-.674,2.709-1.04,4.557-1.76,3.534-1.376,7.19-2.8,10.6-3.911a34.29,34.29,0,0,1,20.62-.271l.763-.527-.372-.7h1.026l-1.026-.9h2.469Z" transform="translate(-213.001 -119.689)" fill="#2bb8a6"/>
<path id="Path_14049" data-name="Path 14049" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-212.998 -135.875)" fill="#407bff"/>
<g id="Group_8868" data-name="Group 8868" transform="translate(82.653 58.532)" style="isolation: isolate">
<g id="Group_8867" data-name="Group 8867">
<g id="Group_8866" data-name="Group 8866" clip-path="url(#clip-path-24)">
<path id="Path_14050" data-name="Path 14050" d="M295.981,198.514s4.729.235,6.243,1.154l.047-2.47s-.022-.151-.452-.161c-1.46-.032-4.659-.34-5.414-.763-1.717-.963.781-1.868.781-1.868s-1.578.532-1.535,1.176a10.421,10.421,0,0,1,.33,2.931" transform="translate(-295.651 -194.407)" fill="#126055"/>
</g>
</g>
</g>
<g id="Group_8871" data-name="Group 8871" transform="translate(28.236 50.054)" style="isolation: isolate">
<g id="Group_8870" data-name="Group 8870">
<g id="Group_8869" data-name="Group 8869" clip-path="url(#clip-path-25)">
<path id="Path_14051" data-name="Path 14051" d="M162.458,180.077a.486.486,0,0,1-.308.569,14.681,14.681,0,0,1-4.38.608c-6.352,0-14.316-3.1-22.642-6.347-3.534-1.376-7.19-2.8-10.6-3.911a34.288,34.288,0,0,0-20.62-.271l-.763-.527.372-.7H102.49l1.026-.9H101v0a35.8,35.8,0,0,1,24.316-.479c3.483,1.135,7.185,2.572,10.752,3.962,9.673,3.77,20.479,7,25.608,5.573.328-.092.3-.186.212-.237a.369.369,0,0,0-.136-.042c.248.015.294.12.3.216a21.119,21.119,0,0,0,.409,2.491" transform="translate(-101 -166.248)" fill="#2bb8a6"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="Mask_Group_6" data-name="Mask Group 6" transform="translate(0 4.523)" clip-path="url(#clip-path-26)">
<g id="Group_8886" data-name="Group 8886" transform="matrix(0.309, -0.951, 0.951, 0.309, 84.633, 96.705)">
<g id="Group_8885" data-name="Group 8885" transform="translate(0)" clip-path="url(#clip-path-27)">
<rect id="Rectangle_17623" data-name="Rectangle 17623" width="111.63" height="31.894" transform="translate(0 0)" fill="#407bff"/>
<g id="Group_8879" data-name="Group 8879" transform="translate(0 0)">
<g id="Group_8878" data-name="Group 8878" clip-path="url(#clip-path-27)">
<g id="Group_8877" data-name="Group 8877" transform="translate(0 0)" style="isolation: isolate">
<g id="Group_8876" data-name="Group 8876" transform="translate(0)">
<g id="Group_8875" data-name="Group 8875" clip-path="url(#clip-path-27)">
<rect id="Rectangle_17624" data-name="Rectangle 17624" width="111.63" height="31.894" transform="translate(0 0)" fill="#fff"/>
</g>
</g>
</g>
</g>
</g>
<rect id="Rectangle_17627" data-name="Rectangle 17627" width="7.973" height="7.973" transform="translate(0 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17628" data-name="Rectangle 17628" width="7.973" height="7.973" transform="translate(0 7.974)" fill="#2e353a"/>
<rect id="Rectangle_17629" data-name="Rectangle 17629" width="7.974" height="7.974" transform="translate(7.974 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17630" data-name="Rectangle 17630" width="7.973" height="7.973" transform="translate(15.947 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17631" data-name="Rectangle 17631" width="7.974" height="7.973" transform="translate(7.973 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17632" data-name="Rectangle 17632" width="7.974" height="7.974" transform="translate(15.947 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17633" data-name="Rectangle 17633" width="7.974" height="7.974" transform="translate(23.921 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17634" data-name="Rectangle 17634" width="7.974" height="7.973" transform="translate(31.894 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17635" data-name="Rectangle 17635" width="7.973" height="7.973" transform="translate(23.921 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17636" data-name="Rectangle 17636" width="7.974" height="7.974" transform="translate(31.894 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17637" data-name="Rectangle 17637" width="7.974" height="7.974" transform="translate(39.868 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17638" data-name="Rectangle 17638" width="7.973" height="7.973" transform="translate(47.842 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17639" data-name="Rectangle 17639" width="7.974" height="7.973" transform="translate(39.868 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17640" data-name="Rectangle 17640" width="7.974" height="7.974" transform="translate(47.842 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17641" data-name="Rectangle 17641" width="7.974" height="7.974" transform="translate(55.815 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17642" data-name="Rectangle 17642" width="7.974" height="7.973" transform="translate(63.789 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17643" data-name="Rectangle 17643" width="7.974" height="7.973" transform="translate(55.815 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17644" data-name="Rectangle 17644" width="7.974" height="7.974" transform="translate(63.788 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17645" data-name="Rectangle 17645" width="7.974" height="7.974" transform="translate(71.762 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17646" data-name="Rectangle 17646" width="7.974" height="7.973" transform="translate(79.736 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17647" data-name="Rectangle 17647" width="7.973" height="7.973" transform="translate(71.762 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17648" data-name="Rectangle 17648" width="7.974" height="7.974" transform="translate(79.736 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17649" data-name="Rectangle 17649" width="7.974" height="7.974" transform="translate(87.71 15.947)" fill="#2e353a"/>
<rect id="Rectangle_17650" data-name="Rectangle 17650" width="7.973" height="7.973" transform="translate(95.683 23.921)" fill="#2e353a"/>
<rect id="Rectangle_17651" data-name="Rectangle 17651" width="7.973" height="7.973" transform="translate(87.71 0.001)" fill="#2e353a"/>
<rect id="Rectangle_17652" data-name="Rectangle 17652" width="7.974" height="7.974" transform="translate(95.683 7.973)" fill="#2e353a"/>
<rect id="Rectangle_17653" data-name="Rectangle 17653" width="7.974" height="7.974" transform="translate(103.656 15.948)" fill="#2e353a"/>
<rect id="Rectangle_17654" data-name="Rectangle 17654" width="7.974" height="7.973" transform="translate(103.656 0.001)" fill="#2e353a"/>
<g id="Group_8884" data-name="Group 8884" transform="translate(0 0)">
<g id="Group_8883" data-name="Group 8883" clip-path="url(#clip-path-27)">
<g id="Group_8882" data-name="Group 8882" transform="translate(0 0)" opacity="0.1" style="isolation: isolate">
<g id="Group_8881" data-name="Group 8881" transform="translate(0)">
<g id="Group_8880" data-name="Group 8880" clip-path="url(#clip-path-27)">
<rect id="Rectangle_17655" data-name="Rectangle 17655" width="7.974" height="7.974" transform="translate(0 23.921)" fill="#fff"/>
<rect id="Rectangle_17656" data-name="Rectangle 17656" width="7.974" height="7.974" transform="translate(0 7.973)" fill="#fff"/>
<rect id="Rectangle_17657" data-name="Rectangle 17657" width="7.974" height="7.974" transform="translate(7.974 15.947)" fill="#fff"/>
<rect id="Rectangle_17658" data-name="Rectangle 17658" width="7.974" height="7.974" transform="translate(15.947 23.921)" fill="#fff"/>
<rect id="Rectangle_17659" data-name="Rectangle 17659" width="7.974" height="7.974" transform="translate(7.974 0)" fill="#fff"/>
<rect id="Rectangle_17660" data-name="Rectangle 17660" width="7.974" height="7.974" transform="translate(15.947 7.973)" fill="#fff"/>
<rect id="Rectangle_17661" data-name="Rectangle 17661" width="7.974" height="7.974" transform="translate(23.921 15.947)" fill="#fff"/>
<rect id="Rectangle_17662" data-name="Rectangle 17662" width="7.974" height="7.974" transform="translate(31.894 23.921)" fill="#fff"/>
<rect id="Rectangle_17663" data-name="Rectangle 17663" width="7.974" height="7.974" transform="translate(23.921 0)" fill="#fff"/>
<rect id="Rectangle_17664" data-name="Rectangle 17664" width="7.974" height="7.974" transform="translate(31.894 7.973)" fill="#fff"/>
<rect id="Rectangle_17665" data-name="Rectangle 17665" width="7.974" height="7.974" transform="translate(39.868 15.947)" fill="#fff"/>
<rect id="Rectangle_17666" data-name="Rectangle 17666" width="7.974" height="7.974" transform="translate(47.842 23.921)" fill="#fff"/>
<rect id="Rectangle_17667" data-name="Rectangle 17667" width="7.974" height="7.974" transform="translate(39.868 0)" fill="#fff"/>
<rect id="Rectangle_17668" data-name="Rectangle 17668" width="7.974" height="7.974" transform="translate(47.842 7.973)" fill="#fff"/>
<rect id="Rectangle_17669" data-name="Rectangle 17669" width="7.974" height="7.974" transform="translate(55.815 15.947)" fill="#fff"/>
<rect id="Rectangle_17670" data-name="Rectangle 17670" width="7.974" height="7.974" transform="translate(63.788 23.921)" fill="#fff"/>
<rect id="Rectangle_17671" data-name="Rectangle 17671" width="7.974" height="7.974" transform="translate(55.815 0)" fill="#fff"/>
<rect id="Rectangle_17672" data-name="Rectangle 17672" width="7.974" height="7.974" transform="translate(63.788 7.973)" fill="#fff"/>
<rect id="Rectangle_17673" data-name="Rectangle 17673" width="7.974" height="7.974" transform="translate(71.762 15.947)" fill="#fff"/>
<rect id="Rectangle_17674" data-name="Rectangle 17674" width="7.974" height="7.974" transform="translate(79.736 23.921)" fill="#fff"/>
<rect id="Rectangle_17675" data-name="Rectangle 17675" width="7.974" height="7.974" transform="translate(71.762 0)" fill="#fff"/>
<rect id="Rectangle_17676" data-name="Rectangle 17676" width="7.974" height="7.974" transform="translate(79.736 7.973)" fill="#fff"/>
<rect id="Rectangle_17677" data-name="Rectangle 17677" width="7.974" height="7.974" transform="translate(87.71 15.947)" fill="#fff"/>
<rect id="Rectangle_17678" data-name="Rectangle 17678" width="7.974" height="7.974" transform="translate(95.683 23.921)" fill="#fff"/>
<rect id="Rectangle_17679" data-name="Rectangle 17679" width="7.974" height="7.974" transform="translate(87.71 0)" fill="#fff"/>
<rect id="Rectangle_17680" data-name="Rectangle 17680" width="7.974" height="7.974" transform="translate(95.683 7.973)" fill="#fff"/>
<rect id="Rectangle_17681" data-name="Rectangle 17681" width="7.974" height="7.974" transform="translate(103.656 15.947)" fill="#fff"/>
<rect id="Rectangle_17682" data-name="Rectangle 17682" width="7.974" height="7.974" transform="translate(103.656 0)" fill="#fff"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="Path_13973" data-name="Path 13973" d="M-122.029,0,65.261-.222a15,15,0,0,1,15,15v58a15,15,0,0,1-15,15L-150.883,88Z" transform="translate(254 4.523)" fill="#125765"/>
</g>
</g>
<g id="light-bulb" transform="translate(272.396 326.738)" opacity="0.09">
<path id="XMLID_49_" d="M52.08,62.218V64.3a3.3,3.3,0,0,1-2.8,3.267l-.513,1.89A2.352,2.352,0,0,1,46.5,71.2H41.415a2.352,2.352,0,0,1-2.271-1.743l-.5-1.89a3.314,3.314,0,0,1-2.813-3.282V62.2A2,2,0,0,1,37.84,60.2H50.073A2.023,2.023,0,0,1,52.08,62.218Zm9.42-28.04a17.452,17.452,0,0,1-4.922,12.174,16.084,16.084,0,0,0-4.307,8.731A2.9,2.9,0,0,1,49.4,57.53H38.514A2.872,2.872,0,0,1,35.657,55.1a16.263,16.263,0,0,0-4.336-8.761A17.538,17.538,0,1,1,61.5,34.178ZM45.942,23.557a1.979,1.979,0,0,0-1.978-1.978A12.67,12.67,0,0,0,31.306,34.237a1.978,1.978,0,1,0,3.955,0,8.713,8.713,0,0,1,8.7-8.7A1.97,1.97,0,0,0,45.942,23.557ZM43.964,10.885a1.979,1.979,0,0,0,1.978-1.978V1.978a1.978,1.978,0,0,0-3.955,0V8.907A1.979,1.979,0,0,0,43.964,10.885ZM20.685,34.164a1.979,1.979,0,0,0-1.978-1.978H11.778a1.978,1.978,0,0,0,0,3.955h6.929A1.97,1.97,0,0,0,20.685,34.164ZM76.15,32.186H69.22a1.978,1.978,0,0,0,0,3.955H76.15a1.978,1.978,0,0,0,0-3.955ZM24.714,50.63l-4.908,4.908a1.973,1.973,0,0,0,2.783,2.8L27.5,53.428a1.973,1.973,0,1,0-2.783-2.8ZM61.822,18.283a1.975,1.975,0,0,0,1.392-.571L68.122,12.8a1.979,1.979,0,1,0-2.8-2.8l-4.908,4.908a1.972,1.972,0,0,0,0,2.8A2.009,2.009,0,0,0,61.822,18.283ZM24.714,17.7A1.973,1.973,0,1,0,27.5,14.9L22.589,9.991a1.979,1.979,0,0,0-2.8,2.8Zm38.5,32.933a1.979,1.979,0,0,0-2.8,2.8l4.908,4.908a1.973,1.973,0,0,0,2.784-2.8Z" fill="#fff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 44 KiB

@ -410,12 +410,12 @@
"infoDetail": "تفاصيل المعلومات",
"amount_detail": "تفاصيل المبلغ",
"currentBalance": "الرصيد الحالي",
"currentLeaveBalance" : "رصيد الاجازات الحالي",
"currentLeaveBalance": "رصيد الاجازات الحالي",
"calculatedDays": "الايام المحسوبه",
"totalDays": "مجموع الأيام",
"usedBalance": "المستخدم",
"infants":"رضيع",
"child":"طفل",
"infants": "رضيع",
"child": "طفل",
"adult": "بالغ",
"updateMember": "هل انت متأكد تريد تحديث بيانات هذا العضو؟",
"fieldIsEmpty": "'{data}' الحقل فارغ. الرجاء التحديد",
@ -451,8 +451,24 @@
"female": "Hello girl :) {}"
}
},
"reset_locale": "Reset Language",
"reset_locale": "إعادة ضبط اللغة",
"chat": "دردشة",
"mychats": "دردشاتي",
"createNewChat": "Create New Chat"
"createNewChat": "إنشاء محادثة جديدة",
"brainMarathon": "ماراثون الدماغ",
"contestTopicAbout": "سيكون موضوع المسابقة حول:",
"gameDate": "تاريخ اللعبة:",
"gameTime": "وقت اللعب:",
"joinMarathon": "انضم إلى ماراثون",
"joinDemoMarathon": "انضم إلى الماراثون التجريبي",
"minutes": "الدقائق",
"seconds": "ثواني",
"note": "ملحوظة:",
"demoMarathonNoteP1": "يمكنك لعب ماراثون العرض لتتعلم كيف يعمل. يمكنك الانضمام إلى ماراثون",
"demoMarathonNoteP2": "خمس دقائق",
"demoMarathonNoteP3": "قبل الوقت الفعلي.",
"sponsoredBy": "برعاية:",
"question": "سؤال",
"marathoners": "الماراثون"
}

@ -405,17 +405,17 @@
"addFavoriteList": "Do you want to add {name} in your favorite list",
"feedbackUserExperience": "This is to get the feedback about the user experience",
"rateUI": "1. How would you rate this UI?",
"submitSurvey":"Submit Survey",
"submitSurvey": "Submit Survey",
"typeHere": "Type here",
"infoDetail": "Info Detail",
"amount_detail": "Amount Detail",
"currentBalance": "Current Balance",
"currentLeaveBalance" : "Current Leave Balance",
"currentLeaveBalance": "Current Leave Balance",
"calculatedDays": "Calculated Days",
"totalDays": "Total Days",
"usedBalance": "Used",
"infants":"Infants",
"child":"Child",
"infants": "Infants",
"child": "Child",
"adult": "Adult",
"updateMember": "Are You Sure You Want to Update this Member?",
"fieldIsEmpty": "'{data}' Field is empty. Please select",
@ -454,5 +454,20 @@
"reset_locale": "Reset Language",
"chat": "Chat",
"mychats": "My Chats",
"createNewChat": "Create New Chat"
"createNewChat": "Create New Chat",
"brainMarathon": "Brain Marathon",
"contestTopicAbout": "Contest Topic will be about:",
"gameDate": "Game Date:",
"gameTime": "Game Time:",
"joinMarathon": "Join Marathon",
"joinDemoMarathon": "Join Demo Marathon",
"minutes": "Minutes",
"seconds": "Seconds",
"note": "Note:",
"demoMarathonNoteP1": "You can play the demo Marathon to learn how it works. You can join the Marathon",
"demoMarathonNoteP2": "5 Minutes",
"demoMarathonNoteP3": "before the actual time.",
"sponsoredBy": "Sponsored By:",
"question": "Question",
"marathoners": "Marathoners"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart';
class MyColors {
static const Color kWhiteColor = Color(0xffffffff);
static const Color darkIconColor = Color(0xff28323A);
static const Color darkTextColor = Color(0xff2B353E);
static const Color normalTextColor = Color(0xff5A5A5A);

@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
class MyDecorations {
static Decoration shadowDecoration= BoxDecoration(
color: MyColors.kWhiteColor,
borderRadius: BorderRadius.circular(15),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
);
}

@ -0,0 +1,6 @@
class MyLottieConsts {
static const String hourGlassLottie = "assets/lottie/hourglass.json";
static const String celebrate1Lottie = "assets/lottie/celebrate1.json";
static const String celebrate2Lottie = "assets/lottie/celebrate2.json";
static const String winnerLottie = "assets/lottie/winner3.json";
}

@ -16,6 +16,8 @@ import 'package:mohem_flutter_app/ui/login/login_screen.dart';
import 'package:mohem_flutter_app/ui/login/new_password_screen.dart';
import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart';
import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_intro_screen.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_screen.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
@ -110,7 +112,8 @@ class AppRoutes {
static const String addVacationRule = "/addVacationRule";
//Bottom Sheet
static const String attendanceDetailsBottomSheet = "/attendanceDetailsBottomSheet";
static const String attendanceDetailsBottomSheet =
"/attendanceDetailsBottomSheet";
//Profile
static const String profile = "/profile";
@ -128,7 +131,8 @@ class AppRoutes {
// Pending Transactions
static const String pendingTransactions = "/pendingTransactions";
static const String pendingTransactionsDetails = "/pendingTransactionsDetails";
static const String pendingTransactionsDetails =
"/pendingTransactionsDetails";
// Announcements
static const String announcements = "/announcements";
@ -154,7 +158,6 @@ class AppRoutes {
static const String performanceEvaluation = "/performanceEvaluation";
static const String endEmploymentScreen = "/endEmploymentScreen";
//My Team
@ -172,105 +175,118 @@ class AppRoutes {
static const String chat = "/chat";
static const String chatDetailed = "/chatDetailed";
//Marathon
static const String marathonIntroScreen = "/marathonIntroScreen";
static const String marathonScreen = "/marathonScreen";
static final Map<String, WidgetBuilder> routes = {
login: (context) => LoginScreen(),
verifyLogin: (context) => VerifyLoginScreen(),
verifyLastLogin: (context) => VerifyLastLoginScreen(),
dashboard: (context) => DashboardScreen(),
survey: (context) => SurveyScreen(),
subMenuScreen: (context) => SubMenuScreen(),
newPassword: (context) => NewPasswordScreen(),
forgotPassword: (context) => ForgotPasswordScreen(),
todayAttendance: (context) => TodayAttendanceScreen(),
login: (BuildContext context) => LoginScreen(),
verifyLogin: (BuildContext context) => VerifyLoginScreen(),
verifyLastLogin: (BuildContext context) => VerifyLastLoginScreen(),
dashboard: (BuildContext context) => DashboardScreen(),
survey: (BuildContext context) => SurveyScreen(),
subMenuScreen: (BuildContext context) => SubMenuScreen(),
newPassword: (BuildContext context) => NewPasswordScreen(),
forgotPassword: (BuildContext context) => ForgotPasswordScreen(),
todayAttendance: (BuildContext context) => TodayAttendanceScreen(),
//eit
addEitScreen: (context) => AddEITScreen(),
addEitScreen: (BuildContext context) => AddEITScreen(),
//Work List
workList: (context) => WorkListScreen(),
workListDetail: (context) => WorkListDetailScreen(),
itgDetail: (context) => ItgDetailScreen(),
itemHistory: (context) => ItemHistoryScreen(),
worklistSettings: (context) => WorklistSettings(),
workList: (BuildContext context) => WorkListScreen(),
workListDetail: (BuildContext context) => WorkListDetailScreen(),
itgDetail: (BuildContext context) => ItgDetailScreen(),
itemHistory: (BuildContext context) => ItemHistoryScreen(),
worklistSettings: (BuildContext context) => WorklistSettings(),
// Leave Balance
leaveBalance: (context) => LeaveBalance(),
addLeaveBalance: (context) => AddLeaveBalanceScreen(),
leaveBalance: (BuildContext context) => LeaveBalance(),
addLeaveBalance: (BuildContext context) => AddLeaveBalanceScreen(),
servicesMenuListScreen: (context) => ServicesMenuListScreen(),
// workFromHome: (context) => WorkFromHomeScreen(),
// addWorkFromHome: (context) => AddWorkFromHomeScreen(),
profile: (context) => ProfileScreen(),
servicesMenuListScreen: (BuildContext context) => ServicesMenuListScreen(),
// workFromHome: (BuildContext context) => WorkFromHomeScreen(),
// addWorkFromHome: (BuildContext context) => AddWorkFromHomeScreen(),
profile: (BuildContext context) => ProfileScreen(),
//Attendance
monthlyAttendance: (context) => MonthlyAttendanceScreen(),
vacationRule: (context) => VacationRuleScreen(),
addVacationRule: (context) => AddVacationRuleScreen(),
monthlyAttendance: (BuildContext context) => MonthlyAttendanceScreen(),
vacationRule: (BuildContext context) => VacationRuleScreen(),
addVacationRule: (BuildContext context) => AddVacationRuleScreen(),
//Bottom Sheet
attendanceDetailsBottomSheet: (context) => AttendenceDetailsBottomSheet(),
attendanceDetailsBottomSheet: (BuildContext context) =>
AttendenceDetailsBottomSheet(),
//Profile
//profile: (context) => Profile(),
//profile: (context) => Profile(),
personalInfo: (context) => PersonalInfo(),
basicDetails: (context) => BasicDetails(),
contactDetails: (context) => ContactDetails(),
familyMembers: (context) => FamilyMembers(),
dynamicScreen: (context) => DynamicListViewScreen(),
addDynamicInput: (context) => DynamicInputScreen(),
addDynamicInputProfile: (context) => DynamicInputScreenProfile(),
addDynamicAddressScreen: (context) => DynamicInputScreenAddress(),
deleteFamilyMember: (context) => DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int),
requestSubmitScreen: (context) => RequestSubmitScreen(),
addUpdateFamilyMember: (context) => AddUpdateFamilyMember(),
//profile: (BuildContext context) => Profile(),
//profile: (BuildContext context) => Profile(),
personalInfo: (BuildContext context) => PersonalInfo(),
basicDetails: (BuildContext context) => BasicDetails(),
contactDetails: (BuildContext context) => ContactDetails(),
familyMembers: (BuildContext context) => FamilyMembers(),
dynamicScreen: (BuildContext context) => DynamicListViewScreen(),
addDynamicInput: (BuildContext context) => DynamicInputScreen(),
addDynamicInputProfile: (BuildContext context) =>
DynamicInputScreenProfile(),
addDynamicAddressScreen: (BuildContext context) =>
DynamicInputScreenAddress(),
deleteFamilyMember: (BuildContext context) =>
DeleteFamilyMember(ModalRoute.of(context)!.settings.arguments as int),
requestSubmitScreen: (BuildContext context) => RequestSubmitScreen(),
addUpdateFamilyMember: (BuildContext context) => AddUpdateFamilyMember(),
//mowadhafhi
mowadhafhi: (context) => MowadhafhiHome(),
mowadhafhiDetails: (context) => MowadhafhiRequestDetails(),
mowadhafhiHRRequest: (context) => MowadhafhiHRRequest(),
mowadhafhi: (BuildContext context) => MowadhafhiHome(),
mowadhafhiDetails: (BuildContext context) => MowadhafhiRequestDetails(),
mowadhafhiHRRequest: (BuildContext context) => MowadhafhiHRRequest(),
pendingTransactions: (context) => PendingTransactions(),
pendingTransactionsDetails: (context) => PendingTransactionsDetails(),
pendingTransactions: (BuildContext context) => PendingTransactions(),
pendingTransactionsDetails: (BuildContext context) =>
PendingTransactionsDetails(),
announcements: (context) => Announcements(),
announcementsDetails: (context) => AnnouncementDetails(),
announcements: (BuildContext context) => Announcements(),
announcementsDetails: (BuildContext context) => AnnouncementDetails(),
//My Requests
myRequests: (context) => MyRequests(),
newRequest: (context) => NewRequest(),
myRequests: (BuildContext context) => MyRequests(),
newRequest: (BuildContext context) => NewRequest(),
// Items for sale
itemsForSale: (context) => ItemsForSale(),
itemsForSaleDetail: (context) => ItemForSaleDetailPage(),
addNewItemForSale: (context) => AddNewItemForSale(),
itemsForSale: (BuildContext context) => ItemsForSale(),
itemsForSaleDetail: (BuildContext context) => ItemForSaleDetailPage(),
addNewItemForSale: (BuildContext context) => AddNewItemForSale(),
// Offers & Discounts
offersAndDiscounts: (context) => OffersAndDiscountsHome(),
offersAndDiscountsDetails: (context) => OffersAndDiscountsDetails(),
offersAndDiscounts: (BuildContext context) => OffersAndDiscountsHome(),
offersAndDiscountsDetails: (BuildContext context) =>
OffersAndDiscountsDetails(),
//pay slip
monthlyPaySlip: (context) => MonthlyPaySlipScreen(),
performanceEvaluation: (context) => PerformanceAppraisal(),
monthlyPaySlip: (BuildContext context) => MonthlyPaySlipScreen(),
performanceEvaluation: (BuildContext context) => PerformanceAppraisal(),
endEmploymentScreen: (context) => EndEmploymentScreen(),
endEmploymentScreen: (BuildContext context) => EndEmploymentScreen(),
//My Team
myTeam: (context) => MyTeam(),
employeeDetails: (context) => EmployeeDetails(),
profileDetails: (context) => ProfileDetails(),
viewAttendance: (context) => ViewAttendance(),
teamMembers: (context) => TeamMembers(),
createRequest: (context) => CreateRequest(),
subordinateLeave: (context) => SubordinateLeave(),
myTeam: (BuildContext context) => MyTeam(),
employeeDetails: (BuildContext context) => EmployeeDetails(),
profileDetails: (BuildContext context) => ProfileDetails(),
viewAttendance: (BuildContext context) => ViewAttendance(),
teamMembers: (BuildContext context) => TeamMembers(),
createRequest: (BuildContext context) => CreateRequest(),
subordinateLeave: (BuildContext context) => SubordinateLeave(),
changePassword: (context) => ChangePasswordScreen(),
changePassword: (BuildContext context) => ChangePasswordScreen(),
//Chat
chat: (context) => ChatHomeScreen(),
chatDetailed: (context) => ChatDetailScreen(),
chat: (BuildContext context) => ChatHomeScreen(),
chatDetailed: (BuildContext context) => ChatDetailScreen(),
// Marathon
marathonIntroScreen: (BuildContext context) => MarathonIntroScreen(),
marathonScreen: (BuildContext context) => MarathonScreen(),
};
}

@ -12,12 +12,21 @@ extension WidgetExtensions on Widget {
Widget get center => Center(child: this);
Widget circle(double _value) => ClipRRect(borderRadius: BorderRadius.circular(_value), child: this);
Widget circle(double _value) =>
ClipRRect(borderRadius: BorderRadius.circular(_value), child: this);
Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this);
Widget paddingAll(double _value) =>
Padding(padding: EdgeInsets.all(_value), child: this);
Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) =>
Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this);
Widget paddingOnly(
{double left = 0.0,
double right = 0.0,
double top = 0.0,
double bottom = 0.0}) =>
Padding(
padding: EdgeInsets.only(
left: left, right: right, top: top, bottom: bottom),
child: this);
Widget toShimmer({bool isShow = true}) => isShow
? Shimmer.fromColors(
@ -42,9 +51,15 @@ extension WidgetExtensions on Widget {
child: this,
);
Widget objectContainerView({String title = "", String note = "", bool disablePadding = false, double radius = 15}) {
Widget objectContainerView(
{String title = "",
String note = "",
bool disablePadding = false,
double radius = 15}) {
return Container(
padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
padding: disablePadding
? EdgeInsets.zero
: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(radius),
@ -55,7 +70,8 @@ extension WidgetExtensions on Widget {
offset: const Offset(0, -3),
),
],
),alignment: Alignment.center,
),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
@ -69,9 +85,19 @@ extension WidgetExtensions on Widget {
);
}
Widget objectContainerBorderView({String title = "", String note = "", bool disablePadding = false, double radius = 15, Color? color, Color borderColor = MyColors.lightGreyEFColor,bool disableWidth = false,bool isAlignment = false }) {
Widget objectContainerBorderView(
{String title = "",
String note = "",
bool disablePadding = false,
double radius = 15,
Color? color,
Color borderColor = MyColors.lightGreyEFColor,
bool disableWidth = false,
bool isAlignment = false}) {
return Container(
padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
padding: disablePadding
? EdgeInsets.zero
: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(radius),
color: color,
@ -80,7 +106,7 @@ extension WidgetExtensions on Widget {
width: disableWidth ? 2 : 1,
),
),
alignment: isAlignment? Alignment.center : null,
alignment: isAlignment ? Alignment.center : null,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,

@ -441,5 +441,20 @@ abstract class LocaleKeys {
static const chat = 'chat';
static const mychats = 'mychats';
static const createNewChat = 'createNewChat';
static const brainMarathon = 'brainMarathon';
static const contestTopicAbout = 'contestTopicAbout';
static const gameDate = 'gameDate';
static const gameTime = 'gameTime';
static const joinMarathon = 'joinMarathon';
static const joinDemoMarathon = 'joinDemoMarathon';
static const minutes = 'minutes';
static const seconds = 'seconds';
static const note = 'note';
static const demoMarathonNoteP1 = 'demoMarathonNoteP1';
static const demoMarathonNoteP2 = 'demoMarathonNoteP2';
static const demoMarathonNoteP3 = 'demoMarathonNoteP3';
static const sponsoredBy = 'sponsoredBy';
static const question = 'question';
static const marathoners = 'marathoners';
}

@ -7,23 +7,30 @@ import 'package:mohem_flutter_app/api/chat/chat_provider_model.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/codegen_loader.g.dart';
import 'package:mohem_flutter_app/models/post_params_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
import 'package:mohem_flutter_app/theme/app_theme.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:month_year_picker/month_year_picker.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart';
var logger = Logger(
Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter(lineLength: 0), // Use the PrettyPrinter to format and print log
printer: PrettyPrinter(
lineLength: 0,
), // Use the PrettyPrinter to format and print log
// output: null, // U
);
class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
@ -34,49 +41,64 @@ Future<void> main() async {
HttpOverrides.global = MyHttpOverrides();
runApp(
EasyLocalization(
supportedLocales: const [
supportedLocales: const <Locale>[
Locale('en', 'US'),
Locale('ar', 'SA'),
],
path: 'assets/langs',
assetLoader: CodegenLoader(),
assetLoader: const CodegenLoader(),
child: MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => DashboardProviderModel()),
ChangeNotifierProvider(create: (_) => EITProviderModel()),
ChangeNotifierProvider(create: (_) => ChatProviderModel())
providers: <SingleChildWidget>[
ChangeNotifierProvider<DashboardProviderModel>(
create: (_) => DashboardProviderModel(),
),
ChangeNotifierProvider<EITProviderModel>(
create: (_) => EITProviderModel(),
),
ChangeNotifierProvider<ChatProviderModel>(
create: (_) => ChatProviderModel(),
),
ChangeNotifierProvider<MarathonProvider>(
create: (_) => MarathonProvider(),
)
],
child: MyApp(),
child: const MyApp(),
),
),
);
}
// todo terminal command to genertate translation files
// todo terminal command to generate translation files
// flutter pub run easy_localization:generate --source-dir ./assets/langs
// todo terminal command to genertate translation keys
// todo terminal command to generate translation keys
// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart
// command to generate languages data from json
class MyApp extends StatelessWidget {
MyApp() {
// AppDependencies.addDependencies();
}
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Sizer(
builder: (context, orientation, deviceType) {
var obj = AppState().postParamsObject;
obj?.languageID = EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
builder: (
BuildContext context,
Orientation orientation,
DeviceType deviceType,
) {
PostParamsModel? obj = AppState().postParamsObject;
obj?.languageID =
EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2;
AppState().setPostParamsModel(obj!);
List<LocalizationsDelegate> delegates = context.localizationDelegates;
List<LocalizationsDelegate<dynamic>> delegates =
context.localizationDelegates;
// delegates.add(GlobalMaterialLocalizations.delegate);
delegates.add(
MonthYearPickerLocalizations.delegate,
);
return MaterialApp(
theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),
theme: AppTheme.getTheme(
EasyLocalization.of(context)?.locale.languageCode == "ar",
),
debugShowCheckedModeBanner: false,
localizationsDelegates: delegates,
supportedLocales: context.supportedLocales,

@ -1,7 +1,5 @@
import 'dart:io';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
import 'package:flutter_svg/flutter_svg.dart';
@ -18,6 +16,7 @@ import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart';
import 'package:mohem_flutter_app/ui/landing/widget/menus_widget.dart';
import 'package:mohem_flutter_app/ui/landing/widget/services_widget.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_banner.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/mark_attendance_widget.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
@ -38,7 +37,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
late DashboardProviderModel data;
final GlobalKey<ScaffoldState> _scaffoldState = GlobalKey();
final RefreshController _refreshController = RefreshController(initialRefresh: false);
final RefreshController _refreshController =
RefreshController(initialRefresh: false);
int currentIndex = 0;
@ -68,14 +68,13 @@ class _DashboardScreenState extends State<DashboardScreen> {
@override
Widget build(BuildContext context) {
GlobalKey<ScaffoldState> _key = GlobalKey(); //
return Scaffold(
key: _scaffoldState,
body: Column(
children: [
Row(
children: [
Builder(builder: (context) {
Builder(builder: (BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
@ -83,7 +82,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
Utils.getPostBytes(
AppState().memberInformationList!.eMPLOYEEIMAGE ?? "",
),
errorBuilder: (BuildContext context, error, stackTrace) {
errorBuilder: (BuildContext context, Object error,
StackTrace? stackTrace) {
return SvgPicture.asset(
"assets/images/user.svg",
height: 34,
@ -106,7 +106,9 @@ class _DashboardScreenState extends State<DashboardScreen> {
_scaffoldState.currentState!.openDrawer();
});
}),
Image.asset("assets/images/logos/main_mohemm_logo.png", width: 134, height: 28).expanded,
Image.asset("assets/images/logos/main_mohemm_logo.png",
width: 134, height: 28)
.expanded,
SvgPicture.asset(
"assets/images/announcements.svg",
).onPress(() async {
@ -129,8 +131,11 @@ class _DashboardScreenState extends State<DashboardScreen> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color),
(AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24(isBold: true),
LocaleKeys.goodMorning
.tr()
.toText14(color: MyColors.grey77Color),
(AppState().memberInformationList!.eMPLOYEENAME ?? "")
.toText24(isBold: true),
16.height,
Row(
children: [
@ -138,89 +143,197 @@ class _DashboardScreenState extends State<DashboardScreen> {
child: AspectRatio(
aspectRatio: 159 / 159,
child: Consumer<DashboardProviderModel>(
builder: (context, model, child) {
builder: (BuildContext context,
DashboardProviderModel model,
Widget? child) {
return (model.isAttendanceTrackingLoading
? GetAttendanceTrackingShimmer()
: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
]),
borderRadius:
BorderRadius.circular(15),
gradient:
const LinearGradient(
transform:
GradientRotation(
.46),
begin: Alignment
.topRight,
end: Alignment
.bottomLeft,
colors: [
MyColors
.gradiantEndColor,
MyColors
.gradiantStartColor,
]),
),
child: Stack(
alignment: Alignment.center,
children: [
if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
if (model
.isTimeRemainingInSeconds ==
0)
SvgPicture.asset(
"assets/images/thumb.svg"),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize:
MainAxisSize
.min,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
if (model.isTimeRemainingInSeconds == 0) "01-02-2022".toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
LocaleKeys
.markAttendance
.tr()
.toText14(
color: Colors
.white,
isBold:
true),
if (model
.isTimeRemainingInSeconds ==
0)
"01-02-2022".toText12(
color: Colors
.white),
if (model
.isTimeRemainingInSeconds !=
0)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize:
MainAxisSize
.min,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
9.height,
CountdownTimer(
endTime: model.endTime,
onEnd: null,
endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
textStyle: TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
endTime: model
.endTime,
onEnd:
null,
endWidget: "00:00:00".toText14(
color: Colors
.white,
isBold:
true),
textStyle: const TextStyle(
color: Colors
.white,
fontSize:
14,
letterSpacing:
-0.48,
fontWeight:
FontWeight.bold),
),
LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
LocaleKeys
.timeLeftToday
.tr()
.toText12(
color:
Colors.white),
9.height,
ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(20),
),
child: LinearProgressIndicator(
value: model.progress,
minHeight: 8,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
borderRadius: const BorderRadius
.all(
Radius.circular(
20)),
child:
LinearProgressIndicator(
value: model
.progress,
minHeight:
8,
valueColor:
const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor:
const Color(0xff196D73),
),
),
],
),
],
).paddingOnly(top: 12, right: 15, left: 12),
).paddingOnly(
top: 12,
right: 15,
left: 12),
),
Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize:
MainAxisSize
.min,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
LocaleKeys.checkIn.tr().toText12(color: Colors.white),
(model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn)
LocaleKeys
.checkIn
.tr()
.toText12(
color:
Colors.white),
(model.attendanceTracking!.pSwipeIn ==
null
? "--:--"
: model
.attendanceTracking!
.pSwipeIn)
.toString()
.toText14(color: Colors.white, isBold: true),
.toText14(
color: Colors
.white,
isBold:
true),
4.height,
],
).paddingOnly(left: 12),
).paddingOnly(
left: 12),
),
Container(
width: 45,
height: 45,
padding: const EdgeInsets.only(left: 14, right: 14),
decoration: const BoxDecoration(
color: Color(0xff259EA4),
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(15),
padding:
const EdgeInsets
.only(
left: 14,
right:
14),
decoration:
const BoxDecoration(
color: Color(
0xff259EA4),
borderRadius:
BorderRadius
.only(
bottomRight: Radius
.circular(
15),
),
),
child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/play.svg" : "assets/images/stop.svg"),
child: SvgPicture.asset(
model.isTimeRemainingInSeconds ==
0
? "assets/images/play.svg"
: "assets/images/stop.svg"),
).onPress(() {
showMyBottomSheet(context, child: MarkAttendanceWidget(model));
showMyBottomSheet(
context,
child:
MarkAttendanceWidget(
model));
}),
],
),
@ -230,7 +343,10 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
).onPress(
() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
Navigator.pushNamed(
context,
AppRoutes
.todayAttendance);
},
))
.animatedSwither();
@ -246,15 +362,18 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
],
).paddingOnly(left: 21, right: 21, top: 7),
MarathonBanner().paddingAll(20),
ServicesWidget(),
// 8.height,
Container(
width: double.infinity,
padding: const EdgeInsets.only(top: 31),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)),
border: Border.all(color: MyColors.lightGreyEDColor, width: 1),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(50),
topLeft: Radius.circular(50)),
border: Border.all(
color: MyColors.lightGreyEDColor, width: 1),
),
child: Column(
mainAxisSize: MainAxisSize.min,
@ -270,64 +389,93 @@ class _DashboardScreenState extends State<DashboardScreen> {
LocaleKeys.offers.tr().toText12(),
Row(
children: [
LocaleKeys.discounts.tr().toText24(isBold: true),
LocaleKeys.discounts
.tr()
.toText24(isBold: true),
6.width,
Container(
padding: const EdgeInsets.only(left: 8, right: 8),
padding: const EdgeInsets.only(
left: 8, right: 8),
decoration: BoxDecoration(
color: MyColors.yellowColor,
borderRadius: BorderRadius.circular(10),
borderRadius:
BorderRadius.circular(10),
),
child: LocaleKeys.newString.tr().toText10(isBold: true)),
child: LocaleKeys.newString
.tr()
.toText10(isBold: true)),
],
),
],
),
),
LocaleKeys.viewAllOffers.tr().toText12(isUnderLine: true).onPress(() {
Navigator.pushNamed(context, AppRoutes.offersAndDiscounts);
LocaleKeys.viewAllOffers
.tr()
.toText12(isUnderLine: true)
.onPress(() {
Navigator.pushNamed(
context, AppRoutes.offersAndDiscounts);
})
],
).paddingOnly(left: 21, right: 21),
Consumer<DashboardProviderModel>(
builder: (context, model, child) {
builder: (BuildContext context,
DashboardProviderModel model, Widget? child) {
return SizedBox(
height: 103 + 33,
child: ListView.separated(
shrinkWrap: true,
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.only(left: 21, right: 21, top: 13),
padding: const EdgeInsets.only(
left: 21, right: 21, top: 13),
scrollDirection: Axis.horizontal,
itemBuilder: (cxt, index) {
itemBuilder: (BuildContext cxt, int index) {
return model.isOffersLoading
? const OffersShimmerWidget()
: InkWell(
onTap: () {
navigateToDetails(data.getOffersList[index]);
navigateToDetails(
data.getOffersList[index]);
},
child: SizedBox(
width: 73,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Container(
width: 73,
height: 73,
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(
borderRadius:
const BorderRadius
.all(
Radius.circular(100),
),
border: Border.all(color: MyColors.lightGreyE3Color, width: 1),
border: Border.all(
color: MyColors
.lightGreyE3Color,
width: 1),
),
child: ClipRRect(
borderRadius: const BorderRadius.all(
borderRadius:
const BorderRadius
.all(
Radius.circular(50),
),
child: Hero(
tag: "ItemImage" + data.getOffersList[index].rowID!,
transitionOnUserGestures: true,
tag: "ItemImage" +
data
.getOffersList[
index]
.rowID!,
transitionOnUserGestures:
true,
child: Image.network(
data.getOffersList[index].bannerImage!,
data
.getOffersList[
index]
.bannerImage!,
fit: BoxFit.contain,
),
),
@ -335,16 +483,33 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
4.height,
Expanded(
child: AppState().isArabic(context)
? data.getOffersList[index].titleAR!.toText12(isCenter: true, maxLine: 1)
: data.getOffersList[index].title!.toText12(isCenter: true, maxLine: 1),
child: AppState()
.isArabic(context)
? data
.getOffersList[
index]
.titleAR!
.toText12(
isCenter:
true,
maxLine: 1)
: data
.getOffersList[
index]
.title!
.toText12(
isCenter:
true,
maxLine: 1),
),
],
),
),
);
},
separatorBuilder: (cxt, index) => 8.width,
separatorBuilder:
(BuildContext cxt, int index) =>
8.width,
itemCount: 6),
);
},
@ -369,14 +534,18 @@ class _DashboardScreenState extends State<DashboardScreen> {
BottomNavigationBarItem(
icon: SvgPicture.asset(
"assets/icons/home.svg",
color: currentIndex == 0 ? MyColors.grey3AColor : MyColors.grey98Color,
color: currentIndex == 0
? MyColors.grey3AColor
: MyColors.grey98Color,
).paddingAll(4),
label: LocaleKeys.home.tr(),
),
BottomNavigationBarItem(
icon: SvgPicture.asset(
"assets/icons/create_req.svg",
color: currentIndex == 1 ? MyColors.grey3AColor : MyColors.grey98Color,
color: currentIndex == 1
? MyColors.grey3AColor
: MyColors.grey98Color,
).paddingAll(4),
label: LocaleKeys.createRequest.tr(),
),
@ -386,10 +555,13 @@ class _DashboardScreenState extends State<DashboardScreen> {
children: [
SvgPicture.asset(
"assets/icons/work_list.svg",
color: currentIndex == 2 ? MyColors.grey3AColor : MyColors.grey98Color,
color: currentIndex == 2
? MyColors.grey3AColor
: MyColors.grey98Color,
).paddingAll(4),
Consumer<DashboardProviderModel>(
builder: (cxt, data, child) {
builder: (BuildContext cxt, DashboardProviderModel data,
Widget? child) {
if (data.workListCounter == 0) {
return const SizedBox();
}
@ -399,8 +571,12 @@ class _DashboardScreenState extends State<DashboardScreen> {
child: Container(
padding: const EdgeInsets.only(left: 4, right: 4),
alignment: Alignment.center,
decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)),
child: data.workListCounter.toString().toText10(color: Colors.white),
decoration: BoxDecoration(
color: MyColors.redColor,
borderRadius: BorderRadius.circular(17)),
child: data.workListCounter
.toString()
.toText10(color: Colors.white),
),
);
},
@ -412,7 +588,9 @@ class _DashboardScreenState extends State<DashboardScreen> {
BottomNavigationBarItem(
icon: SvgPicture.asset(
"assets/icons/item_for_sale.svg",
color: currentIndex == 3 ? MyColors.grey3AColor : MyColors.grey98Color,
color: currentIndex == 3
? MyColors.grey3AColor
: MyColors.grey98Color,
).paddingAll(4),
label: LocaleKeys.chat.tr(),
),
@ -427,13 +605,21 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
],
currentIndex: currentIndex,
selectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey3AColor, fontWeight: FontWeight.w600),
unselectedLabelStyle: const TextStyle(fontSize: 10, color: MyColors.grey98Color, fontWeight: FontWeight.w600),
selectedLabelStyle: const TextStyle(
fontSize: 10,
color: MyColors.grey3AColor,
fontWeight: FontWeight.w600),
unselectedLabelStyle: const TextStyle(
fontSize: 10,
color: MyColors.grey98Color,
fontWeight: FontWeight.w600),
type: BottomNavigationBarType.fixed,
selectedItemColor: MyColors.grey3AColor,
backgroundColor: MyColors.backgroundColor,
selectedIconTheme: const IconThemeData(color: MyColors.grey3AColor, size: 28),
unselectedIconTheme: const IconThemeData(color: MyColors.grey98Color, size: 28),
selectedIconTheme:
const IconThemeData(color: MyColors.grey3AColor, size: 28),
unselectedIconTheme:
const IconThemeData(color: MyColors.grey98Color, size: 28),
onTap: (int index) {
if (index == 1) {
Navigator.pushNamed(context, AppRoutes.mowadhafhi);
@ -441,7 +627,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
Navigator.pushNamed(context, AppRoutes.workList);
} else if (index == 3) {
Navigator.pushNamed(context, AppRoutes.itemsForSale);
}else if (index == 4) {
} else if (index == 4) {
Navigator.pushNamed(context, AppRoutes.chat);
}
},
@ -457,7 +643,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
getOffersDetailList.add(offersListModelObj);
data.getOffersList.forEach((element) {
data.getOffersList.forEach((OffersListModel element) {
if (counter <= 4) {
if (element.rowID != offersListModelObj.rowID) {
getOffersDetailList.add(element);
@ -466,6 +652,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
}
});
Navigator.pushNamed(context, AppRoutes.offersAndDiscountsDetails, arguments: getOffersDetailList);
Navigator.pushNamed(context, AppRoutes.offersAndDiscountsDetails,
arguments: getOffersDetailList);
}
}

@ -39,7 +39,7 @@ class ServicesWidget extends StatelessWidget {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
children: [
data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().paddingOnly(left: 21, right: 21),
SizedBox(
height: 105 + 26,

@ -50,7 +50,7 @@ class _LoginScreenState extends State<LoginScreen> {
@override
void initState() {
super.initState();
// checkFirebaseToken();
// checkFirebaseToken();
}
@override
@ -67,7 +67,8 @@ class _LoginScreenState extends State<LoginScreen> {
await Firebase.initializeApp();
_firebaseMessaging = FirebaseMessaging.instance;
firebaseToken = await _firebaseMessaging.getToken();
loginInfo = await LoginApiClient().getMobileLoginInfoNEW(firebaseToken ?? "", Platform.isAndroid ? "android" : "ios");
loginInfo = await LoginApiClient().getMobileLoginInfoNEW(
firebaseToken ?? "", Platform.isAndroid ? "android" : "ios");
if (loginInfo == null) {
Utils.hideLoading(context);
return;
@ -84,9 +85,11 @@ class _LoginScreenState extends State<LoginScreen> {
}
Future<void> checkPrefs() async {
String username = await Utils.getStringFromPrefs(SharedPrefsConsts.username);
String username =
await Utils.getStringFromPrefs(SharedPrefsConsts.username);
if (username.isNotEmpty) {
String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password);
String password =
await Utils.getStringFromPrefs(SharedPrefsConsts.password);
// String firebaseToken = await Utils.getStringFromPrefs(SharedPrefsConsts.firebaseToken);
// print("firebaseToken:$firebaseToken");
this.username.text = username;
@ -99,23 +102,30 @@ class _LoginScreenState extends State<LoginScreen> {
Utils.showLoading(context);
try {
_checkMobileAppVersion = await LoginApiClient().checkMobileAppVersion();
_memberLoginList = await LoginApiClient().memberLogin(username.text, password.text);
_memberLoginList =
await LoginApiClient().memberLogin(username.text, password.text);
AppState().setMemberLoginListModel = _memberLoginList;
AppState().setUserName = username.text;
AppState().password = password.text;
if (_autoLogin) {
AppState().setMemberInformationListModel = (await MemberInformationListModel.getFromPrefs()).first;
AppState().setPrivilegeListModel = await PrivilegeListModel.getFromPrefs();
String mohemmWifiSSID = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID);
String mohemmWifiPassword = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiPassword);
AppState().setMemberInformationListModel =
(await MemberInformationListModel.getFromPrefs()).first;
AppState().setPrivilegeListModel =
await PrivilegeListModel.getFromPrefs();
String mohemmWifiSSID =
await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID);
String mohemmWifiPassword = await Utils.getStringFromPrefs(
SharedPrefsConsts.mohemmWifiPassword);
AppState().setMohemmWifiSSID = mohemmWifiSSID;
AppState().setMohemmWifiPassword = mohemmWifiPassword;
}
Utils.hideLoading(context);
if (_autoLogin) {
Navigator.pushReplacementNamed(context, AppRoutes.verifyLastLogin, arguments: loginInfo);
Navigator.pushReplacementNamed(context, AppRoutes.verifyLastLogin,
arguments: loginInfo);
} else {
Navigator.pushNamed(context, AppRoutes.verifyLogin, arguments: "$firebaseToken");
Navigator.pushNamed(context, AppRoutes.verifyLogin,
arguments: "$firebaseToken");
}
} catch (ex) {
Utils.hideLoading(context);
@ -128,10 +138,11 @@ class _LoginScreenState extends State<LoginScreen> {
@override
Widget build(BuildContext context) {
if (isAppOpenBySystem == null) {
isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool;
isAppOpenBySystem =
(ModalRoute.of(context)!.settings.arguments ?? true) as bool;
// username.text = "15153";
// password.text = "Abcd@12345";
username.text = "15153";
password.text = "Abcd@12345";
if (isAppOpenBySystem!) checkFirebaseToken();
}
@ -152,7 +163,13 @@ class _LoginScreenState extends State<LoginScreen> {
Expanded(child: SizedBox()),
Row(
children: [
LocaleKeys.english.tr().toText14(color: AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() {
LocaleKeys.english
.tr()
.toText14(
color: AppState().isArabic(context)
? null
: MyColors.textMixColor)
.onPress(() {
context.setLocale(const Locale("en", "US"));
}),
Container(
@ -161,7 +178,13 @@ class _LoginScreenState extends State<LoginScreen> {
height: 16,
margin: const EdgeInsets.only(left: 10, right: 10),
),
LocaleKeys.arabic.tr().toText14(color: !AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() {
LocaleKeys.arabic
.tr()
.toText14(
color: !AppState().isArabic(context)
? null
: MyColors.textMixColor)
.onPress(() {
context.setLocale(const Locale("ar", "SA"));
}),
],
@ -177,14 +200,23 @@ class _LoginScreenState extends State<LoginScreen> {
LocaleKeys.login.tr().toText24(isBold: true),
LocaleKeys.pleaseEnterLoginDetails.tr().toText16(),
16.height,
InputWidget(LocaleKeys.username.tr(), "123456", username),
InputWidget(
LocaleKeys.username.tr(), "123456", username),
12.height,
InputWidget(LocaleKeys.password.tr(), "xxxxxx", password, isTextIsPassword: true),
InputWidget(
LocaleKeys.password.tr(), "xxxxxx", password,
isTextIsPassword: true),
9.height,
Align(
alignment: Alignment.centerRight,
child: LocaleKeys.forgotPassword.tr().toText12(isUnderLine: true, color: MyColors.textMixColor).onPress(() {
Navigator.pushNamed(context, AppRoutes.forgotPassword);
child: LocaleKeys.forgotPassword
.tr()
.toText12(
isUnderLine: true,
color: MyColors.textMixColor)
.onPress(() {
Navigator.pushNamed(
context, AppRoutes.forgotPassword);
}),
),
],
@ -195,8 +227,6 @@ class _LoginScreenState extends State<LoginScreen> {
),
),
DefaultButton(LocaleKeys.login.tr(), () async {
// context.setLocale(const Locale("en", "US")); // to change Loacle
SystemChannels.textInput.invokeMethod('TextInput.hide');
performLogin();
}).insideContainer

@ -0,0 +1,312 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/current_remaining_time.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
import 'package:lottie/lottie.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/classes/lottie_consts.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_header.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:provider/provider.dart';
final int dummyEndTime = DateTime.now().millisecondsSinceEpoch + 1000 * 10;
class MarathonIntroScreen extends StatelessWidget {
const MarathonIntroScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Consumer<MarathonProvider>(
builder: (BuildContext context, MarathonProvider provider, _) {
return Stack(
children: <Widget>[
SingleChildScrollView(
child: Column(
children: <Widget>[
const MarathonHeader(),
20.height,
const MarathonDetailsCard().paddingAll(15),
MarathonTimerCard(
provider: provider,
timeToMarathon: dummyEndTime,
).paddingAll(15),
],
),
),
Align(
alignment: Alignment.bottomCenter,
child: MarathonFooter(provider: provider),
),
],
);
},
),
);
}
}
class MarathonDetailsCard extends StatelessWidget {
const MarathonDetailsCard({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 20),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
LocaleKeys.contestTopicAbout
.tr()
.toText16(color: MyColors.grey77Color),
"Saudi Arabia"
.toText20(color: MyColors.textMixColor, isBold: true),
10.height,
],
),
Row(
children: <Widget>[
LocaleKeys.gameDate.tr().toText16(color: MyColors.grey77Color),
" 10 Oct, 2022"
.toText16(color: MyColors.darkTextColor, isBold: true),
],
),
Row(
children: <Widget>[
LocaleKeys.gameTime.tr().toText16(color: MyColors.grey77Color),
" 3:00pm".toText16(color: MyColors.darkTextColor, isBold: true),
],
),
],
),
);
}
}
class MarathonTimerCard extends StatelessWidget {
final int timeToMarathon;
final MarathonProvider provider;
const MarathonTimerCard({
Key? key,
required this.provider,
required this.timeToMarathon,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
decoration: MyDecorations.shadowDecoration,
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 20),
child: Column(
children: <Widget>[
Lottie.asset(MyLottieConsts.hourGlassLottie, height: 200),
BuildCountdownTimer(
timeToMarathon: timeToMarathon,
provider: provider,
),
],
),
);
}
}
class BuildCountdownTimer extends StatelessWidget {
final int timeToMarathon;
final MarathonProvider provider;
const BuildCountdownTimer({
Key? key,
required this.provider,
required this.timeToMarathon,
}) : super(key: key);
Widget buildEmptyWidget() {
return Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
children: <Widget>[
"00".toText32(),
LocaleKeys.days.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
"00".toText32(),
LocaleKeys.hours.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
"00".toText32(),
LocaleKeys.minutes.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
"00".toText32(),
LocaleKeys.seconds.tr().toText14(color: MyColors.grey57Color),
],
),
],
);
}
Widget buildSeparator() {
return " : ".toText32();
}
Widget buildCountdownTimer(CurrentRemainingTime? time) {
if (time == null) {
scheduleMicrotask(() {
provider.itsMarathonTime = true;
});
return buildEmptyWidget();
}
return Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
children: <Widget>[
time.days == null
? "00".toText32()
: time.days.toString().toText32(),
LocaleKeys.days.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
time.hours == null
? "00".toText32()
: time.hours.toString().toText32(),
LocaleKeys.hours.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
time.min == null ? "00".toText32() : time.min.toString().toText32(),
LocaleKeys.minutes.tr().toText14(color: MyColors.grey57Color),
],
),
buildSeparator(),
Column(
children: <Widget>[
time.sec == null ? "00".toText32() : time.sec.toString().toText32(),
LocaleKeys.seconds.tr().toText14(color: MyColors.grey57Color),
],
),
],
);
}
@override
Widget build(BuildContext context) {
return CountdownTimer(
endTime: timeToMarathon,
onEnd: null,
widgetBuilder: (BuildContext context, CurrentRemainingTime? time) {
return buildCountdownTimer(time);
},
);
}
}
class MarathonFooter extends StatelessWidget {
final MarathonProvider provider;
const MarathonFooter({
Key? key,
required this.provider,
}) : super(key: key);
Widget buildNoteForDemo() {
return Flexible(
child: RichText(
text: TextSpan(
children: <InlineSpan>[
TextSpan(
text: LocaleKeys.note.tr(),
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: MyColors.darkTextColor,
),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP1.tr(),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP2.tr(),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
TextSpan(
text: " " + LocaleKeys.demoMarathonNoteP3.tr(),
style: const TextStyle(
color: MyColors.darkTextColor,
fontSize: 18,
fontWeight: FontWeight.w600,
),
)
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Container(
color: MyColors.kWhiteColor,
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 25, vertical: 15),
child: provider.itsMarathonTime
? DefaultButton(
LocaleKeys.joinMarathon.tr(),
() => Navigator.pushNamed(context, AppRoutes.marathonScreen),
).insideContainer
: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
buildNoteForDemo(),
DefaultButton(LocaleKeys.joinDemoMarathon.tr(), () {})
.insideContainer,
],
),
);
}
}

@ -0,0 +1,12 @@
import 'package:flutter/cupertino.dart';
class MarathonProvider extends ChangeNotifier {
bool _itsMarathonTime = false;
bool get itsMarathonTime => _itsMarathonTime;
set itsMarathonTime(bool value) {
_itsMarathonTime = value;
notifyListeners();
}
}

@ -0,0 +1,92 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/marathon_header.dart';
import 'package:steps_indicator/steps_indicator.dart';
class MarathonScreen extends StatelessWidget {
const MarathonScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: <Widget>[
const MarathonHeader(),
21.height,
const MarathonProgressContainer().paddingOnly(left: 21, right: 21),
],
),
),
);
}
}
class MarathonProgressContainer extends StatelessWidget {
const MarathonProgressContainer({Key? key}) : super(key: key);
final int totalQuestions = 24;
final int currentQuestion = 20;
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
decoration: MyDecorations.shadowDecoration,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: MyColors.greenColor,
borderRadius: BorderRadius.circular(12),
),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 8),
child: Flexible(
child:
"${currentQuestion.toString()} / ${totalQuestions.toString()} ${LocaleKeys.question.tr()}"
.toText12(color: MyColors.white),
),
),
Flexible(
child: "23 ${LocaleKeys.marathoners.tr()}".toText14(),
),
Flexible(
child: "00:23".toText16(isBold: true),
),
],
),
15.height,
const SizedBox(
width: double.infinity,
child: StepsIndicator(
nbSteps: 7,
selectedStep: 2,
doneLineColor: MyColors.greenColor,
doneStepColor: MyColors.greenColor,
doneLineThickness: 5,
undoneLineThickness: 5,
selectedStepSize: 10,
selectedStepColorIn: MyColors.greenColor,
selectedStepColorOut: MyColors.greenColor,
unselectedStepColorIn: MyColors.lightGreyDeColor,
unselectedStepColorOut: MyColors.lightGreyDeColor,
undoneLineColor: MyColors.lightGreyDeColor,
enableLineAnimation: true,
enableStepAnimation: true,
),
),
],
),
);
}
}

@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
class MarathonBanner extends StatelessWidget {
const MarathonBanner({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
height: 88,
width: double.infinity,
decoration: MyDecorations.shadowDecoration,
child: Center(
child: "Banner Here".toText14(),
),
).onPress(
() => Navigator.pushNamed(context, AppRoutes.marathonIntroScreen),
);
}
}

@ -0,0 +1,33 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
class MarathonHeader extends StatelessWidget {
const MarathonHeader({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
color: MyColors.kWhiteColor,
width: double.infinity,
height: 100,
padding: const EdgeInsets.symmetric(horizontal: 25, vertical: 15),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
LocaleKeys.brainMarathon.tr().toText24(isBold: true),
IconButton(
padding: EdgeInsets.zero,
icon: const Icon(Icons.close, size: 28),
color: MyColors.black,
constraints: const BoxConstraints(),
onPressed: () => Navigator.pop(context),
)
],
),
);
}
}

@ -77,6 +77,12 @@ dependencies:
flutter_rating_bar: ^4.0.1
auto_size_text: ^3.0.0
pull_to_refresh: ^2.0.0
# lottie json animations
lottie: ^1.4.3
# Steps Progress
steps_indicator: ^1.3.0
# Marathon Card Swipe
appinio_swiper: ^1.1.1
#Chat
signalr_netcore: ^1.3.3
@ -114,6 +120,7 @@ flutter:
- assets/
- assets/langs/
- assets/icons/
- assets/lottie/
- assets/images/
- assets/images/login/
- assets/icons/chat/

Loading…
Cancel
Save