diff --git a/assets/images/empty.json b/assets/images/empty.json new file mode 100644 index 0000000..55a25f6 --- /dev/null +++ b/assets/images/empty.json @@ -0,0 +1 @@ +{"nm":"search_empty","ddd":0,"h":290,"w":426,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"shadow","sr":1,"st":0,"op":300,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[70,100,100],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,100,100],"t":30},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[70,100,100],"t":60},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,100,100],"t":90},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[70,100,100],"t":120},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,100,100],"t":150},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[70,100,100],"t":180},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,100,100],"t":210},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[70,100,100],"t":240},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,100,100],"t":270},{"s":[70,100,100],"t":295}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[191,145,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[56.697,6.631],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-9.651,124.815],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":0,"nm":"main","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[213,145,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,145,0],"t":0,"ti":[0,0,0],"to":[0,0.833,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,150,0],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,145,0],"t":60,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,150,0],"t":90,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,145,0],"t":120,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,150,0],"t":150,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,145,0],"t":180,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,150,0],"t":210,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[213,145,0],"t":240,"ti":[0,-0.833,0],"to":[0,0,0]},{"s":[213,150,0],"t":270}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"w":426,"h":290,"refId":"comp_0","ind":2},{"ty":0,"nm":"decoration1","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[213,289,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.37,"y":-0.029},"i":{"x":0.833,"y":0.866},"s":[0,0,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.833,"y":1},"s":[100,100,100],"t":40},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[80,80,100],"t":72},{"s":[90,90,100],"t":133}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[213,289,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.39,"y":0.019},"i":{"x":0.981,"y":1.128},"s":[0],"t":8},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[100],"t":40},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[80],"t":72},{"s":[100],"t":73}],"ix":11}},"ef":[],"w":426,"h":290,"refId":"comp_2","ind":3},{"ty":0,"nm":"decoratio2","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[211,291,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0,100],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[99.442,99.442,100],"t":43},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[84.442,84.442,100],"t":72},{"s":[90,90,100],"t":133}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[211,291,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":41},{"s":[100],"t":72}],"ix":11}},"ef":[],"w":426,"h":290,"refId":"comp_3","ind":4}],"v":"5.5.9","fr":60,"op":180,"ip":0,"assets":[{"nm":"","id":"comp_0","layers":[{"ty":4,"nm":"mouth","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":44},{"s":[105,105,100],"t":68}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[211,145,0],"t":44,"ti":[0,-0.667,0],"to":[0,0.667,0]},{"s":[211,149,0],"t":69}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Shape 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.5,0.25],[-1.715,0.372]],"o":[[-13.025,-6.512],[7.5,-1.625]],"v":[[-10,12.25],[-31.75,12.625]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6039,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"汗","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,-19.333,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[40,40,100],"t":51},{"s":[100,100,100],"t":95}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[248,95.252,0],"t":51,"ti":[0,-1.5,0],"to":[0,1.5,0]},{"s":[248,104.252,0],"t":94}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":51},{"s":[100],"t":95}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"汗","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-9.94,0],[0,7.27],[0,0],[0,-7.27]],"o":[[9.94,0],[0,-7.27],[0,0],[0,7.27]],"v":[[0,19],[18,5.84],[0,-19],[-18,5.84]]},"ix":2}},{"ty":"gf","bm":0,"hd":false,"mn":"ADBE Vector Graphic - G-Fill","nm":"Gradient Fill 1","e":{"a":0,"k":[10.208,19],"ix":6},"g":{"p":3,"k":{"a":0,"k":[0,0.6039215686274509,0,0,0.5,0.6862745098039216,0.16862745098039217,0.16862745098039217,1,0.6862745098039216,0.16862745098039217,0.16862745098039217],"ix":9}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":0,"k":[0.019,-9.236],"ix":5},"r":1,"o":{"a":0,"k":100,"ix":10}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"eye","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":3},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":6},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":9},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":12},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":53},{"s":[100,100,100],"t":56}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[-7.064,-11.347,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":92,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"eye","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[8.466,16.135],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6039,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3,"parent":1},{"ty":4,"nm":"eye","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":3},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":6},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":9},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":12},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100,100],"t":50},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,20,100],"t":53},{"s":[100,100,100],"t":56}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[-33.767,-11.347,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":92,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"eye","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[8.466,16.135],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6039,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4,"parent":1},{"ty":0,"nm":"magnifier","sr":1,"st":0,"op":569,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[213,145,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[213,145,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"w":426,"h":290,"refId":"comp_1","ind":5}]},{"nm":"","id":"comp_1","layers":[{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":3600,"ip":0,"hd":true,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[213,145,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Shape 1","ix":1,"cix":2,"np":2,"it":[{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"c":{"a":0,"k":[0.6039,0,0],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[190.106,142.222,0],"ix":2},"r":{"a":0,"k":-5,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[99.994,100.091],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.8157,0.8157],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":-40,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[192.013,142.223,0],"ix":2},"r":{"a":0,"k":-5,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-26.81,22.62],[22.49,26.96],[26.8,-22.62],[-22.5,-26.95]],"o":[[26.81,-22.62],[-22.49,-26.96],[-26.81,22.62],[22.49,26.96]],"v":[[40.727,48.812],[48.537,-40.958],[-40.723,-48.808],[-48.533,40.952]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5765,0.1176,0.1176],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"矩形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[268.024,226.941,0],"ix":2},"r":{"a":0,"k":-5,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"矩形","ix":1,"cix":2,"np":2,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":10,"ix":4},"s":{"a":0,"k":[42.094,74.507],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.6039,0,0],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":-40,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"矩形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[238.933,197.25,0],"ix":2},"r":{"a":0,"k":-5,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"矩形","ix":1,"cix":2,"np":2,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[24.446,44.702],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":-40,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5}]},{"nm":"","id":"comp_2","layers":[{"ty":4,"nm":"合併形狀","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[208,27,0],"ix":2},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":60},{"s":[360],"t":265}],"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"合併形狀","ix":1,"cix":2,"np":4,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[16,2],"ix":2}},{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 2","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[2,18],"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"Merge Paths 1","mm":2},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"合併形狀","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[418,107,0],"ix":2},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":5},{"s":[360],"t":358}],"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"合併形狀","ix":1,"cix":2,"np":4,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[16,2],"ix":2}},{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 2","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[2,18],"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"Merge Paths 1","mm":2},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"合併形狀","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[31,196,0],"ix":2},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":5},{"s":[360],"t":281}],"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"合併形狀","ix":1,"cix":2,"np":4,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[16,2],"ix":2}},{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 2","d":1,"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"s":{"a":0,"k":[2,18],"ix":2}},{"ty":"mm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Merge","nm":"Merge Paths 1","mm":2},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[70,33,0],"ix":2},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":0},{"s":[360],"t":281}],"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[24,24],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"c":{"a":0,"k":[1,0.6392,0.6392],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4}]},{"nm":"","id":"comp_3","layers":[{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[306,9,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[16,16],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"c":{"a":0,"k":[1,0.6392,0.6392],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[376,179,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[16,16],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"橢圓形","sr":1,"st":0,"op":3600,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[8,115,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"橢圓形","ix":1,"cix":2,"np":2,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[16,16],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.6392,0.6392],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3}]}]} \ No newline at end of file diff --git a/assets/images/png/Ellipse 560 (1).png b/assets/images/png/Ellipse 560 (1).png new file mode 100644 index 0000000..a6ac547 Binary files /dev/null and b/assets/images/png/Ellipse 560 (1).png differ diff --git a/assets/images/png/Ellipse 560.png b/assets/images/png/Ellipse 560.png deleted file mode 100644 index fa3d83d..0000000 Binary files a/assets/images/png/Ellipse 560.png and /dev/null differ diff --git a/assets/images/svg/search-svgrepo-com.svg b/assets/images/svg/search-svgrepo-com.svg new file mode 100644 index 0000000..5a10e0e --- /dev/null +++ b/assets/images/svg/search-svgrepo-com.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/sidemenu/Gray.svg b/assets/images/svg/sidemenu/Gray.svg new file mode 100644 index 0000000..17309fc --- /dev/null +++ b/assets/images/svg/sidemenu/Gray.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svg/sidemenu/Group 51347.svg b/assets/images/svg/sidemenu/Group 51347.svg new file mode 100644 index 0000000..224da5c --- /dev/null +++ b/assets/images/svg/sidemenu/Group 51347.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svg/thumbs-down.svg b/assets/images/svg/thumbs-down.svg new file mode 100644 index 0000000..a272caa --- /dev/null +++ b/assets/images/svg/thumbs-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/thumbs-up.svg b/assets/images/svg/thumbs-up.svg new file mode 100644 index 0000000..eb958fd --- /dev/null +++ b/assets/images/svg/thumbs-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/Utils/Common/CommonBottomNavigation.dart b/lib/Utils/Common/CommonBottomNavigation.dart index bedce78..b4f406a 100644 --- a/lib/Utils/Common/CommonBottomNavigation.dart +++ b/lib/Utils/Common/CommonBottomNavigation.dart @@ -6,8 +6,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:glassmorphism/glassmorphism.dart'; import 'package:traderscircuit/Utils/Common/MainController.dart'; -GlassmorphicContainer bottomnavigationbar( - MainController _mainController) { +GlassmorphicContainer bottomnavigationbar(MainController _mainController) { return GlassmorphicContainer( width: double.infinity, height: 83.h, @@ -76,9 +75,9 @@ GlassmorphicContainer bottomnavigationbar( shape: BoxShape.circle, boxShadow: [ BoxShadow( - color: Colors.grey.withOpacity(0.4), + color: Colors.grey.withOpacity(0.2), spreadRadius: 15, - blurRadius: 10, + blurRadius: 5, offset: Offset(0, 10), ), ], diff --git a/lib/Utils/Common/CustomTextFormField.dart b/lib/Utils/Common/CustomTextFormField.dart index 32a621b..0104c7c 100644 --- a/lib/Utils/Common/CustomTextFormField.dart +++ b/lib/Utils/Common/CustomTextFormField.dart @@ -198,6 +198,160 @@ class _CustomTextFormField1State extends State { obscureText = widget.isInputPassword; } + @override + Widget build(BuildContext context) { + return GlassmorphicContainer( + width: double.infinity, + height: 50, + borderRadius: 8, + blur: 10, + alignment: Alignment.bottomCenter, + border: 0.8, + linearGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + const Color(0xFFffffff).withOpacity(0.1), + const Color(0xFFFFFFFF).withOpacity(0.05), + ], + stops: [ + 0.1, + 1, + ]), + borderGradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xff3A3A3A), + Color(0xFF3A3A3A), + ], + ), + child: TextFormField( + cursorColor: Colors.red, + initialValue: widget.value, + readOnly: widget.readonly, + onTap: widget.onTap, + enabled: widget.enabled, + enableInteractiveSelection: false, + maxLines: widget.maxlines, + autovalidateMode: AutovalidateMode.onUserInteraction, + obscureText: obscureText, + controller: widget.textEditingController, + + decoration: InputDecoration( + hintText: widget.hintText, + prefixIconColor: widget.prefixIconColor, + + hintStyle: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w400, + fontFamily: 'manrope'), + + // ignore: prefer_null_aware_operators + prefixIcon: widget.leadingIcon == null ? null : widget.leadingIcon!, + suffixIcon: widget.isInputPassword + ? GestureDetector( + onTap: () => setState(() => obscureText = !obscureText), + child: obscureText + ? const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(right: 20.0), + child: Icon(Icons.remove_red_eye), + ), + ], + ) + : const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(right: 20.0), + child: Icon( + Icons.remove_red_eye_outlined, + color: Color(0xFF959595), + ), + ), + ], + ), + ) + : widget.suffixIcon == null + ? null + : widget.suffixIcon!, + border: InputBorder.none, + contentPadding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + ), + style: const TextStyle(color: Colors.white), + keyboardType: widget.texttype, + // validator: widget.validator ?? + // (value) { + // if (value == null || value.isEmpty) { + // return "Empty value"; + // } + // return null; + // }, + inputFormatters: widget.inputFormatters, + onChanged: (value) { + widget.onInput?.call(value); + }, + ), + ); + } +} + +class CustomTextFormField3 extends StatefulWidget { + const CustomTextFormField3({ + Key? key, + this.validator, + this.textEditingController, + this.hintText, + this.leadingIcon, + this.prefixIconColor = const Color(0xFF737373), + this.isInputPassword = false, + this.validatorText, + this.value, + this.readonly = false, + this.enabled = true, + this.maxlines = 1, + this.texttype, + this.inputFormatters, + this.onInput, + this.onTap, + this.suffixIcon, + }) : super(key: key); + + final dynamic validator; + final TextEditingController? textEditingController; + final String? hintText; + final Widget? leadingIcon; + final Color prefixIconColor; + final bool isInputPassword; + final String? validatorText; + final String? value; + final bool readonly; + final bool enabled; + final int maxlines; + final TextInputType? texttype; + final dynamic inputFormatters; + final Function(String)? onInput; + final VoidCallback? onTap; + final Widget? suffixIcon; + + @override + State createState() => _CustomTextFormField3State(); +} + +class _CustomTextFormField3State extends State { + late bool obscureText; + + @override + void initState() { + super.initState(); + obscureText = widget.isInputPassword; + } + @override Widget build(BuildContext context) { return TextFormField( @@ -211,23 +365,21 @@ class _CustomTextFormField1State extends State { autovalidateMode: AutovalidateMode.onUserInteraction, obscureText: obscureText, controller: widget.textEditingController, + decoration: InputDecoration( - contentPadding: const EdgeInsets.symmetric( - vertical: 15, - horizontal: 14, - ), hintText: widget.hintText, + prefixIconColor: widget.prefixIconColor, border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.r), - borderSide: const BorderSide(color: Color(0XFF3A3A3A), width: 1), + borderSide: BorderSide(color: const Color(0xFF3A3A3A), width: 1), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.r), - borderSide: const BorderSide(color: Color(0XFF3A3A3A), width: 1), + borderSide: BorderSide(color: const Color(0xFF3A3A3A), width: 1), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.r), - borderSide: const BorderSide(color: Color(0XFF3A3A3A), width: 1), + borderSide: BorderSide(color: const Color(0xFF3A3A3A), width: 1), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), @@ -237,9 +389,13 @@ class _CustomTextFormField1State extends State { borderRadius: BorderRadius.circular(8), borderSide: const BorderSide(color: Colors.red, width: 1), ), + hintStyle: TextStyle( - fontSize: 16.sp, fontFamily: "manrope", color: Colors.white), - prefixIconColor: widget.prefixIconColor, + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w400, + fontFamily: 'manrope'), + // ignore: prefer_null_aware_operators prefixIcon: widget.leadingIcon == null ? null : widget.leadingIcon!, suffixIcon: widget.isInputPassword @@ -271,16 +427,18 @@ class _CustomTextFormField1State extends State { : widget.suffixIcon == null ? null : widget.suffixIcon!, + contentPadding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 10), ), style: const TextStyle(color: Colors.white), keyboardType: widget.texttype, - validator: widget.validator ?? - (value) { - if (value == null || value.isEmpty) { - return "Empty value"; - } - return null; - }, + // validator: widget.validator ?? + // (value) { + // if (value == null || value.isEmpty) { + // return "Empty value"; + // } + // return null; + // }, inputFormatters: widget.inputFormatters, onChanged: (value) { widget.onInput?.call(value); diff --git a/lib/Utils/Common/MainController.dart b/lib/Utils/Common/MainController.dart index 751e2d3..8dfdb71 100644 --- a/lib/Utils/Common/MainController.dart +++ b/lib/Utils/Common/MainController.dart @@ -1,5 +1,7 @@ import 'package:get/get.dart'; import 'package:traderscircuit/view/MainScreen/HomeScreen.dart'; +import 'package:traderscircuit/view/MainScreen/Portfolio/Holdings.dart'; +import 'package:traderscircuit/view/MainScreen/Portfolio/PortfolioEmpty.dart'; import 'package:traderscircuit/view/MainScreen/ShortTrade.dart'; class MainController extends GetxController { @@ -8,7 +10,7 @@ class MainController extends GetxController { var currentTab = [ const HomeScreen(), const ShortTrade(), - const HomeScreen(), + const Holdings(), ].obs; void updateTab(int index) { diff --git a/lib/Utils/Common/commonBotton.dart b/lib/Utils/Common/commonBotton.dart index 8819c2d..fb855c6 100644 --- a/lib/Utils/Common/commonBotton.dart +++ b/lib/Utils/Common/commonBotton.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:glassmorphism/glassmorphism.dart'; +import 'package:traderscircuit/Utils/Common/sized_box.dart'; +import 'package:traderscircuit/Utils/text.dart'; Widget CommonBtn({void Function()? onTap, required String text}) { return InkWell( @@ -24,6 +27,83 @@ Widget CommonBtn({void Function()? onTap, required String text}) { )); } +Widget CommonYesNoBtn({ + void Function()? yesonTap, + void Function()? noonTap, +}) { + return Row( + children: [ + GestureDetector( + onTap: yesonTap, + child: GlassmorphicContainer( + width: 170.w, + height: 50.h, + borderRadius: 8, + blur: 10, + alignment: Alignment.center, + border: 0.9, + linearGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Colors.white.withOpacity(0.1), + Color(0xFFFFFFFF).withOpacity(0.05), + ], + stops: [ + 0.1, + 1, + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color.fromRGBO(70, 5, 1, 0.8), + Color.fromRGBO(102, 102, 102, 0.8), + ], + ), + child: Center( + child: text18W500('Yes'), + ), + ), + ), + sizedBoxWidth(10.w), + GestureDetector( + onTap: noonTap, + child: Container( + height: 50.h, + width: 170.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.r), + border: Border.all(color: Color(0xFF9A0000), width: 1.w), + color: Color(0xFF6C0000)), + child: Center(child: text18W500('No')), + ), + ) + ], + ); +} + + // InkWell( + // onTap: onTap, + // child: Container( + // width: double.infinity, + // height: 50.h, + // decoration: BoxDecoration( + // color: Color(0xff9A0000), borderRadius: BorderRadius.circular(5)), + // child: Center( + // child: Text( + // text, + // textAlign: TextAlign.center, + // style: TextStyle( + // color: Colors.white, + // fontSize: 20.sp, + // fontFamily: 'Cambria', + // fontWeight: FontWeight.w400, + // ), + // ), + // ), + // )); Widget kycBtn({ void Function()? onTap, required String text, diff --git a/lib/Utils/text.dart b/lib/Utils/text.dart index 017d20e..d80cd16 100644 --- a/lib/Utils/text.dart +++ b/lib/Utils/text.dart @@ -12,6 +12,18 @@ Widget text20W400(String text) { ); } +Widget text20W400_center(String text) { + return Text( + text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.sp, + color: Colors.white, + fontWeight: FontWeight.w400, + fontFamily: 'manrope'), + ); +} + Widget text18W800(String text) { return Text( text, @@ -294,6 +306,8 @@ Widget text14W400_979797(String text) { ); } + + Widget text12W400_979797(String text) { return Text( text, diff --git a/lib/resources/routes/route_name.dart b/lib/resources/routes/route_name.dart index d2497ba..9c0c81d 100644 --- a/lib/resources/routes/route_name.dart +++ b/lib/resources/routes/route_name.dart @@ -39,6 +39,8 @@ class RouteName { static const String privacypolicy = '/privacypolicy'; static const String aboutus = '/aboutus'; + static const String faqscreen = '/faqscreen'; + //contact us static const String contactUsMain = '/contactUsMain'; } diff --git a/lib/resources/routes/routes.dart b/lib/resources/routes/routes.dart index cdc6971..cbfef13 100644 --- a/lib/resources/routes/routes.dart +++ b/lib/resources/routes/routes.dart @@ -3,6 +3,7 @@ import 'package:traderscircuit/Utils/Common/noInternet.dart'; import 'package:traderscircuit/resources/routes/route_name.dart'; import 'package:traderscircuit/view/MainScreen/ExploreUnseen.dart'; import 'package:traderscircuit/view/Sidemenu/AboutUs.dart'; +import 'package:traderscircuit/view/Sidemenu/FaqScreen.dart'; import 'package:traderscircuit/view/Sidemenu/PrivacyPolicy.dart'; import 'package:traderscircuit/view/Sidemenu/TermsAndCondition.dart'; import 'package:traderscircuit/view/Sidemenu/contactUs/contact_us_main.dart'; @@ -141,6 +142,10 @@ class AppRoutes { name: RouteName.aboutus, page: () => const AboutUs(), ), + GetPage( + name: RouteName.faqscreen, + page: () => const FaqScreen(), + ), //contact us GetPage( diff --git a/lib/view/MainScreen/ExploreUnseen.dart b/lib/view/MainScreen/ExploreUnseen.dart index 5b73578..7a8bcb3 100644 --- a/lib/view/MainScreen/ExploreUnseen.dart +++ b/lib/view/MainScreen/ExploreUnseen.dart @@ -27,9 +27,10 @@ class _ExploreUnseenState extends State { @override Widget build(BuildContext context) { return Scaffold( + drawerEnableOpenDragGesture: false, key: _scaffoldKey1, backgroundColor: Colors.black, - drawer: Container(width: 320.w, child: SideMenu()), + drawer: Container(child: SideMenu()), extendBody: true, appBar: CommonAppbar(titleTxt: ''), diff --git a/lib/view/MainScreen/Portfolio/Holdings.dart b/lib/view/MainScreen/Portfolio/Holdings.dart new file mode 100644 index 0000000..f42d4f7 --- /dev/null +++ b/lib/view/MainScreen/Portfolio/Holdings.dart @@ -0,0 +1,665 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:get/get.dart'; +import 'package:glassmorphism/glassmorphism.dart'; +import 'package:traderscircuit/Utils/Common/CommonBottomNavigation.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart'; +import 'package:traderscircuit/Utils/Common/sized_box.dart'; +import 'package:traderscircuit/Utils/text.dart'; +import 'package:traderscircuit/view/MainScreen/MainScreen.dart'; +import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class Holdings extends StatefulWidget { + const Holdings({super.key}); + + @override + State createState() => _HoldingsState(); +} + +class _HoldingsState extends State { + GlobalKey _scaffoldKey1 = GlobalKey(); + List containerTexts = [ + "Portfolio 1", + "Portfolio 1", + "Portfolio 1", + "Portfolio 1", + "Portfolio 1" + ]; + final selectedIndex = 0.obs; + @override + Widget build(BuildContext context) { + return Scaffold( + key: _scaffoldKey1, + backgroundColor: Colors.black, + drawer: Container(width: 320.w, child: SideMenu()), + extendBody: true, + appBar: AppBar( + scrolledUnderElevation: 0.0, + backgroundColor: Colors.black, + elevation: 0, + automaticallyImplyLeading: false, + titleSpacing: 0, + leading: InkWell( + onTap: () { + _scaffoldKey1.currentState?.openDrawer(); + }, + child: Center( + child: Image.asset( + 'assets/images/png/menu.png', + height: 15.h, + width: 20.w, + ), + ), + ), + ), + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: ListView( + physics: NeverScrollableScrollPhysics(), + children: [ + text25W600("My Portfolio"), + SizedBox( + height: 10, + ), + DefaultTabController( + length: 5, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + PortfolioTabBar(), + SizedBox( + height: 30.h, + ), + SizedBox( + height: 570.h, + child: TabBarView( + children: [ + DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + HoldingsTabBar(), + Expanded( + child: TabBarView( + children: [ + Holdings(), + PortfolioReview(), + ], + ), + ), + ], + ), + ), + DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + HoldingsTabBar(), + Expanded( + child: TabBarView( + children: [ + Holdings(), + PortfolioReview(), + ], + ), + ), + ], + ), + ), + DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + HoldingsTabBar(), + Expanded( + child: TabBarView( + children: [ + Holdings(), + PortfolioReview(), + ], + ), + ), + ], + ), + ), + DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + HoldingsTabBar(), + Expanded( + child: TabBarView( + children: [ + Holdings(), + PortfolioReview(), + ], + ), + ), + ], + ), + ), + DefaultTabController( + length: 2, + // initialIndex: selectedIndex.value, + child: Column( + children: [ + HoldingsTabBar(), + Expanded( + child: TabBarView( + children: [ + Holdings(), + PortfolioReview(), + ], + ), + ), + ], + ), + ), + ], + ), + ), + ], + ), + ), + sizedBoxHeight(40.h), + ], + ), + ), + ], + ), + ], + ), + bottomNavigationBar: bottomnavigationbar(mainController), + ); + } + + Widget Holdings() { + return Obx(() { + WidgetsBinding.instance.addPostFrameCallback((_) { + if (selectedIndex == 1) _unlockbottomsheet(); + }); + return selectedIndex == 0 + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + sizedBoxHeight(20.h), + HoldingCard( + text: 'TATA MOTORS', + content: 'Text', + ), + sizedBoxHeight(25.h), + Table( + children: [ + TableRow( + children: [ + TableCell( + child: Text( + "Stock Name", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "AVG Price", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "Quantity", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "Exchange", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + ], + ), + ], + ), + Divider( + color: Color(0xFF3A3A3A), + ), + Expanded( + child: ListView.separated( + physics: BouncingScrollPhysics(), + shrinkWrap: true, + itemCount: 16, + itemBuilder: ((context, index) { + return Table( + children: [ + TableRow( + children: [ + TableCell( + child: Text( + "TATA MOTORS", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "416.66", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "3", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + TableCell( + child: Text( + "BSE", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + ), + ), + ], + ), + ], + ); + }), + separatorBuilder: (BuildContext context, int index) { + return Divider(); + }, + ), + ), + SizedBox( + height: 30.h, + ) + ], + ) + : selectedIndex == 1 + ? Column( + children: [], + ) + : Column( + children: [], + ); + }); + } + + void _unlockbottomsheet() { + Get.bottomSheet( + SizedBox( + height: 200, + child: commonGlassContainer( + width: double.infinity, + height: 200, + borderradius: 2, + customWidget: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Image.asset( + // 'assets/images/png/Group 1000003722.png', + // height: 100.h, + // ), + // sizedBoxHeight(25.h), + text20W400('Please subscribed to unlock'), + sizedBoxHeight(30.h), + CommonBtn(text: 'Subscribe Now'), + ], + ), + ), + ), + backgroundColor: Colors.black.withOpacity(0.3), + ); + } + + Widget PortfolioReview() { + List> cardSwing = [ + { + 'text': 'Performance Overview:', + 'content': + 'Your portfolio has generated a total return of 15% over the past six months, outperforming the S&P 500 index by 5%.', + }, + { + 'text': 'Asset Allocation:', + 'content': + 'Your portfolio is well-diversified, with 60% allocated to equities, 30% to bonds, and 10% to cash equivalents.', + }, + { + 'text': 'Individual Holdings Analysis:', + 'content': + 'Your investment in Company XYZ has performed exceptionally well, with a 25% increase in share price since purchase, driven by strong quarterly earnings.', + }, + ]; + + return SingleChildScrollView( + child: Column( + children: [ + sizedBoxHeight(20.h), + Obx(() { + return selectedIndex == 0 + ? Column( + children: List.generate(cardSwing.length, (index) { + return Column( + children: [ + PortfolioCard( + text: cardSwing[index]['text']!, + content: cardSwing[index]['content']!, + ), + sizedBoxHeight(20.h) + ], + ); + }), + ) + : selectedIndex == 1 + ? Column( + children: List.generate(cardSwing.length, (index) { + return Column( + children: [ + PortfolioCard( + text: cardSwing[index]['text']!, + content: cardSwing[index]['content']!, + ), + sizedBoxHeight(20.h) + ], + ); + }), + ) + : Column( + children: List.generate(cardSwing.length, (index) { + return Column( + children: [ + PortfolioCard( + text: cardSwing[index]['text']!, + content: cardSwing[index]['content']!, + ), + sizedBoxHeight(20.h) + ], + ); + }), + ); + }), + sizedBoxHeight(200.h) + ], + ), + ); + } + + Widget PortfolioCard({ + required String text, + required String content, + }) { + return commonGlassContainer( + width: double.infinity, + height: 166.h, + borderradius: 8, + customWidget: Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), + child: Row( + children: [ + Container( + decoration: BoxDecoration( + color: Color(0xFF6C0000), + borderRadius: BorderRadius.circular(2), + ), + height: 25.h, + width: 4.w, + ), + sizedBoxWidth(15.w), + text18W600(text), + Spacer(), + ], + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 18), + child: text16W400(content), + ) + ], + ), + ); + } + + Widget HoldingCard({ + required String text, + required String content, + }) { + return commonGlassContainer( + width: double.infinity, + height: 166.h, + borderradius: 8, + customWidget: Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w), + child: Row( + children: [ + GlassmorphicContainer( + width: 47.w, + height: 47.h, + borderRadius: 100, + blur: 10, + alignment: Alignment.center, + border: 0.9, + linearGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xff3A3A3A), + Color(0xFF3A3A3A), + ], + ), + borderGradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color.fromRGBO(70, 5, 1, 0.8), + Color.fromRGBO(102, 102, 102, 0.8), + ], + ), + child: Center( + child: Image.asset( + 'assets/images/png/TATAMOTORS.NS_BIG 1.png', + width: 26.w, + height: 23.h, + ), + ), + ), + sizedBoxWidth(15.w), + text18W600(text), + Spacer(), + ], + ), + ), + Container( + width: double.infinity, + height: 1.h, + color: Color(0xFF3A3A3A), + ), + Padding( + padding: const EdgeInsets.all(18), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text14W400_979797('Portfolio Value'), + sizedBoxHeight(5.h), + SizedBox(width: 150.w, child: text15W600("₹ 40,000")) + ], + ), + sizedBoxWidth(30.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + text14W400_979797('%P/L'), + sizedBoxHeight(5.h), + text14W400_00FF19("-36.006%") + ], + ) + ], + ), + ], + ), + ) + ], + ), + ); + } + + Widget topContainer(String text, int index) { + return Obx(() { + return selectedIndex.value == index + ? Container( + height: 40.h, + width: 126.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + color: Color(0Xff6C0000), + ), + child: Center(child: text16W500(text)), + ) + : commonGlassContainer( + width: 126.w, + height: 40.h, + borderradius: 5, + customWidget: Center(child: text16W400(text)), + ); + }); + } +} + +class HoldingsTabBar extends StatelessWidget { + // Set the desired height + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + border: Border.all(color: Color(0Xff3A3A3A)), + borderRadius: BorderRadius.circular(8.r), + ), + padding: const EdgeInsets.all(8.0), // Set the desired padding + child: TabBar( + indicator: BoxDecoration( + color: const Color(0xff6C0000), + borderRadius: BorderRadius.circular(5), + ), + dividerColor: Colors.transparent, + labelStyle: TextStyle( + fontSize: 18.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + indicatorSize: TabBarIndicatorSize.tab, + indicatorColor: const Color(0xFFFFFFFF), + labelColor: Colors.white, + unselectedLabelColor: const Color(0xffFFFFFF), + overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)), + tabs: const [ + Tab( + text: 'Holdings', + ), + Tab( + text: 'Portfolio Reviews', + ), + ]), + ); + } +} + +class PortfolioTabBar extends StatelessWidget { + // Set the desired height + + @override + Widget build(BuildContext context) { + return TabBar( + tabAlignment: TabAlignment.start, + isScrollable: true, + dividerColor: Colors.transparent, + labelStyle: TextStyle( + fontSize: 18.sp, + color: Colors.white, + fontWeight: FontWeight.w500, + fontFamily: 'manrope'), + indicatorSize: TabBarIndicatorSize.tab, + indicatorWeight: 2, + indicatorColor: const Color(0xff6C0000), + labelColor: Colors.white, + unselectedLabelColor: const Color(0xFF464646), + overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)), + tabs: const [ + Tab( + text: 'Portfolio 1', + ), + Tab( + text: 'Portfolio 2', + ), + Tab( + text: 'Portfolio 3', + ), + Tab( + text: 'Portfolio 4', + ), + Tab( + text: 'Portfolio 5', + ), + ]); + } +} diff --git a/lib/view/MainScreen/Portfolio/PortfolioEmpty.dart b/lib/view/MainScreen/Portfolio/PortfolioEmpty.dart new file mode 100644 index 0000000..ac8465d --- /dev/null +++ b/lib/view/MainScreen/Portfolio/PortfolioEmpty.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:lottie/lottie.dart'; +import 'package:traderscircuit/Utils/Common/CommonBottomNavigation.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/Utils/text.dart'; +import 'package:traderscircuit/view/MainScreen/MainScreen.dart'; +import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class Portfolio extends StatefulWidget { + const Portfolio({super.key}); + + @override + State createState() => _PortfolioState(); +} + +class _PortfolioState extends State { + GlobalKey _scaffoldKey1 = GlobalKey(); + List containerTexts = ["Swing Trade", "Multibagger", "Options"]; + final selectedIndex = 0.obs; + @override + Widget build(BuildContext context) { + return Scaffold( + key: _scaffoldKey1, + backgroundColor: Colors.black, + drawer: Container(width: 320.w, child: SideMenu()), + extendBody: true, + appBar: AppBar( + scrolledUnderElevation: 0.0, + backgroundColor: Colors.black, + elevation: 0, + automaticallyImplyLeading: false, + titleSpacing: 0, + leading: InkWell( + onTap: () { + _scaffoldKey1.currentState?.openDrawer(); + }, + child: Center( + child: Image.asset( + 'assets/images/png/menu.png', + height: 15.h, + width: 20.w, + ), + ), + ), + ), + body: Stack( + children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: Column( + children: [ + Row( + children: [ + text25W600("My Portfolio"), + ], + ), + SizedBox( + height: 30.h, + ), + Text( + 'Please click the "Add" button below to add a portfolio.', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 16.sp, + fontWeight: FontWeight.w400, + ), + ), + Spacer(), + LottieBuilder.asset( + "assets/images/empty.json", + width: 200.w, + height: 200.h, + ), + Spacer(), + CommonBtn(text: "Add"), + Spacer(), + ], + ), + ), + ], + ) + ], + ), + bottomNavigationBar: bottomnavigationbar(mainController), + ); + } +} diff --git a/lib/view/MainScreen/ShortTrade.dart b/lib/view/MainScreen/ShortTrade.dart index c6693d2..0f2939d 100644 --- a/lib/view/MainScreen/ShortTrade.dart +++ b/lib/view/MainScreen/ShortTrade.dart @@ -30,7 +30,7 @@ class _ShortTradeState extends State { return Scaffold( key: _scaffoldKey1, backgroundColor: Colors.black, - drawer: Container(width: 320.w, child: SideMenu()), + drawer: Container(child: SideMenu()), extendBody: true, appBar: AppBar( scrolledUnderElevation: 0.0, @@ -50,6 +50,7 @@ class _ShortTradeState extends State { ), ), ), + // title: text22W600('Short'), ), // CommonAppbar( @@ -136,7 +137,7 @@ class _ShortTradeState extends State { Widget ActiveCallsTab() { return Obx(() { WidgetsBinding.instance.addPostFrameCallback((_) { - if (selectedIndex == 1) _unlockbottomsheet(); + if (selectedIndex == 1 || selectedIndex == 2) _unlockbottomsheet(); }); return selectedIndex == 0 ? Column( @@ -235,18 +236,17 @@ class _ShortTradeState extends State { void _unlockbottomsheet() { Get.bottomSheet( - SizedBox( - height: 500, - child: commonGlassContainer( - width: double.infinity, - height: 500, - borderradius: 0, - customWidget: SizedBox( - height: 100, + + commonGlassContainer( + width: double.infinity, + height: 439.h, + borderradius: 4, + customWidget: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 35.w), child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, children: [ + sizedBoxHeight(50.h), // Image.asset( // 'assets/images/png/Group 1000003722.png', // height: 100.h, @@ -254,12 +254,17 @@ class _ShortTradeState extends State { // sizedBoxHeight(25.h), text20W400('Please subscribed to unlock'), sizedBoxHeight(30.h), - CommonBtn(text: 'Subscribe Now'), + CommonBtn( + text: 'Subscribe Now', + onTap: () {}, + ), + SizedBox( height: 100, ) ], ), + ), ), ), diff --git a/lib/view/Sidemenu/FaqScreen.dart b/lib/view/Sidemenu/FaqScreen.dart new file mode 100644 index 0000000..149889c --- /dev/null +++ b/lib/view/Sidemenu/FaqScreen.dart @@ -0,0 +1,324 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/CommonAppBar.dart'; +import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart'; +import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart'; +import 'package:traderscircuit/Utils/Common/sized_box.dart'; +import 'package:traderscircuit/Utils/text.dart'; +import 'package:traderscircuit/view/onBoarding/splashScreen1.dart'; + +class FaqScreen extends StatefulWidget { + const FaqScreen({super.key}); + + @override + State createState() => _FaqScreenState(); +} + +class _FaqScreenState extends State { + List containerTexts = [ + "Subscriptions", + "Investments", + "App features" + ]; + + final selectedIndex = 0.obs; + late RxList isExpandedList; + @override + void initState() { + isExpandedList = RxList.generate(Faqcard.length, (index) => index == 0); + super.initState(); + } + + List> Faqcard = [ + { + 'title': 'How to create new account?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + { + 'title': 'What is Traders Circuits ?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + { + 'title': 'What is Traders Circuits ?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + { + 'title': 'What is Traders Circuits ?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + { + 'title': 'What is Traders Circuits ?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + ]; + + List> Faqcard2 = [ + { + 'title': 'How to create new account?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + { + 'title': 'What is Traders Circuits ?', + 'content': + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since. Lorem Ipsum has been the industry's standard dummy text ever since.", + }, + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CommonAppbar( + titleTxt: "", + ), + backgroundColor: Colors.black, + extendBody: true, + body: Stack(children: [ + CommonBlurLeft(), + CommonBlurRight(), + Stack(children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 16), + child: ListView(physics: BouncingScrollPhysics(), children: [ + text25W600('FAQ'), + sizedBoxHeight(20), + CustomTextFormField1( + hintText: 'Search Chats', + leadingIcon: Container( + height: 20, + width: 20, + child: Center( + child: SvgPicture.asset( + 'assets/images/svg/search-svgrepo-com.svg', + ), + ), + ), + ), + sizedBoxHeight(20.h), + SizedBox( + height: 60, + width: double.infinity, + // color: Colors.amber, + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: containerTexts.length, + itemBuilder: (context, index) { + return GestureDetector( + onTap: () { + selectedIndex.value = index; + }, + child: Row( + children: [ + topContainer(containerTexts[index], index), + sizedBoxWidth(10.w) + ], + ), + ); + }), + ), + sizedBoxHeight(20.h), + Obx(() { + return selectedIndex == 0 + ? Column( + children: List.generate(Faqcard.length, (index) { + return customExpandableItem( + isExpanded: isExpandedList[index], + title: Faqcard[index]['title']!, + content: Faqcard[index]['content']!, + toggleExpansion: () => toggleExpansion(index), + ); + })) + : Column( + children: List.generate(Faqcard2.length, (index) { + return customExpandableItem( + isExpanded: isExpandedList[index], + title: Faqcard2[index]['title']!, + content: Faqcard2[index]['content']!, + toggleExpansion: () => toggleExpansion(index), + ); + })); + }), + + // ListView.builder( + // shrinkWrap: true, + // itemCount: Faqcard.length, + // itemBuilder: (BuildContext context, int index) { + // return Obx( + // () { + // return customExpandableItem( + // isExpanded: isExpandedList[index], + // title: Faqcard[index]['title']!, + // content: Faqcard[index]['content']!, + // toggleExpansion: () => toggleExpansion(index), + // ); + // }, + // ); + // }, + // ), + + sizedBoxHeight(30.h), + ])) + ]) + ])); + } + + Widget topContainer(String text, int index) { + return Obx(() { + return selectedIndex.value == index + ? Container( + height: 38.h, + width: 136.w, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + color: Color(0XFF3F0502), + border: Border.all(color: Color(0xFF9A0000), width: 1)), + child: Center(child: text16W500(text)), + ) + : commonGlassContainer( + width: 136.w, + height: 38.h, + borderradius: 5, + customWidget: Center(child: text16W400(text)), + ); + }); + } + + void toggleExpansion(int index) { + // isExpandedList[index] = !isExpandedList[index]; + for (int i = 0; i < isExpandedList.length; i++) { + if (i != index) { + isExpandedList[i] = false; + } + } + // Toggle the expansion state of the container being toggled + isExpandedList[index] = !isExpandedList[index]; + } + + Widget customExpandableItem({ + required bool isExpanded, + required String title, + required String content, + required VoidCallback toggleExpansion, + }) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: toggleExpansion, + child: commonGlassContainer( + width: double.infinity, + height: isExpanded ? 55.h : 65.h, + borderradius: 8, + customWidget: Padding( + padding: EdgeInsets.only(right: 13.w, left: 13.w), + child: Center( + child: Row( + children: [ + Text( + title, + style: TextStyle( + fontFamily: 'manrope', + fontSize: 16.sp, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + Spacer(), + Icon( + isExpanded + ? Icons.keyboard_arrow_up_outlined + : Icons.keyboard_arrow_down_outlined, + color: Colors.white, + size: 25.sp, + ), + ], + ), + ), + ), + ), + ), + Visibility( + visible: isExpanded, + child: Column( + children: [ + Container( + height: 198.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(8.r), + bottomRight: Radius.circular(8.r), + ), + color: Colors.black, + border: Border.all(color: Color(0xFF3A3A3A), width: 0.5)), + child: Padding( + padding: EdgeInsets.only( + top: 11.h, left: 14.w, bottom: 25.h, right: 28.w), + child: Text( + content, + style: TextStyle( + color: Color(0xFFFFFFFF), + fontFamily: 'manrope', + fontSize: 14.sp, + fontWeight: FontWeight.w400, + ), + ), + ), + ), + sizedBoxHeight(12.h), + commonGlassContainer( + width: double.infinity, + height: 65.h, + borderradius: 8, + customWidget: Padding( + padding: EdgeInsets.only(right: 8.w, left: 13.w), + child: Center( + child: Row(children: [ + Text( + 'Was this answer helpful?', + style: TextStyle( + fontFamily: 'manrope', + fontSize: 16.sp, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + Spacer(), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + text16W500('Yes'), + sizedBoxWidth(2.w), + SvgPicture.asset( + 'assets/images/svg/thumbs-up.svg'), + sizedBoxWidth(8.w), + text16W500('No'), + sizedBoxWidth(2.w), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + sizedBoxHeight(5.h), + SvgPicture.asset( + 'assets/images/svg/thumbs-down.svg'), + ], + ) + ], + ) + ]), + ))) + ], + ), + ), + isExpanded ? sizedBoxHeight(40.h) : sizedBoxHeight(18.h), + ], + ); + } +} diff --git a/lib/view/Sidemenu/Sidemenu.dart b/lib/view/Sidemenu/Sidemenu.dart index c20ab17..fdb9696 100644 --- a/lib/view/Sidemenu/Sidemenu.dart +++ b/lib/view/Sidemenu/Sidemenu.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/svg.dart'; import 'package:get/get.dart'; +import 'package:traderscircuit/Utils/Common/commonBotton.dart'; +import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart'; import 'package:traderscircuit/Utils/Common/sized_box.dart'; import 'package:traderscircuit/Utils/text.dart'; import 'package:traderscircuit/resources/routes/route_name.dart'; @@ -110,7 +112,7 @@ class _SideMenuState extends State { decoration: const ShapeDecoration( image: DecorationImage( image: AssetImage( - "assets/images/png/Ellipse 560.png"), + "assets/images/png/Ellipse 560 (1).png"), fit: BoxFit.fill, ), shape: OvalBorder(), @@ -143,11 +145,8 @@ class _SideMenuState extends State { ), ), ListTile( - leading: SizedBox( - width: 25.w, - height: 25.h, - child: SvgPicture.asset( - 'assets/images/svg/sidemenu/sub.svg')), + leading: + SvgPicture.asset('assets/images/svg/sidemenu/sub.svg'), title: text18W400('My Subscription'), trailing: Container( height: 35.h, @@ -178,11 +177,8 @@ class _SideMenuState extends State { ), ), ListTile( - leading: SizedBox( - width: 25.w, - height: 25.h, - child: SvgPicture.asset( - 'assets/images/svg/sidemenu/content.svg')), + leading: SvgPicture.asset( + 'assets/images/svg/sidemenu/content.svg'), title: text18W400('Content bytes'), selected: true, onTap: () { @@ -208,7 +204,7 @@ class _SideMenuState extends State { width: 25.w, height: 25.h, child: SvgPicture.asset( - 'assets/images/svg/sidemenu/sub.svg')), + 'assets/images/svg/sidemenu/Gray.svg')), title: text18W400('Update My KYC'), trailing: Container( height: 40.h, @@ -256,11 +252,8 @@ class _SideMenuState extends State { ), ), ListTile( - leading: SizedBox( - width: 25.w, - height: 25.h, - child: SvgPicture.asset( - 'assets/images/svg/sidemenu/sub.svg')), + leading: SvgPicture.asset( + 'assets/images/svg/sidemenu/Group 51347.svg'), title: text18W400('My Subscription'), trailing: Container( height: 35.h, @@ -403,7 +396,7 @@ void navigateTo(int index, BuildContext context) { switch (index) { case 0: { - // Get.toNamed(RouteName.FAQScreen); + Get.toNamed(RouteName.faqscreen); } break; @@ -421,124 +414,57 @@ void navigateTo(int index, BuildContext context) { case 3: { - // Get.toNamed(RouteName.contactUsMain); + Get.toNamed(RouteName.termsandcondition); } break; case 4: { - Get.toNamed(RouteName.termsandcondition); + Get.toNamed(RouteName.privacypolicy); } break; case 5: { - Get.toNamed(RouteName.privacypolicy); + Get.toNamed(RouteName.aboutus); } break; case 6: { - Get.toNamed(RouteName.aboutus); + // Get.toNamed(RouteName.settings); } break; case 7: { Get.bottomSheet( - Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - SizedBox( - width: double.infinity, - child: SvgPicture.asset('assets/images/svg/logout.svg'), - ), - Text( - 'Are You Sure You Want To Logout?', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.black, - fontSize: 20.sp, + commonGlassContainer( + width: double.infinity, + height: 363.h, + borderradius: 4, + customWidget: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.w), + child: Column( + children: [ + sizedBoxHeight(60.h), + // Image.asset( + // 'assets/images/png/Group 1000003722.png', + // height: 100.h, + // ), + // sizedBoxHeight(25.h), + text22W600('Confirm Logout'), + sizedBoxHeight(30.h), + text20W400_center( + 'Are you sure you want to logout your account?'), + sizedBoxHeight(50.h), + CommonYesNoBtn(), + ], ), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - width: 150.w, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5.r), - border: Border.all( - color: Colors.black, - ), - ), - child: Padding( - padding: const EdgeInsets.all(18.0), - child: Text( - 'No', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.black, - fontSize: 16.sp, - ), - ), - ), - ), - ), - InkWell( - // onTap: () async { - // FirebaseAuth auth = FirebaseAuth.instance; - // final GoogleSignIn googleSignIn = GoogleSignIn(); - - // if (auth.currentUser != null && - // auth.currentUser?.providerData.any((userInfo) => - // userInfo.providerId == 'google.com') == - // true) { - // await googleSignIn.signOut(); - // Navigator.of(context).pop(); - // Get.back(); - // Get.toNamed(RouteName.login); - // } else { - // SharedPreferences prefs = - // await SharedPreferences.getInstance(); - // prefs.remove('token'); - // Navigator.of(context).pop(); - // Get.back(); - // Get.toNamed(RouteName.login); - // } - // }, - onTap: () { - Get.back(); - // Get.toNamed(RouteName.login); - }, - child: Container( - width: 150.w, - decoration: BoxDecoration( - color: const Color(0xFF3192D8), - borderRadius: BorderRadius.circular(5.r), - ), - child: Padding( - padding: const EdgeInsets.all(18.0), - child: Text( - 'Yes', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 16.sp, - ), - ), - ), - ), - ), - ], - ) - ], + ), ), - backgroundColor: Colors.white, + backgroundColor: Colors.black.withOpacity(0.3), ); } break; diff --git a/lib/view/Sidemenu/contactUs/create_ticket_bottom_sheet.dart b/lib/view/Sidemenu/contactUs/create_ticket_bottom_sheet.dart index c7128f1..ddbef8c 100644 --- a/lib/view/Sidemenu/contactUs/create_ticket_bottom_sheet.dart +++ b/lib/view/Sidemenu/contactUs/create_ticket_bottom_sheet.dart @@ -1,6 +1,3 @@ -import 'dart:developer'; -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -75,7 +72,7 @@ class CreateTicketBottomSheet { const Gap(14), Stack( children: [ - CustomTextFormField1( + CustomTextFormField3( texttype: TextInputType.multiline, hintText: "Description (min 30 characters)", textEditingController: descriptionController,