From 4cfffa59f9716564f566cd059139c8b11eed0163 Mon Sep 17 00:00:00 2001 From: philipmims Date: Wed, 16 Nov 2022 22:54:45 -0500 Subject: [PATCH] implemented IconPicker for Car class --- .vscode/extensions.json | 5 + images/car.png | Bin 0 -> 450 bytes images/car_icons/acura.png | Bin 0 -> 1998 bytes images/car_icons/audi.png | Bin 0 -> 574 bytes images/car_icons/bmw.png | Bin 0 -> 2151 bytes images/car_icons/buick.png | Bin 0 -> 2904 bytes images/car_icons/cadillac.png | Bin 0 -> 1337 bytes images/car_icons/car.png | Bin 0 -> 450 bytes images/car_icons/chevrolet.png | Bin 0 -> 603 bytes images/car_icons/chrysler.png | Bin 0 -> 945 bytes images/car_icons/dodge.png | Bin 0 -> 760 bytes images/car_icons/fiat.png | Bin 0 -> 2215 bytes images/car_icons/ford.png | Bin 0 -> 2283 bytes images/car_icons/gmc.png | Bin 0 -> 593 bytes images/car_icons/honda.png | Bin 0 -> 1209 bytes images/car_icons/hyundai.png | Bin 0 -> 1725 bytes images/car_icons/icons8.png | Bin 0 -> 1200 bytes images/car_icons/infiniti.png | Bin 0 -> 2333 bytes images/car_icons/jaguar.png | Bin 0 -> 1407 bytes images/car_icons/jeep.png | Bin 0 -> 586 bytes images/car_icons/kia.png | Bin 0 -> 1299 bytes images/car_icons/lamborghini.png | Bin 0 -> 1687 bytes images/car_icons/land-rover.png | Bin 0 -> 2316 bytes images/car_icons/lexus.png | Bin 0 -> 1900 bytes images/car_icons/lincoln.png | Bin 0 -> 1113 bytes images/car_icons/maserati.png | Bin 0 -> 1020 bytes images/{ => car_icons}/mazda.png | Bin images/car_icons/mercedes-benz.png | Bin 0 -> 2864 bytes images/car_icons/mini.png | Bin 0 -> 1265 bytes images/car_icons/mitsubishi.png | Bin 0 -> 1092 bytes images/car_icons/nissan.png | Bin 0 -> 2671 bytes images/car_icons/porsche.png | Bin 0 -> 2648 bytes images/car_icons/ram.png | Bin 0 -> 2336 bytes images/car_icons/rolls-royce.png | Bin 0 -> 1675 bytes images/car_icons/subaru.png | Bin 0 -> 2236 bytes images/car_icons/suzuki.png | Bin 0 -> 1159 bytes images/car_icons/tesla.png | Bin 0 -> 1196 bytes images/car_icons/toyota.png | Bin 0 -> 2295 bytes images/car_icons/volkswagen.png | Bin 0 -> 2829 bytes images/car_icons/volvo.png | Bin 0 -> 1084 bytes images/car_icons_svg/acura.svg | 1 - images/car_icons_svg/audi.svg | 1 - images/car_icons_svg/bmw.svg | 1 - images/car_icons_svg/buick.svg | 1 - images/car_icons_svg/cadillac.svg | 1 - images/car_icons_svg/chevrolet.svg | 1 - images/car_icons_svg/chrysler.svg | 1 - images/car_icons_svg/dodge.svg | 1 - images/car_icons_svg/ford.svg | 1 - images/car_icons_svg/gmc.svg | 1 - images/car_icons_svg/honda.svg | 1 - images/car_icons_svg/hyundai.svg | 1 - images/car_icons_svg/icons8.svg | 1 - images/car_icons_svg/infiniti.svg | 1 - images/car_icons_svg/jaguar.svg | 1 - images/car_icons_svg/jeep.svg | 1 - images/car_icons_svg/kia.svg | 1 - images/car_icons_svg/lamborghini.svg | 1 - images/car_icons_svg/land-rover.svg | 1 - images/car_icons_svg/lexus.svg | 1 - images/car_icons_svg/lincoln.svg | 1 - images/car_icons_svg/maserati.svg | 1 - images/car_icons_svg/mazda.svg | 1 - images/car_icons_svg/mercedes-benz.svg | 1 - images/car_icons_svg/mini-cooper.svg | 1 - images/car_icons_svg/mitsubishi.svg | 1 - images/car_icons_svg/nissan.svg | 1 - images/car_icons_svg/porsche.svg | 1 - images/car_icons_svg/ram.svg | 1 - images/car_icons_svg/rolls-royce.svg | 1 - images/car_icons_svg/subaru.svg | 1 - images/car_icons_svg/suzuki.svg | 1 - images/car_icons_svg/tesla.svg | 1 - images/car_icons_svg/toyota.svg | 1 - images/car_icons_svg/volkswagen.svg | 1 - images/car_icons_svg/volvo.svg | 1 - lib/bups/iconpicker-1.dart | 136 +++++++++++++++++++++++++ lib/main.dart | 14 +++ lib/models/car.dart | 6 +- lib/screens/car_detail.dart | 38 ++++--- lib/screens/car_edit.dart | 20 ++++ lib/screens/car_new.dart | 22 +++- lib/screens/iconpicker.dart | 97 ++++++++++++++++++ lib/screens/screens.dart | 1 + lib/screens/txn_new.dart | 11 +- lib/screens/txn_type.dart | 4 +- lib/utils/dbhelper_sqflite.dart | 3 +- lib/utils/garage_model.dart | 5 +- pubspec.yaml | 4 +- 89 files changed, 342 insertions(+), 60 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 images/car.png create mode 100644 images/car_icons/acura.png create mode 100644 images/car_icons/audi.png create mode 100644 images/car_icons/bmw.png create mode 100644 images/car_icons/buick.png create mode 100644 images/car_icons/cadillac.png create mode 100644 images/car_icons/car.png create mode 100644 images/car_icons/chevrolet.png create mode 100644 images/car_icons/chrysler.png create mode 100644 images/car_icons/dodge.png create mode 100644 images/car_icons/fiat.png create mode 100644 images/car_icons/ford.png create mode 100644 images/car_icons/gmc.png create mode 100644 images/car_icons/honda.png create mode 100644 images/car_icons/hyundai.png create mode 100644 images/car_icons/icons8.png create mode 100644 images/car_icons/infiniti.png create mode 100644 images/car_icons/jaguar.png create mode 100644 images/car_icons/jeep.png create mode 100644 images/car_icons/kia.png create mode 100644 images/car_icons/lamborghini.png create mode 100644 images/car_icons/land-rover.png create mode 100644 images/car_icons/lexus.png create mode 100644 images/car_icons/lincoln.png create mode 100644 images/car_icons/maserati.png rename images/{ => car_icons}/mazda.png (100%) create mode 100644 images/car_icons/mercedes-benz.png create mode 100644 images/car_icons/mini.png create mode 100644 images/car_icons/mitsubishi.png create mode 100644 images/car_icons/nissan.png create mode 100644 images/car_icons/porsche.png create mode 100644 images/car_icons/ram.png create mode 100644 images/car_icons/rolls-royce.png create mode 100644 images/car_icons/subaru.png create mode 100644 images/car_icons/suzuki.png create mode 100644 images/car_icons/tesla.png create mode 100644 images/car_icons/toyota.png create mode 100644 images/car_icons/volkswagen.png create mode 100644 images/car_icons/volvo.png delete mode 100644 images/car_icons_svg/acura.svg delete mode 100644 images/car_icons_svg/audi.svg delete mode 100644 images/car_icons_svg/bmw.svg delete mode 100644 images/car_icons_svg/buick.svg delete mode 100644 images/car_icons_svg/cadillac.svg delete mode 100644 images/car_icons_svg/chevrolet.svg delete mode 100644 images/car_icons_svg/chrysler.svg delete mode 100644 images/car_icons_svg/dodge.svg delete mode 100644 images/car_icons_svg/ford.svg delete mode 100644 images/car_icons_svg/gmc.svg delete mode 100644 images/car_icons_svg/honda.svg delete mode 100644 images/car_icons_svg/hyundai.svg delete mode 100644 images/car_icons_svg/icons8.svg delete mode 100644 images/car_icons_svg/infiniti.svg delete mode 100644 images/car_icons_svg/jaguar.svg delete mode 100644 images/car_icons_svg/jeep.svg delete mode 100644 images/car_icons_svg/kia.svg delete mode 100644 images/car_icons_svg/lamborghini.svg delete mode 100644 images/car_icons_svg/land-rover.svg delete mode 100644 images/car_icons_svg/lexus.svg delete mode 100644 images/car_icons_svg/lincoln.svg delete mode 100644 images/car_icons_svg/maserati.svg delete mode 100644 images/car_icons_svg/mazda.svg delete mode 100644 images/car_icons_svg/mercedes-benz.svg delete mode 100644 images/car_icons_svg/mini-cooper.svg delete mode 100644 images/car_icons_svg/mitsubishi.svg delete mode 100644 images/car_icons_svg/nissan.svg delete mode 100644 images/car_icons_svg/porsche.svg delete mode 100644 images/car_icons_svg/ram.svg delete mode 100644 images/car_icons_svg/rolls-royce.svg delete mode 100644 images/car_icons_svg/subaru.svg delete mode 100644 images/car_icons_svg/suzuki.svg delete mode 100644 images/car_icons_svg/tesla.svg delete mode 100644 images/car_icons_svg/toyota.svg delete mode 100644 images/car_icons_svg/volkswagen.svg delete mode 100644 images/car_icons_svg/volvo.svg create mode 100644 lib/bups/iconpicker-1.dart create mode 100644 lib/screens/iconpicker.dart diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..2d0e144 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "dart-code.flutter" + ] +} \ No newline at end of file diff --git a/images/car.png b/images/car.png new file mode 100644 index 0000000000000000000000000000000000000000..29f66b4dbcecf996ee5a20f2a16d82e181b34c31 GIT binary patch literal 450 zcmV;z0X_bSP)X~o5Y(doy90Ez^`3`sv zD6onbljDyB*bfnWAm5Xt5HTSmE9a!H(9jZ!b}Llib?cS2(2-;At0mk-yaCHr?plZW zv4vu#@l;e~QuM+sTqK;eO8*NjEItONKniS_I5T6RG^IP&hpA&u>X_#nQr%z!>yA17 z2nM9OPJCL(b%^Zit`0%EJ_e43W4<({JGX`J{PyO+L~6!DTS%(wM1KdmMh$e08t9r{ sjWuOAR}8#vzkk02YCusGMNzus2cBglDbR zaNY=oHeKNsFfMA;n3+xMW?ameFCjrzE(L+U;LTiQ(Pq6Z_74rP4UHP6VQRoR2BM?T zQs}++oS%Q(bI-lK_uO+2!+*^B{p)#t&+qMfp7-a#3}!Hc|7*zgI*7DvUaDAkBD!2u zmH_p@0>A+39JLF84V(o|tLQ0IjtSPGBwYp6f{fI0rgl zi`_layXTc_HNGYSk(StPpg#gWQ6N@S{;0xXRR5&de+g^V8+WBmMDn#Wo?47+@BNOfpui zSZ_43_v~=r?rkd@7B5wiPGAfOBl<`<6&k)Tx^Z5m{CtN{b8G8twW@y&+~J5`#J1NY z2YSwwv$?&qGdyp?J`F5P_QefABQ2X0c;n4lqyBhzcen2 zL;Lq%E@$K018P_AEJ*&ik=E6I$pg%rupR&wdNeJp8`t~&Y?A{$XEbdzOKzB{EXS(e z;b&8pKxBPv4ax?mdOno4R=<$g{idHY06{u)<*u%-X+3O+ZmDEHoanx2g;Jje&H*U2 zMK;9B689v~*w_^k)u&v6@}x5^(0WW=${WNe88!`nCy@DR|=ZV(Atduyb{6g^l5jI?Ax6He(RVmy%3uF zfR~;p0aZ2@RCWakxO(-&)d+2s^b~!lvAum(5T77%w;2x)Xxu!-B z1__m!dnF3IyHIxi{4HL+F~2GmelUp7S+(*rkV{TAa(_q14aGVo1fl|^YQO9jZCzH}>Oml{B!>PjNC-niTfOAt4QI+uXtj($y`bQJL=m~8xV@BsP+wsE z*Gd7JTU%#?wtBVQbm4-}ilnVsTYs1;`5crb#qD0JQ0@$m7<#c%0Nb9`0?hGh8w<~w za*h#Rn1fZlwvzvJ*c{81)gz7<0awYGvMUmhfD_USO67@fUoqSq1m+gEdl7i2Tbii7 z+4x+^Q{u0WqgzTP{{kR)wc&G!|!re zD%C&)#3fK&ZM@gdxq{c%+cSJH{^w%h$iZDFfuEN8DAS7$rmXaWd}^huqQ^$Ysa(;r z%n$lGm(t)@#kL+Vt8ZK10gCRqp1qh)(9nV$q{-OTe&zJMzdzj0ltF{2SrR%m(Ds=Rd8#+Fe^-H~|K3eX}1VJK^utfFI+$E}c zUFXdy(nl3;&BoAUVqW#U?d4GMdA+HvZN6bu9YR^*h$dBeLWC8`zPRsGVNgU`HXRbt zBdYQkP?MGFZ;Ujbsq`8c=>I@td;6?#DzpvwLV?X0L4J}6nR^cJ+xhxiNqkk?mPKYJ z(?RxPlbd5{;Hh*~=7}KB>(}&yqj_y?g&O)KaCd>&{lOt>zaqj(OnEJAg~!g;S`z>Z zCd}F?rs_n^_o+bx%7_0~KRDiAznHwx^!ZqWVX^{rIcPn|`|Bp9z5oCK07*qoM6N<$g2RFBO#lD@ literal 0 HcmV?d00001 diff --git a/images/car_icons/audi.png b/images/car_icons/audi.png new file mode 100644 index 0000000000000000000000000000000000000000..8de218e5240e47a9cdf4bafc2fe887e674175f8c GIT binary patch literal 574 zcmV-E0>S->P)jK~!jg?UuVv8$lF?KcPSr8K@Eo*)Ee;pyMS7A-5iZW2XdOg*S-- zi4bT=l@!SnB=`anl-QAWQ=EV0v9v;qmq>V&`4dKqTo{FR3V@D;qyJ~BMbr!Js zmQ1ItPOJjG;DcRYrC>MgOblED6|jY!Os6bba<5ckZ1EN8hJ2CR0NV*-Y)xcwD)$}m zUgyUJyCHAnw!yZw7+XwP^yNMWUg*46up3g7`wL*8i={a#4&^>kiFL0?H{`M0hXvqP zH=oW?@m|LoP}lig!EVSi9d8$apSswXqvCfR*Hr+%73_v2ZT`oGoF{_<<^0>z$K$xYkyi#x3Hm_m3j7nP5p^}N$z#pNK8_} zhOUhT%YiDkv5lcJ;Wn`-+`*=19_~PG`GigV&~+TgaU92S9LFh@zrh_%I`Evt+5i9m M07*qoM6N<$f-V;cp8x;= literal 0 HcmV?d00001 diff --git a/images/car_icons/bmw.png b/images/car_icons/bmw.png new file mode 100644 index 0000000000000000000000000000000000000000..e98690039b2423ec625db6f58ac934f8575ea9f1 GIT binary patch literal 2151 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 literal 0 HcmV?d00001 diff --git a/images/car_icons/car.png b/images/car_icons/car.png new file mode 100644 index 0000000000000000000000000000000000000000..29f66b4dbcecf996ee5a20f2a16d82e181b34c31 GIT binary patch literal 450 zcmV;z0X_bSP)X~o5Y(doy90Ez^`3`sv zD6onbljDyB*bfnWAm5Xt5HTSmE9a!H(9jZ!b}Llib?cS2(2-;At0mk-yaCHr?plZW zv4vu#@l;e~QuM+sTqK;eO8*NjEItONKniS_I5T6RG^IP&hpA&u>X_#nQr%z!>yA17 z2nM9OPJCL(b%^Zit`0%EJ_e43W4<({JGX`J{PyO+L~6!DTS%(wM1KdmMh$e08t9r{ sjWuOAR}8#vzkk02YCusGMNzus2cBglDbR(NNrm7E0BP9X2EwIv@rl5JSaO zsY5e%Xoc92I?(Y4o|0Fp z2J)9zuD>7W93{O1t)feJ1Sq<;sTRw)R5ggBv9=;O2NEsrc{9p}f!fCpZr*G;UaY3$S&eR63JXi{-)kIwt6NbT9L->T5}k&A~$7?FNH9^J3}~ zU=z@drw`l+=+@H*ZUl7e=>q_(cOC|yYFdyA7s$(s>qKAX-#Z(cbfMkDH;`4WZQT3O z2%aUz5$Xy4={$COu%IaK)M5!IQVxb;x-Q%+vZ`TlAlz0&;Yz`;{R2D^Mq9p3_`Cq(py pLazP1jvxd<5ClOG1VIpWegmxj#^=GJ6utle002ovPDHLkV1nK;3cdgU literal 0 HcmV?d00001 diff --git a/images/car_icons/chrysler.png b/images/car_icons/chrysler.png new file mode 100644 index 0000000000000000000000000000000000000000..634af4df38cb684e5727437118e83c300ade9dc2 GIT binary patch literal 945 zcmV;i15W&jP)7Yh{6(CLui-&A(;A3=)+J3{z+q_MkFzEp_|<&-wkn zUCfOU+ZcoHey^)@F1`<+ALslailQirq9}@@D2nDqroL=wZGYZG?lEIn%#M}%dfsVl zZGToothDppw;EfvY!p~q>g(=kY~9=@BKJw)ryzDK!QK|kA==@CzT{kZTunZ~S)KR1 z3VfkzQml4weztx4<))U+dqR+xzuMh>a$kZ}$%q zH9GOouxV43AzMx8s=sN)Q(4h}0H7wTF`jH{ZGRo%83?yrDO`nFVq&)owq8@R(ysT8 zh_c(c@Uy}3{=V+xc_wESj*4)W6Y3;B+z!~AEwp>VRyV7e;cL12MOU*{asMEj= zQ|26;nB#>N^ZeSP|AqAI{ql?o%basK=THGvMG#a46=CvU7ehs7>Q%<*Lu?P&`4G5Z zkOL$tsbRGsi!o_NXaS1TH3=5LChis^m=S_u2EjZQAorf!2as?^-tX^Ull_zL9UZHz zF>KDs6X#f3w}?WT0`S7ezcM&9HmBOvOBS$g<4OQ3S;o1){wDW+&a(w!K~>>IT9Z6F zd5wPfY5z)}+he);b>3`E@U}e5vuc|qld7_8aV^C(j4PX2HrClYaoTp}N}J@UZdc$isqb{KE3TcW{MRoeNAs9XcDp|(mu`-uO$C%Ov=iF$b z$&hn$N>q=4?*Hw_^xMwP_4$keXA3YBGn1ar`|p&@>I2+Cu$#U2*LkcK2nBTm#Z=$W zi#7ld7D|0N3(r-8uLsm2!_K+WsQjXE%u*TH{P2T^=d()`MNt$*Q4~c{6wTAWsmh3D Ttt$4m00000NkvXXu0mjfWogV8 literal 0 HcmV?d00001 diff --git a/images/car_icons/dodge.png b/images/car_icons/dodge.png new file mode 100644 index 0000000000000000000000000000000000000000..4e063557353740adc4199857717c2f3d41af6854 GIT binary patch literal 760 zcmVdE6FR)l z@$vo4e1G#E^8kavU@#aAhSbnjJveaP0RnC$C@_3b%Ij&}Eg2y2yk25{3_vIfJhh}e zLqMF?tr<##beto^{2)Prw@ph+=c~)7akUOG+tJZ3h{gakDxz}~MLqi#7Jg@SwGA-m z`+MRzo&eCIh<U*H%d6$`aME!og;{-v!E_Xetj!@`%-OPMDL3I3EOUo5q?nczT10~Np#LSZb zniSD@F>|LI1V44Sn^D&Qfo<<6A*KNARzyFdQaNmwN?&xiwMcw~KKTAFA;ilB1-@2* z6V(N>xGEA2FqO~mSSgoZFmON-{l!9@^rW2E;U+;jz?0tIhUVqvQ4r-7(FzmwIfcTs z4mT;v0ov#1ZvyC1u~F3!yPEOZYMF{QxyO(NtMdQ>H=BZG&HPV2yEL1(JQDgn=m3e?u6mm zWs}8C%RgU9I!>z~ng-CS@D^j{yc-0II@~O*9ibWD-zkVD5)@eCIPR)0kj2eP4gh8? zYkMV%o&&HI`4z!@$_m49bs>wZ1Hk~rx!hd>jw-UuM3<}}c(b;U!PSKb9cLK8SyhmT q2ApE?QT19D*I+Oh3Q<=$ literal 0 HcmV?d00001 diff --git a/images/car_icons/fiat.png b/images/car_icons/fiat.png new file mode 100644 index 0000000000000000000000000000000000000000..f82b8bb46a13cf20814eec48e1b5158c5ed8d8d9 GIT binary patch literal 2215 zcmV;Y2w3-tP)ipjG*SsKh^139(e7fCN&JK(ta7XrYS)VXM+Mdn-W`hbB(rG@D~5US>SY zo#o!ckMZn_*ZgW;X{57!-}&D6-Z|e{F5JQ`e7qs%V-Tg3JaS@qvxB%_qV80%5G~cFC%zSv-MwY-n{Vg zY&pzIz@bCe7GcO|Kz#);W*dAGDd2au?)>1sjZ3c2)Op4N4xJc!48?OmW3DY@J47bZ zjD?egBPo(e8!Kg#uxvC<;4(E_ro=Qgd>(^fz#tefX>jSqOvX?=@u^L%FWeLXeSLlA zcx>UXL3|ZJ*>HU4>k{BV)TQ=ry?t?PD&Hvu^!4?b zW3lE}1#BA)C;3m`2=RC(-@jn6pXN)a2wWeaad-evcnHIaVp>u3R03N!u?;r>3I9SY z?*ih%MMPRc42AAsq+>0%ZUW#kB^x(1v#`+(@UQTK$d2tRRwU;n;L!1*KPX3h>GZiV z1};VbXuA3VD~|t}_7C316PfY6D}k+>Tv`2T`Zw)iaQP+x)~sk`S+^gd#P9Ff)cW|W z1spyx^bJSxoBy31)p;q2zmaeUYJ09e%%WJM^5QtIpX_AY+D zmXEB}@z%T7mng-LN5_+S@=N-U+%)n4E06w>wzG!;IP+ncNHmQQ;@QK8Z`534Y6{S7 z=VwY0Jbh*~-`0KdpYzGLDnjoc$d?DQ56-W2`$x6xs|q;$-tck+pO3~fgeS7u%+Mv> zsVno#whFppm(aB=tt*2u?2H1~_x7>tE34U86`*YO6rhccCV=cj+4^7yW;9%4w??Uw zUvXP`f6vL22*arASL|bqUuWlMyAXh*6p?5WKoi1wVp;d zIl8JE^t2G17PS-F)yK1$u<6MstJ)XWRXn?PZCtkyfQe{+L2eq2H{CO(00;3vuAE9a zv@iD37%=M!m#<@S1cgJn5-D(zqz5<}N8U0PxA*6IRsDX`W= zUQ;x8jQ08mH`&&aF9*E_QVOIdNTnPsOI7f#cmq8CQ>K`KCeNsi+0=EszIkpqs9Hgte*(OsHBSU8DoD>O~3I2%+5 z&^0*-Ffy9N>o!QI3ZmtrR%A!#{IkxD-_eC^FU$eQQMg@ten+5dT&?gaZ!mOm1hV^( zxRoK6D1B>2Z^dFbZ!miAE~zJyHkpirGx;~rGs@0+2x22?hb+B-zHw~HG zvm^9sxlh&Yw9C~0kso9@RUES#GvWs=K>{HxUZ_`#@*KS*j*0Untm&rH`-6&kw zm@e&a)wos_AccH77ss+}M#f6-eaxMYR&$#ZT-$e*)UOQ2^Z$JTxV?P8D%Wa_dv+Es6{wZ*w$(* zSJzzBW&>^IYV`HD=j(&RapH;W-IJzCN19@9O`f$n_HOGQ^m~k7$nN}EcP0=XFYYgYjo`s|OVa0=b75kWH-CPwadgj)?(fzeXR1K^_bbyj1}&HIdk25?BsU#v0Kr}WXn_G}AEoirI#OS>n zL7+7^3Qxhz0~ zyJB}cD~yFxoIX27Wbz8f?bZhuxQ%t&wsnq9;X3{6_5J&mNyCMAW3lvl$lfTowR-68 z^x^l-?i=~R zsn{FwguP~V_Y|cBJRbd&=5_Df`%v3Qv+Zz?^S7Ub>mnnNNnK-1lk&LH pAYR<{nWcZ3kI$^Pa0?%I{2$ATDzL@TXx;z-002ovPDHLkV1fngP*nf` literal 0 HcmV?d00001 diff --git a/images/car_icons/ford.png b/images/car_icons/ford.png new file mode 100644 index 0000000000000000000000000000000000000000..6e939308ad4c5ddda15598ec04ab12aa34b1a993 GIT binary patch literal 2283 zcmV*jggIJ9rrrOZZ zoWv!X)HWy9tlBg&#YU6bHpXK#n@bEPO-W7?qj5=%3#bqQ1r&=01la^}0cL^O?(GL6 zr$$7ZoSuA{-#Pcoec$&!&;NPf`#jGJZrr$WqUsX*hc!rMy;fVJ0&#cIc9b78hP zXun{lxz$8dYY)vWCeGAf#$>jCD?qU<%SBGuce3b_<{vE}Ipc!>g~E}GEYH^KHRID$ z!h}>q2q^|V3WY#pQ#Va5J^jwK^w4?9N^hSNo6UvAYRB5^1i;%%iN;&?oiGpd!5X3> zv_yvc5*e-~es};KofeK&bx={&K}lIF7OSHInF57q|DfW)Z!Z2%0*sS3Mprmq9_nQJb)BK2&o1=X+}MzlUT5E4^}&dB&c9-Ct%F+PZut4k;@Z8`0d$vsgt@5F$BF`1k1)oN6Q z`Aaj@x*#w9xT2Wm)}BE>D2f8R3v($btf8Q=hPapjyu6g0IMsFw6gtLD}(kUR_gavD@WYRYh~Z z5)2tz61;uH$_=ki^Qx)6$f~tRaXO_Ne#l3oqWH@PIe564n%awG-Wkb)#k&dD`|$e8 z$vnDvH?to|!s(KDZGG7-J9w3;Suy-9C6pDfm0Ty#OReP3&rbkgNq&*pZg(0Kp)oVo zFM2f12=LOYhi)1byTe6LfST+{(WpEWys_aJV@B&(y7+c3Ug{+&BfrOvKvjWY^xaOq(3Tr#sHD zaIO)3u!aeDL@;h_C~fU#9$vVE=byZT6hjC$n~SQN3#1wKyX?$p7S1)Ya&-xPHYaOe&8Fd8Hw&NML+g1H z#^hk8PZ`b=OZOrO0@0Cvys)B(&%gYZO>3tU8{^M|k8S6(ooD#P^msOYP)$?I;K}1E zqA0LrQ96a6*Mh(B^T%@bTo=|}Cs`AQG4H`-M#cy7%IZ?O zdu*hR(bL%6&3hl7U~ z`eqLCu>sdDKKbv9EO^+!dv8o<=SR6L`F%P?B`vId_ZW!@LFCO!1Yp#NAZAR9V^&TA z&n(-|m{B^iGo#60b(m+C?c-ku8(F)d0)Q*seLVHMab(^Z$?EmxsvWEoD$EzbkHox(yZ#D*$oPSj>c{E`p6ld?myfz$z-ty=RcRh=#jTk-_S)@ zj}3sb%JW2qYe|R=q^sM;hOO1S{#H4XBoh?iMM2?7q9U{`oHv#*y$?&5AEdFVo3($* z=JTE3vUBfQOlCXhntSLm*_k#uh6iSj6dJkF*MPt-aj$JD9=^Go4-t;Fa_>wHwQcfLxc_-*ceBfaM2C2^+yGCRJiXaAul z`udzVJeyZhD#an|$W=s9KoA66E(t%aCk}^%wbucFTCF5&LKOE*i6tR6koW#^f={-e zw%Tm2b&{tdzxu1$1L<Yo?Mm=f9P*M#cR8)1aV^1B2zG>-mIHipWmvTi#@x$l8zjnxWIyL)kKgsTS zpDd8;r&ZlOZfvL`)fhsWQI9Ujo4ST8*R<2^7cBJlIqB=i?82?FnBq2=n|c5M002ovPDHLk FV1k`kV_E)TE0^OV+T*6Gwnfd0z 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 TZ!roW00000NkvXXu0mjfLfA&2 literal 0 HcmV?d00001 diff --git a/images/car_icons/icons8.png b/images/car_icons/icons8.png new file mode 100644 index 0000000000000000000000000000000000000000..a124721be847d020f5482dd8775b0851a5c85800 GIT binary patch literal 1200 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 D351T^ literal 0 HcmV?d00001 diff --git a/images/car_icons/jaguar.png b/images/car_icons/jaguar.png new file mode 100644 index 0000000000000000000000000000000000000000..6c167878f66e0eba6c80ded537ed68dba7456575 GIT binary patch literal 1407 zcmV-_1%UdAP)iX+qrpVyC-($)cnlMsH+38?_MYX*zx7n z?_C{%*JOqCoumM}&4?xGqrtH>O3T`jk{sS|XhoG9#pUhj=mb-3Lof@t06Mvf+S8@F$LR&wTm3gqRL+MNNW%C=l z0RSu(16D0gfZHo!|DkH+WG438=z5(8g%_Ogc1i#Ra2%_JS&g|lS>x9Xh`@(CE(KH& zI0qHFLeM*dESabfV}|D;CThiIF2L|ES>~7n^aptOJgCD=KQe;0%;v3+FO( zRwV6ztO6Ui7Lj=~WARHtBPalN8;7`90giYZB8Qn!+t7*plQ*HM1T+Q2jW8p5TsXq* zJj@mr^rM0SR93rjzN8gP7K}ncVGF8ncwn^{T+voGW%=^NhQ}hX<r# zTS9HU7n3JMpu;QS*st|)cglze;|t!-PMZ0j1s(@^d4%_<6;q&*j8>O_<&>0Rn3^)| zk?SjKJUCg{1crhdVP%%C$)0$qza9fBa4*~Umi^e#E~US@Y%C1ygE!cz!X}K0H6td* zj1#9DQS)afBEtB3Z)#$~=0r+*RPLY&0Kf-3N+gzH49gbAgS}6}C(1Z@qz*n&22BBx z5j@0z27f>ykv8L|HQ7m99+o+%0v{i%ityKpO;S)bBqoGne1Z*T!3dLy>0Ki$8eFa* zemY(c$J3#(m|2`HYC(vR5v>BZ1q^#x)`A(G9yMJGD(s*N^ssYJ`4Nv#njZ|Rtaj&N zrzwEv8H|m$VaBxK@VF%$Jaz*s7moqU()j&cGb*dxP&ERxV8Ep0aQK6&b4Ud4r{`g( zprlI@wTOU3FMK7A@&y!B)wuD(w7Y-90ZBoN(~tUFUBqP6o_Qh!?&tHox+vbL9G{&w zJjuw?6aXClxekrDMNj~Eo>44T=B*8x6ZQ`AR{x&-6AkIrH#}0aQzTa^Tx8?cB9cZ3 zd+(Yj@(SF`4<~LVR9!C#`L5LA$reAEB{ N002ovPDHLkV1nkmldb>& literal 0 HcmV?d00001 diff --git a/images/car_icons/jeep.png b/images/car_icons/jeep.png new file mode 100644 index 0000000000000000000000000000000000000000..1754161aafaa9b1b26aa6247984ed931f15cb399 GIT binary patch literal 586 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 hq=EmI@izW%@LytdnGc~`onr5yT@!ID(NN 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 literal 0 HcmV?d00001 diff --git a/images/car_icons/maserati.png b/images/car_icons/maserati.png new file mode 100644 index 0000000000000000000000000000000000000000..095a4bcd3b0f6d5a72207c897e02daa83b444f87 GIT binary patch literal 1020 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 literal 0 HcmV?d00001 diff --git a/images/car_icons/mini.png b/images/car_icons/mini.png new file mode 100644 index 0000000000000000000000000000000000000000..28500e23901990dc68ecfb1d2f2647814d31d245 GIT binary patch literal 1265 zcmV6}y|6Elo7SF<(OGI17anlv}&rmKOLzcQx_+iDnviHvsBlVbwm;ta)*lasrrKi~{J zzVP*6^N+r-fA02qKA-pJ{p|aEzt8i4j*gCwj*gCwj?Uvk45!$cGmYV0BjjSdyex&B z3SvU{h-?C315St$@>ts3Nw>4JHjGyc90TS6T(#FwU3~#Zy^XfERshD14JSHkItdBMOpcB3E|jtw8Jv;6aD2m1 z`VVOWr_VP{@OZty0M9s`&6FJ}rp{p-uqGyEI$4=(Fq@wSXabRxK0or$Ks^LJfzpab zlgTB224>bdY?K@<#MN`gv6tAt?M0C_Nq@?NzgJ*7PYSg_ze2A0f*AF4Z@<56K zoX%!;eg3{?^FBgMqj_un$C%Ae1=<>kJfygUDHpH@DstrLfk!qE(BW#QwCsyO+k&7z zsMDPnl$B~}FDkCt+0xp%UrKGYmT@Mm(POx3ui;u-*?0|fOR%}R-M?LB-o_pclORNZ%b4QeV$vn?ow zzF%M|C52l*AUHU<-eMfH{Lyzc=ZbWHez*!H45q`&kcJ9qEvx2Eb+HTw>f_{Bp*yEWWyuc~>2 zL6MfQkt^1%oZ+`RR5!Ad=Nex?k>3MGwVcwjVk&?ALA9|Kl9LvY`D)HUDQ>TnX&DP9 zo$GJV?+N%wUl{qL5G)0{)N&FNQ#2b@)kqjn!y}L@)Xc*}@4&;P&6{|l=s@kEmKN8l z-s>qSNMUB8naQ#7SgmnfyB6495EC;Ut2GW!m!#^l6HnKFT?7zeHhx`@6JIuvhUydW zk^e?qw%Ket+B??O<)yi~d-q+sB$rX620KCf6Ji=oR%R{$P0e@vmTQ&i?4ZNdu1PDzG@9(}jYLOHQ*kBVOP@Dsn-;A{I*pzx zZ`dLwTl*WkdGiLPWnWU~_+vl~YfKzVGIItx#BE8RKhghttHN+yXubuW1F+j`xm;6$ z!(roA+us0$g+>q^J&nYK6s*=bU+YVF4T~S^g~rGE^YzAduaXa9GY~pR`fa4xW^muz zwP;an=TLhO>!tqGPuIh|Zjm7%1H@F2J(qgX1kxs?JbvHcJ^o5+)a~KytD~c%qobpv b^MB=EyV98t9N2=!00000NkvXXu0mjfXuE5O literal 0 HcmV?d00001 diff --git a/images/car_icons/mitsubishi.png b/images/car_icons/mitsubishi.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f6385f0ae68cb0e33e3d4cc2e043431eea74c4 GIT binary patch literal 1092 zcmV-K1iSl*P)z$Hq=JaHRs4t#&FrKmJNNj| zD4QmmY;Nv=4||?w?ws@goipdoow);bt6SX?GX)8A**6s=DTbGnFhD8S_BiO1VJ`b{ zQjEmzjP7XhOHpbZ*Z^D({CJCeIu^O+B-Vj2Np?1#2T;hUDIajna^8WcC);jRhpT8CLED4;=%_26(+((z z8eXINjqwa}*yXb7w185s^)VIgT+Bz{?y$SojtSI+gM>ZlP}&Q z4jy1|{3#)zqOynT$r;b1*H!Y6z~{7o`kN7y;|pFC{V+ILJm->^$bP^x(#H+Usz4~x zxX(GuwIF~$G;&$d*XIl>gRXaDkl>y;6Qu`%pJz`m`9XXr2~J`KNTD!=&<~*K(@Ff1 zNZb@8>}freWEBr;sMR>GyU;BgAE>|r; zceMB(<^wF}ucCv^C&tDBnuo^z6vg@-pq_dAkIv4fg|1aCpfu&Zpvop2pui8AIC!OU z%->dgU!h>52W(uky8KcV)_e=Mx88w~BG6z%6XAj2%i?GAbaUC;LC1i!g{(2gY->J! z?ri1YybfqrR~o}HER#q1WTE5%GWn77qP%OR3!W#bqk8|QRdWV!^oml^UXZ&iA(I}d zMgKxyTP6E|D^}{FTchcV^`Ai%fsl_pKs(2jab4yMm=rJ9*p8J0VgkQJr1n#vIHJ->$ z85%0r8W4N*0#@5ff%foB>#o^jC~fb&Ma|3w;AT5PITGYYb}u(>GMC*iXuk~;xa!4n zn+IUb%sW^n5BxUscZ1bSD$_V|0QlaL+iX($o@H#^>Q=Y^i~R$Bo=(DVOKh?L0000< KMNUMnLSTY+WDdsw literal 0 HcmV?d00001 diff --git a/images/car_icons/nissan.png b/images/car_icons/nissan.png new file mode 100644 index 0000000000000000000000000000000000000000..368dfa968dd40e26c46d6fd73a3acbb3c750ecf8 GIT binary patch literal 2671 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 V>SkI`(82%!002ovPDHLkV1fq~6|w*T literal 0 HcmV?d00001 diff --git a/images/car_icons/subaru.png b/images/car_icons/subaru.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8e5a2cd7b1c8f1168bf8e309d936e22f61dc28 GIT binary patch literal 2236 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 literal 0 HcmV?d00001 diff --git a/images/car_icons/tesla.png b/images/car_icons/tesla.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8de2cfd960d09c20b830b645848d0963d957cc GIT binary patch literal 1196 zcmV;d1XKHoP)lvYuwh*V6ACgu4bzB61tm zIYj2f+IdyY$bkbZvcA63x3I7ppfE;{A8*m-=2qRg6Fhf2EL z6S#)RXZ`8)M_Vr&iy6k+6Dsm@;pZKJq^e%GBHtf!-RWM~3{qe%6ojq-W5o6n0Snv$ zuA}><`P^}yHt-&B7Wlb2n|-2paq+KG-iYHoq;R(` z0dTb6b^j=RpX}~#m9@1=M7jiSsK}Lpbb7p8jG6)g&pX-ipZ6uY@SgjF2KylsSnmpABL;?vA_@P?+U^@MAkT_81 z&Qc8`GEoP;9&S~HCO~1b4thP@st8ShZ%p7(H4P1+%|PI<(OOWD5y$zH{Ha_GEB&t9 zUdx<85uOL~1>Fq5n+U6T2vGn8^Ff_nsfkbpm|(^2UIBi9t<=9CIg@woj6dO4z14D!YY|*}N>$`HP3y}%%Rd15NP4=y|w`%csC59bmX4rA2qs&qB zYVkoJsuLRG4MaIaDnRr9sqJ9_A`@mW&p@Ndq%|f|0sGj;1L7Zb@v7vTtknMi0000< KMNUMnLSTXjcsNl2 literal 0 HcmV?d00001 diff --git a/images/car_icons/toyota.png b/images/car_icons/toyota.png new file mode 100644 index 0000000000000000000000000000000000000000..ea6362253f09942a1097828740b8c81e1cbb0cd8 GIT binary patch literal 2295 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 \ No newline at end of file diff --git a/images/car_icons_svg/audi.svg b/images/car_icons_svg/audi.svg deleted file mode 100644 index 318bbf4..0000000 --- a/images/car_icons_svg/audi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/bmw.svg b/images/car_icons_svg/bmw.svg deleted file mode 100644 index a01c0cc..0000000 --- a/images/car_icons_svg/bmw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/buick.svg b/images/car_icons_svg/buick.svg deleted file mode 100644 index dfde4f7..0000000 --- a/images/car_icons_svg/buick.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/cadillac.svg b/images/car_icons_svg/cadillac.svg deleted file mode 100644 index c9271b4..0000000 --- a/images/car_icons_svg/cadillac.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/chevrolet.svg b/images/car_icons_svg/chevrolet.svg deleted file mode 100644 index cba114b..0000000 --- a/images/car_icons_svg/chevrolet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/chrysler.svg b/images/car_icons_svg/chrysler.svg deleted file mode 100644 index 995af1d..0000000 --- a/images/car_icons_svg/chrysler.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/dodge.svg b/images/car_icons_svg/dodge.svg deleted file mode 100644 index c753784..0000000 --- a/images/car_icons_svg/dodge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/ford.svg b/images/car_icons_svg/ford.svg deleted file mode 100644 index c080c3c..0000000 --- a/images/car_icons_svg/ford.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/gmc.svg b/images/car_icons_svg/gmc.svg deleted file mode 100644 index 23bbd30..0000000 --- a/images/car_icons_svg/gmc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/honda.svg b/images/car_icons_svg/honda.svg deleted file mode 100644 index 73a8df0..0000000 --- a/images/car_icons_svg/honda.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/hyundai.svg b/images/car_icons_svg/hyundai.svg deleted file mode 100644 index beaae62..0000000 --- a/images/car_icons_svg/hyundai.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/icons8.svg b/images/car_icons_svg/icons8.svg deleted file mode 100644 index 29637fd..0000000 --- a/images/car_icons_svg/icons8.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/infiniti.svg b/images/car_icons_svg/infiniti.svg deleted file mode 100644 index 425a950..0000000 --- a/images/car_icons_svg/infiniti.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/jaguar.svg b/images/car_icons_svg/jaguar.svg deleted file mode 100644 index 62a33e5..0000000 --- a/images/car_icons_svg/jaguar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/jeep.svg b/images/car_icons_svg/jeep.svg deleted file mode 100644 index da257ba..0000000 --- a/images/car_icons_svg/jeep.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/kia.svg b/images/car_icons_svg/kia.svg deleted file mode 100644 index feb1c5e..0000000 --- a/images/car_icons_svg/kia.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/lamborghini.svg b/images/car_icons_svg/lamborghini.svg deleted file mode 100644 index 696f187..0000000 --- a/images/car_icons_svg/lamborghini.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/land-rover.svg b/images/car_icons_svg/land-rover.svg deleted file mode 100644 index 4c0f7d8..0000000 --- a/images/car_icons_svg/land-rover.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/lexus.svg b/images/car_icons_svg/lexus.svg deleted file mode 100644 index 2820bd0..0000000 --- a/images/car_icons_svg/lexus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/lincoln.svg b/images/car_icons_svg/lincoln.svg deleted file mode 100644 index b5ba395..0000000 --- a/images/car_icons_svg/lincoln.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/maserati.svg b/images/car_icons_svg/maserati.svg deleted file mode 100644 index 5265f58..0000000 --- a/images/car_icons_svg/maserati.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/mazda.svg b/images/car_icons_svg/mazda.svg deleted file mode 100644 index e10e094..0000000 --- a/images/car_icons_svg/mazda.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/mercedes-benz.svg b/images/car_icons_svg/mercedes-benz.svg deleted file mode 100644 index 8753f38..0000000 --- a/images/car_icons_svg/mercedes-benz.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/mini-cooper.svg b/images/car_icons_svg/mini-cooper.svg deleted file mode 100644 index f498724..0000000 --- a/images/car_icons_svg/mini-cooper.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/mitsubishi.svg b/images/car_icons_svg/mitsubishi.svg deleted file mode 100644 index 5c2304f..0000000 --- a/images/car_icons_svg/mitsubishi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/nissan.svg b/images/car_icons_svg/nissan.svg deleted file mode 100644 index aef87d8..0000000 --- a/images/car_icons_svg/nissan.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/porsche.svg b/images/car_icons_svg/porsche.svg deleted file mode 100644 index 8a604a5..0000000 --- a/images/car_icons_svg/porsche.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/ram.svg b/images/car_icons_svg/ram.svg deleted file mode 100644 index 7522fbc..0000000 --- a/images/car_icons_svg/ram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/rolls-royce.svg b/images/car_icons_svg/rolls-royce.svg deleted file mode 100644 index 327b8fd..0000000 --- a/images/car_icons_svg/rolls-royce.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/subaru.svg b/images/car_icons_svg/subaru.svg deleted file mode 100644 index 87972d2..0000000 --- a/images/car_icons_svg/subaru.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/suzuki.svg b/images/car_icons_svg/suzuki.svg deleted file mode 100644 index 44ca923..0000000 --- a/images/car_icons_svg/suzuki.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/tesla.svg b/images/car_icons_svg/tesla.svg deleted file mode 100644 index e60e747..0000000 --- a/images/car_icons_svg/tesla.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/toyota.svg b/images/car_icons_svg/toyota.svg deleted file mode 100644 index b7647f7..0000000 --- a/images/car_icons_svg/toyota.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/volkswagen.svg b/images/car_icons_svg/volkswagen.svg deleted file mode 100644 index c0167d2..0000000 --- a/images/car_icons_svg/volkswagen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/images/car_icons_svg/volvo.svg b/images/car_icons_svg/volvo.svg deleted file mode 100644 index fec0440..0000000 --- a/images/car_icons_svg/volvo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/lib/bups/iconpicker-1.dart b/lib/bups/iconpicker-1.dart new file mode 100644 index 0000000..9ff2ccf --- /dev/null +++ b/lib/bups/iconpicker-1.dart @@ -0,0 +1,136 @@ +import 'dart:convert'; +import 'dart:async'; +import 'package:flutter/material.dart'; +// import '../images/car_icons.svg'; + +class IconPicker extends StatefulWidget { + IconPicker({super.key}); + + late final String? selectedIcon; + + @override + State createState() => _IconPickerState(); +} + +class _IconPickerState extends State { + late Future mfst; + late final Future manifestJson; + late final Future> icons; + late List iconList; + late List iconNames; + late Map iconMap; + late List searchableList = []; + late List items; + + TextEditingController editingController = TextEditingController(); + + @override + void initState() { + super.initState(); + icons = loadAssets(); + // iconNames = buildIconList(icons); + } + + Future> loadAssets() async { + final manifestJson = + await DefaultAssetBundle.of(context).loadString('AssetManifest.json'); + // ignore: no_leading_underscores_for_local_identifiers + final _icons = json + .decode(manifestJson) + .keys + .where((String key) => key.startsWith('images/car_icons/')) + .toList(); + return _icons; + } + + List buildIconList(List icons) { + List iN = []; + for (var i in icons) { + iN.add(i.substring(17, i.length - 4)); + } + return iN; + } + + void filterSearch(String query, List iconList) { + if (query.isNotEmpty) { + for (var item in iconList) { + if (item.contains(query)) { + searchableList.add(item); + } + } + setState(() { + items.clear(); + items.addAll(searchableList); + print(items); + }); + return; + } else { + setState(() { + items.clear(); + items.addAll(iconList); + }); + } + } + + @override + Widget build(BuildContext context) { + // mfst = DefaultAssetBundle.of(context).loadString('AssetManifest.json'); + // icons = json.decode(mfst).keys.where((String key) => key.startsWith('assets/images/car_icons_svg')).toList(); + // icons = loadAssets() as List; + return FutureBuilder( + future: icons, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } else { + if (snapshot.error != null) { + return const Center( + child: Text('An error occurred'), + ); + } else { + iconList = snapshot.data!; + iconNames = buildIconList(iconList); + print('iconlist is ${iconList.sublist(0, 5)}...'); + print('iconNames is ${iconNames.sublist(0, 5)}...'); + return Scaffold( + appBar: AppBar( + title: const Text('test'), + backgroundColor: const Color.fromARGB(255, 185, 47, 5), + ), + body: Column(children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: TextField( + onChanged: (value) { + filterSearch(value, snapshot.data!); + }, + controller: editingController, + ), + ), + Expanded( + child: ListView.builder( + itemCount: iconList.length, + itemBuilder: (context, index) => ListTile( + leading: CircleAvatar( + backgroundImage: AssetImage(iconList[index]), + backgroundColor: Colors.white, + ), + title: Text(iconNames[index]), + onTap: (() => VoidCallback)), + )) + ])); + } + } + }); + } + +/* Widget build(BuildContext context) { + return ListView.builder( + itemCount: icons.length, + itemBuilder: (context, index) => ListTile( + leading: Image(image: AssetImage(icons[index])), + title: const Text('title'), + ), + ); + } */ +} diff --git a/lib/main.dart b/lib/main.dart index 812b2cc..2f25835 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -70,6 +70,20 @@ class MyDrawer extends StatelessWidget { print('dbsetup'); }, ), + ListTile( + leading: const Icon(Icons.tune), + title: const Text('IconPicker'), + onTap: () { + showDialog( + barrierColor: Colors.black.withOpacity(.5), + context: context, + builder: (BuildContext context) { + return IconPicker(); + }); + /* Navigator.of(context).push( + MaterialPageRoute(builder: (context) => IconPicker())); */ + }, + ), ListTile( leading: const Icon(Icons.info_outline), title: const Text('About'), diff --git a/lib/models/car.dart b/lib/models/car.dart index c472636..76c4517 100644 --- a/lib/models/car.dart +++ b/lib/models/car.dart @@ -5,8 +5,9 @@ class Car { static const colNickname = 'nickname'; static const colPlate = 'plate'; static const colMileage = 'mileage'; + static const colIcon = 'icon'; - Car({this.id, this.vin, this.plate, this.nickname, this.mileage}); + Car({this.id, this.vin, this.plate, this.nickname, this.mileage, this.icon}); Car.fromMap(Map map) { id = map[colId]; @@ -14,6 +15,7 @@ class Car { nickname = map[colNickname]; plate = map[colPlate]; mileage = map[colMileage]; + icon = map[colIcon]; } int? id; @@ -21,6 +23,7 @@ class Car { String? plate; String? nickname; int? mileage; + String? icon; Map toMap() { var map = { @@ -28,6 +31,7 @@ class Car { colPlate: plate, colNickname: nickname, colMileage: mileage, + colIcon: icon, }; // if (id != null) { // map[colId] = id; //not sure https://www.youtube.com/watch?v=tj7Lj9a3fyM diff --git a/lib/screens/car_detail.dart b/lib/screens/car_detail.dart index 6d39260..4bde9a6 100644 --- a/lib/screens/car_detail.dart +++ b/lib/screens/car_detail.dart @@ -9,6 +9,7 @@ import 'package:dash/screens/screens.dart'; class CarDetailScreen extends StatefulWidget { const CarDetailScreen({super.key, required this.carIndex}); final int carIndex; + // late Car car; @override State createState() => _CarDetailScreenState(); @@ -20,13 +21,13 @@ class _CarDetailScreenState extends State { @override Widget build(BuildContext context) { - // late Car car = Provider.of(context).cars[widget.carIndex]; + late Car car = Provider.of(context).cars[widget.carIndex]; // late Car car = context.watch()_cars[widget.carIndex]; return Scaffold( appBar: AppBar( backgroundColor: const Color.fromARGB(255, 185, 47, 5), - // title: Text(car.nickname ?? ""), - title: const Text("View Car"), + title: Text(car.nickname ?? ""), + // title: const Text("View Car"), ), body: Padding( padding: const EdgeInsets.all(16.0), @@ -36,7 +37,6 @@ class _CarDetailScreenState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - const Text("plh img picker"), Center( // edit car screen child: Ink( @@ -58,11 +58,6 @@ class _CarDetailScreenState extends State { ), ], ), - IconButton( - iconSize: 48.0, - icon: const Icon(Icons.directions_car), - onPressed: (() => VoidCallback), - ), Consumer( builder: (context, garage, child) => Column( children: [ @@ -71,6 +66,11 @@ class _CarDetailScreenState extends State { Text("License Plate: ${garage.cars[widget.carIndex].plate}"), Text( "Mileage: ${garage.cars[widget.carIndex].mileage.toString()}"), + CircleAvatar( + backgroundImage: AssetImage( + garage.cars[widget.carIndex].icon ?? + 'images/car.png'), + backgroundColor: Colors.white), ], ), ), @@ -97,10 +97,10 @@ class CarTxns extends StatefulWidget { final int carIndex; @override - State createState() => _CurrentCar(); + State createState() => _CarTxns(); } -class _CurrentCar extends State { +class _CarTxns extends State { late Future _txns; late Car car; @@ -112,10 +112,22 @@ class _CurrentCar extends State { super.initState(); } + Icon getIcon(String? txntype) { + if (txntype == 'Gas') { + return (const Icon(Icons.local_gas_station)); + } else if (txntype == 'Oil') { + return (const Icon(Icons.water_drop)); + } else if (txntype == 'Other') { + return (const Icon(Icons.build)); + } else { + return (const Icon(Icons.question_mark)); + } + } + @override Widget build(BuildContext context) { // car = - // Provider.of(context, listen: false).cars[widget.carIndex]; + // Provider.of(context, listen: false).cars[widget.carIndex]; // _txns = Provider.of(context, listen: false).getTxns(car.id!); return FutureBuilder( future: _txns, @@ -139,7 +151,7 @@ class _CurrentCar extends State { // dense: true, //only affects text, use visualDensity instead visualDensity: const VisualDensity(horizontal: 0, vertical: -4), - leading: const Icon(Icons.local_gas_station), + leading: getIcon(garage.txns[index].txntype), title: Text(garage.txns[index].txntype ?? "type"), subtitle: Text(garage.txns[index].note ?? "note"), onTap: (() => VoidCallback)), diff --git a/lib/screens/car_edit.dart b/lib/screens/car_edit.dart index 3e64eb9..27bbded 100644 --- a/lib/screens/car_edit.dart +++ b/lib/screens/car_edit.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:dash/utils/garage_model.dart'; import 'package:dash/models/car.dart'; +import 'package:dash/screens/iconpicker.dart'; class EditCarScreen extends StatefulWidget { const EditCarScreen({super.key, required this.carIndex}); @@ -16,6 +17,8 @@ class _EditCarScreenState extends State { late GarageModel garage; late Car car; late int carIndex = widget.carIndex; + late IconPicker ip = IconPicker(); + late String selectedIcon = 'images/car.png'; @override void initState() { @@ -98,6 +101,22 @@ class _EditCarScreenState extends State { return null; }, ), + ListTile( + leading: CircleAvatar( + backgroundImage: AssetImage(car.icon ?? selectedIcon), + backgroundColor: Colors.white), + title: const Text("Change Icon"), + onTap: () => showDialog( + barrierColor: Colors.black.withOpacity(.5), + context: context, + builder: (BuildContext context) { + return ip; + }).then((value) => setState( + () { + // selectedIcon = ip.selectedIcon; + selectedIcon = value; + }, + ))), Padding( padding: const EdgeInsets.symmetric(vertical: 4.0), child: ElevatedButton( @@ -107,6 +126,7 @@ class _EditCarScreenState extends State { //validate form updateForm .save(); //save values (reqd before putting them anywhere) + car.icon = selectedIcon; garage.update(car, carIndex); updateForm.reset(); Navigator.pop(context); diff --git a/lib/screens/car_new.dart b/lib/screens/car_new.dart index 93a2419..2589ae1 100644 --- a/lib/screens/car_new.dart +++ b/lib/screens/car_new.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:dash/utils/garage_model.dart'; import 'package:dash/models/car.dart'; -import '../utils/garage_model.dart'; +import 'package:dash/screens/screens.dart'; class NewCarScreen extends StatefulWidget { const NewCarScreen({super.key}); @@ -14,6 +14,8 @@ class NewCarScreen extends StatefulWidget { class _NewCarScreenState extends State { final GlobalKey formKey = GlobalKey(); Car car = Car(); //initialization is required + late IconPicker ip = IconPicker(); + late String selectedIcon = 'images/car.png'; @override Widget build(BuildContext context) { @@ -29,7 +31,6 @@ class _NewCarScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - //new car form text fields TextFormField( decoration: const InputDecoration( labelText: 'Nickname', @@ -81,6 +82,22 @@ class _NewCarScreenState extends State { return null; }, ), + ListTile( + leading: CircleAvatar( + backgroundImage: AssetImage(selectedIcon), + backgroundColor: Colors.white), + title: const Text("Change Icon"), + onTap: () => showDialog( + barrierColor: Colors.black.withOpacity(.5), + context: context, + builder: (BuildContext context) { + return ip; + }).then((value) => setState( + () { + // selectedIcon = ip.selectedIcon; + selectedIcon = value; + }, + ))), Padding( padding: const EdgeInsets.symmetric(vertical: 16.0), child: ElevatedButton( @@ -96,6 +113,7 @@ class _NewCarScreenState extends State { vin: car.vin, nickname: car.nickname, plate: car.plate, + icon: selectedIcon, mileage: car.mileage); }); // var garage = context.read(); diff --git a/lib/screens/iconpicker.dart b/lib/screens/iconpicker.dart new file mode 100644 index 0000000..4521c30 --- /dev/null +++ b/lib/screens/iconpicker.dart @@ -0,0 +1,97 @@ +import 'dart:convert'; +import 'dart:async'; +import 'package:flutter/material.dart'; + +class IconPicker extends StatefulWidget { + IconPicker({super.key}); + + late String selectedIcon = 'images/car.png'; + + @override + State createState() => _IconPickerState(); +} + +class _IconPickerState extends State { + late Future manifestJson; + late List icons; + late List iconList; + late List items; + + TextEditingController editingController = TextEditingController(); + + @override + void initState() { + super.initState(); + loadAssets(); + } + + Future> loadAssets() async { + final manifestJson = + await DefaultAssetBundle.of(context).loadString('AssetManifest.json'); + // ignore: no_leading_underscores_for_local_identifiers + final _icons = await json + .decode(manifestJson) + .keys + .where((String key) => key.startsWith('images/car_icons/')) + .toList(); + setState(() { + icons = _icons; + items = _icons; + }); + return _icons; + } + + void runFilter(String query) { + List results = []; + if (query.isEmpty) { + results = icons; + } else { + results = icons + .where((i) => i.substring(17, i.length - 4).contains(query)) + .toList(); + } + setState(() { + items = results; + }); + } + + @override + Widget build(BuildContext context) { + return Dialog( + child: Column(children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: TextField( + decoration: const InputDecoration( + prefixIcon: Icon(Icons.search), + hintText: "Search icons", + ), + onChanged: (value) { + // filterSearch(value, iconList); + runFilter(value); + print('items found: $items'); + }, + // controller: editingController, + ), + ), + Expanded( + child: ListView.builder( + itemCount: items.length, + itemBuilder: (context, index) => ListTile( + leading: CircleAvatar( + // backgroundImage: AssetImage(iconList[index]), + backgroundImage: AssetImage(items[index]), + backgroundColor: Colors.white, + ), + title: Text(items[index].substring(17, items[index].length - 4)), + // title: Text(items[index]), + onTap: () => + Navigator.of(context, rootNavigator: true).pop(items[index]), + // onTap: (() => setState(() { + // widget.selectedIcon = items[index]; + // })))), + ), + )), + ])); + } +} diff --git a/lib/screens/screens.dart b/lib/screens/screens.dart index 3a48043..7e9ed2f 100644 --- a/lib/screens/screens.dart +++ b/lib/screens/screens.dart @@ -4,3 +4,4 @@ export 'package:dash/screens/car_detail.dart'; export 'package:dash/screens/car_edit.dart'; export 'package:dash/screens/txn_new.dart'; export 'package:dash/screens/txn_type.dart'; +export 'package:dash/screens/iconpicker.dart'; diff --git a/lib/screens/txn_new.dart b/lib/screens/txn_new.dart index b7b51af..a33eb04 100644 --- a/lib/screens/txn_new.dart +++ b/lib/screens/txn_new.dart @@ -79,7 +79,14 @@ class _NewTxnScreenState extends State { decoration: const InputDecoration( labelText: 'Cost', ), - initialValue: "0", + initialValue: "", + onTap: () { + final ft = TextEditingController(); + ft.clear(); + setState(() { + ft.text = ""; + }); + }, onSaved: (val) => setState(() => txn.cost = double.parse(val ?? "0")), keyboardType: TextInputType.number, @@ -117,8 +124,6 @@ class _NewTxnScreenState extends State { setState(() { txn.datetime = DateTime.now().millisecondsSinceEpoch; txn.txntype = txnType.selectedText; - print( - "txntype set to ${txn.txntype} from radio ${txnType.selectedText}"); txn.carid = car.id; car.mileage = txn.mileage; // update car mileage too }); diff --git a/lib/screens/txn_type.dart b/lib/screens/txn_type.dart index ce383ef..f746a08 100644 --- a/lib/screens/txn_type.dart +++ b/lib/screens/txn_type.dart @@ -32,7 +32,9 @@ class TxnTypeState extends State { Widget rIcon( {required int index, required String text, required IconData icon}) { - return Container( + return AnimatedContainer( + duration: const Duration(milliseconds: 300), + curve: Curves.easeIn, padding: const EdgeInsets.all(16.0), decoration: BoxDecoration( shape: BoxShape.circle, diff --git a/lib/utils/dbhelper_sqflite.dart b/lib/utils/dbhelper_sqflite.dart index 09a2a66..77e6736 100644 --- a/lib/utils/dbhelper_sqflite.dart +++ b/lib/utils/dbhelper_sqflite.dart @@ -43,7 +43,8 @@ class DbHelperSqlite { ${Car.colVin} TEXT UNIQUE, ${Car.colNickname} TEXT, ${Car.colMileage} INTEGER, - ${Car.colPlate} TEXT); + ${Car.colPlate} TEXT, + ${Car.colIcon} TEXT); '''); await db.execute(''' CREATE TABLE ${Txn.tblTxns} ( diff --git a/lib/utils/garage_model.dart b/lib/utils/garage_model.dart index 759de3a..84528ec 100644 --- a/lib/utils/garage_model.dart +++ b/lib/utils/garage_model.dart @@ -120,7 +120,10 @@ class _Garage extends State { return ListView.separated( itemCount: garage._cars.length, itemBuilder: (context, index) => ListTile( - leading: const Icon(Icons.directions_car), + leading: CircleAvatar( + backgroundImage: AssetImage( + garage.cars[index].icon ?? 'images/car.png'), + backgroundColor: Colors.white), title: Text(garage.cars[index].nickname ?? "nick_ph"), subtitle: Text(garage.cars[index].vin ?? "vin_ph"), onTap: () { diff --git a/pubspec.yaml b/pubspec.yaml index 5de9321..fa8248f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -70,8 +70,8 @@ flutter: # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg assets: - - images/mazda.png - - images/car_icons_svg/ + - images/car.png + - images/car_icons/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware