From c3982326e4ba47cfb98870ad3721e8223d6470ac Mon Sep 17 00:00:00 2001 From: Aunali321 Date: Mon, 1 Aug 2022 01:16:27 +0530 Subject: [PATCH] feat: almost finished homescreen (hardcoded). --- lib/assets/images/reddit.png | Bin 0 -> 22247 bytes lib/assets/images/revanced.svg | 6 ++ lib/assets/images/revanced_afn.png | Bin 0 -> 24197 bytes lib/backend/api/github_api.dart | 17 ++++ lib/backend/api/manager_api.dart | 1 + lib/main.dart | 4 + lib/models/release.dart | 9 ++ lib/models/release_asset.dart | 4 + lib/ui/screens/home_screen.dart | 88 +++++++++-------- lib/ui/widgets/available_update.dart | 140 +++++++++++++++++++++++++++ lib/ui/widgets/installed_apps.dart | 85 ++++++++++++++++ lib/ui/widgets/latest_commit.dart | 43 ++++++++ pubspec.lock | 16 ++- pubspec.yaml | 2 + 14 files changed, 376 insertions(+), 39 deletions(-) create mode 100644 lib/assets/images/reddit.png create mode 100644 lib/assets/images/revanced.svg create mode 100644 lib/assets/images/revanced_afn.png create mode 100644 lib/backend/api/github_api.dart create mode 100644 lib/backend/api/manager_api.dart create mode 100644 lib/models/release.dart create mode 100644 lib/models/release_asset.dart create mode 100644 lib/ui/widgets/available_update.dart create mode 100644 lib/ui/widgets/installed_apps.dart create mode 100644 lib/ui/widgets/latest_commit.dart diff --git a/lib/assets/images/reddit.png b/lib/assets/images/reddit.png new file mode 100644 index 0000000000000000000000000000000000000000..941a12e6c3a588bee3fe6e097300b1a4018249a4 GIT binary patch literal 22247 zcmXtg1z1$?6YgPYSU|eNb(M}EAtfcCAc&G8jf5bbOS6E|ND4}KNJ=+LNJtAvH`1_+ zbl=1O-s|)DAba+FG2hHPGw;l2*lV@tBt#5E0059ED=BCI00jIe1R%fze;j#?Uw}Vw zT%Iax5rBVu2+Tvl-w7R+-nsw)Y1iFftS{W8jNpg#u8O*@nhut(2vcVZ0D(a8S=-yV zn3+0S@HsfYPuYLM003-&vVxqJN9yi8!b3~@rsv@F8~n&fL9snhLqYvVW_ETAoBK7d z4Z>}&Y^U+h#60zG%UpJfVSwnVD>vY-}xfPnE>mWYl!^o(jf$Z_G&^ zdP)sH2@p74Amemtb=l{{BM%dvjenvyN;5??MWjMZQH}adAy3T1i(HpAgGM2{b+@(s z`0DCE) zr2us+cDOkgH2}l6>3$VOi`WlvBi3YvOvf9Jqcs-Po%?A`9*tf6FR4NmYUCXaS+N0nAFI zDqF#({+YBDtRvK-^=jEUC6!4gJi)^O{9-YEji1;wq`(z0R$yB_qi+cas$c?kgR+Xy z261uJsQO=lCc-3V(rn7#)7)r3Ca z_$xp7G{!a`B3l_Qg$x$X6Qy1=>&5rVTnw_+#!>}{eo$$27g$o+_=Hd>)3#ugyQ{9Z z>W? z7N?*K&5~hgX5UgL^&y4cZ!fl_Yr7zY#}QEj6x_A^djeN9oelxm0Uyz-aTC7+Mp4CU z|Gs-he`>`J8&4zx!k%~oB-S0HxHTuNB#BG``3EH7sH`}#TNT6I#Y-`HSn*ku$Qr5XF2K~mq$mWc{W-Awo?e) zLvy`ZmHdYD{taIncU;jkGmr3^=6BE3*CZp&MX7<6DBeus#46-rKw|o8Xl}H{LkxxZ z6Z7Ez+7V2BYFq%kbXRu!N93wNsSg`n$W0iW~QO3%Klr|UnL z)nD{ffLUQBKIitvt*%9WRKrDn{B`o);a3CD`OS*NFLp+kxLFbR^jmD?0rNA#BqD$? zm02}#Sd6?s!zto8ROy5CPiNK^&oO9z2RJwnIJkg2+p+GiKDsj8#7w>kUpVIOPM4u1LHbtXo)n+Dx`?TpmRB!{A94$#FeS zzr`kVn^FQ5)+>$nQcL*Z-K(#$*hDIQt)8;@17(UN;L`>ctbRL7oPO}3l_nP3L?w1n zkMmH6^MjEg1Pggl%}fHC&7CMPNdp`64#+mYI887)TvKF5B zvIvNYn({m9bmXsSLi4~VzOo7!*ash`quD5!xd0qsHpw1dPb~HuK|@X$_LrHfe!vIi zx~SeILk+wgVo~#UuBR8HR02f>%i_jjVN22<@GikHKf6-LipjHm_0Q_(PhI<5tNd1!$2s`sWnH*1ANBuKb2=&dcoEME+;HaaOpmD^4oIBKjvqF1rRpuX$Wci zKe~$IJ27|*RT!8&6X-zPBTOVhLf>7E1RCt499b?F!j&q5U$-k-!Xtd~V@(QUd+*gE z%_^Qit54Gu6$JnI@VrSOf3hPPI-W*^{8|+m!FPQbuC_@Efg5hpS zkbBSZp~H}niy;`SQZe{Hl=X}z+eP)Qch@w;FKF3j{47F=NtYD$uZDL?cv0QFe;oUs zx;rq)u`0I&1!bwAaU`5~rH+l0ql_zyGyPywRlFQ~-se3zc~MRgTx=9-7Kdi5{BIr- zN|!SHBjFJD!<8ajX!nJhl+4fgI5C@7`mfo=?=P%6Iphz>N|6WlRv-*+uc@3*~;aWm}wg#CqQUlhO zhto73lv9)7p~Qxs1!{a2&H1_^sq`4s*=M!Lecc6Ii8D}86#uy(b6(zGJR^NB=d`M*)j+m7j=^!WGwIjGg`g>#bFxp$dsvoQZXI(zIuv<4ClC zkG+9EaG~88c+7@mbf^+^4H7-&!&1@sl9|ibN&X%F>kN%_l+|+{@>nX8tOTJ!jz8dR zVc>hHlLBh$=FhblYVxAuVUE9ILg9+w@)@WBtg7oN!p=Is5((H`}A5lbM z5yb2b`_V~1k7^55ijly|n1Xm+kj5!%0XSVJIb_sS5IbM+$ogdWDk3Yd#Rm{Es#y>= z0MuWBW_;npJJAP;WCbE@rE$UWAk=`H`Jp&-|Bfv7-Bgvb4@?RNH*gl^R@881nWrE( z&?gZobzCsmmO7coPZ~#11)TCBY>KtW;)=NlOO4RbvzU;-xcVsZ)}XF0L`bSBpR#u6 z0yGm0_LdL7->jB3>710}ITsLTPD}@#+m{Rp4FyaD=H6fa*Ncd$S3h;5u$8gzz=$r2 zD=6f?Kzx0Avm&WrP>7$IXe(V;ctA@YR&8S|EqXypPP>g&h}&`qenQ?~WBJj3;*SEZ zEQzi3B(~_;(0v$8xuJu~xg32@Js)C1Y%Bc+KwSRs<0@S~fd?L-APP0GUX#p5_Y2Hz z+$|%wgsIcoQmp)pltPgU_-=A2j_rZx>#Lx!QbyHz`)wI|%nbi9jG&EF{T{EU-mf*d`Uo+w}sYG_4jeF$eXrADzLC5q1X83$% z8BlS(8DvWLdKk19^01E@JkOKKBQebIw94;5h40q0z)@M^|E*X<$7IXy8KxA?wiPFW zi`*N2tc4LDY5(7Axfz^)0ikfu)}UN@9Vn#Q*Gd-GA*fTa}PxJ9YuPwGtyX6dShS;GK4>LkS4F7@NN~NA9KF<>{&Ec;oQ=OS?}k4CUSDZ z0fr?L&EBNeppOsDh(VY22YyB|^?&Ehdz@%n=y-QlN+<~hFPw)_k8RlshBw0=_x~&Ai`h5z*lDtTkkgH3Xt68%FWy|HI zzbVdcT+Tk=M0(M$s}b`T0IK;3*Z*?}giqJ0fb%C2wWrj|8FNp>R+z;8J(=?47r^8C zWx8(uRglK-4B|&eEW}>KQTR*E8>LR$VahHapXer&Q6q3JM0as7((9)$KOFk%>(ilQ zW*7mzIw)+vAd67YNZ;mINYWkQxk_fPZp5b3i(jYq-L*>`6)pVi;|;0Jbr+MGy2**kTveATAt`UQEU1_&(ANi}GH@BzCf z6h6NQpdsf&us9L58{(^*T9aXG-hpq8a{TSOUvEefN=Z&6T5Ve%Tpe3%HXC1*8|p!B zTOkWKZ!XHyrls?7LsIT{ofxS!6C?eus5=K+T|&)C%$6E5;u#AQzyGFqgJV0TBCyeO z=4Q?6@x~7h61@W{-wP$JM=e_SvC2kdv?Ih@pe!0%cY*-jfX44ty_L%Q1Ru{gBOd+ zf4w~VcjN??`w^ERvB zxE*WXzuMazpf_7ye2^a#;S-{yvr7b|3=^Vu?xc_x(i*7deXbVUyaN0BAC?~znnkmx z>6ox%#E;g)G4{zN?aAty95u!ZCmuCXkycr z?KhLY@|}nP)}GGXQTuQ6jaDOcH|MynbG%<8O`EQT&z2MyIR$^hD0WTn0wJ~<>T*aX zQuGHC2)jx;+wN?0GBb#9%oGu#*rXFT!tdg7gEo}EkyY(X(}O-pry4r6werUzhOOC# zNPGqnIurg9l%p7ZzslV;8s0)BSrl~{*8zE(XejAdC>lLY%&+bLof6=7^YGq0bO$5QXnI^WxZC+($!+eqRO25@{wT94-ZpWT^ z?lIJh=1eW=iOuqFqy1Z$oUSTv)3;cKR{e)8xU$l(u({L~eY`9sY^&nYRHMST@2%>B z&{Rd2J{$)AC1|Q|otQ-Wp@UYlarnPGP&CyNh@&&7?$aHd?TDeGnfrDY%V<04DML-B zZpmv<5t1U!*)9MT?(`f)MDq3>Gn=UF{wJLMvFG(F|H_-BYfVY}%}#qlJ;$*X_c>;F zNrJ{x_YK>H$MunM5@wmV)AqvvVenr$Z>k4_O+3fUc@nYqx^~j1KoaQj;*R|g4^mG~ z*Pf@!I2Jv0CyQj@dY7s6{hji4jUaG|^a|tln z1|NPyvuTH|@dC3U1{7C}An@MMW2c?Iys2kxRl50FsZpnMo!}(<_oRj-rDI6y@g}Dj zot|CVRYRVoHwzd{=o0eW)=Ev!Miz`CzP?nf1U*D?09~0VS6o2t9?qbKu8+&FdXqBa zW{TF!aj69ll&^g;sXes4(J0W+t5N$b*ZyP^du~ZmF@H;qn-6~q#%=>BEid4MO*_x&nMdfQHw?cP4QV=Y{fXj}GAvgtb0>cF>vPkkT1-({UC3eO zIr3X;kS&KZE+9UKFN|T9SKxA6;6FDj`BY?#mysty{ny?l<6HdPFZU%c9ErV}R<@}; zcGum+R#m6*k{a(4-CarLd}{?#1U9xW{`Biy&ce$u zkei;}sy%%PqxqEQ;wE|~$zC75dF!3@&Cl#|bTQK8E1GRbAs?s!^FECm@_A1}*jtV| zqYtyU!PD2qv?_j|h8LWp-Sixq{1{dm(*wQU&Jj*m6rpjx^*d(lDMuGV2_jXoP|jtj zk!b{!d>S?6{nY4sEjnVX@n6J7;}4vjZpyWFxl2P)J|YR%!StfgsFZUxkYf2AE(1Be zAcc@~f>NyRaZbBidKe$)+%0~coSMOxFJ-K+FpJOUHyA{M(oS@ZsazMx^xzHM0ii;@ zCx1V2*wQ3mm;oe{Jy!CayG@xA`E+?}VPo3;ajEL8+Upae3g#Cx=G1JdZf~hXO+ZE? zs4?h=S01?VGWuXf-w-6hoyAHag}^{1mdo{}DbdmqVTJok%-d|seOKL>FkBSTBB5Z$ zGSe&>+J&!$7SP@QtUyXWts76XZ{$(A;(FUwmUy)-DTk@8Mg-wJ#P7UrmG`jou)}(8 zwzVM?6snbT=vPGI6R{0N3JhGdBLYo$jdMAXTQ2o`&;2v7nyGTXb>7yhs@M!<@xOrW+A% zJ09!IhjCi2rUg!Pli$^I%}-Lt!WEqGQH2Z#JX1uAoZI`Iv{}sqi11zW^AxGX>hku~ z8y4h*0f`kMZ!Cw31s0oQ9Z)$qw{?J)sH0i%{|yfMCsE{zbDs944VKB}2;T48460ao zUL`OR__mBuoUz3(1C8S*v~E{-^yAE|;Wvw7zpIg8ixl8#5T@)e8WIY>&rU0`mv-ee zJ$2nSGf3*CxR$oz2tADtC4^mh?FWeJhTNnUa+|A&rNbc-F>V{FS!Ao zzXvue;@I!Hs-|n)<*N-7hm4R%#{j(kDf&k79UCJ8fOa4yWAVJgHULdkc|WBU9Q6p$ z<(q8skNv7-ft8uT-kz-8{yr>4yMH-<*m%g^U*2AI2)FOrF7;5_`<8jmVWT5fzWCx#mq#N4;~QGoxR9@guIo&##rG-HLQ zF~5kAGM^DuK<yPkiX-yuvT5x|9nq*FR2TSEN!R4WCN3h2j)X zJRY%ZT8q{^^&hlU3zj(!oZJtn{C#A2Ivc&blD_Z$v1_!ombIl*!t-k#Al#(|SJPO) zdW|bvnn2Z=^QPmI)KUbZBkiHU#`F4X*ZRunKWEWxBVNDdIRRTNsUJ-Dx*HVX@S-xH zkOjFmaKUop2Q{c>kMtmYp@Z*YWMlf7x3oM?R&qV~JtV-SMEZEXro@P*>e<}0R1fW#~jUl~WBmxEmbNAMiv6-<=@L#iv@%OrfD>39YV`mZpvDE?w2GiYmkEZ01 z7EqiSJTEnJLSrss;B7H8p!oYe_b;*kdMWXwh}kf5M6fu#q9fqyA2t;)v2;YJ)gYtbo! zd}lncN{h$!PVNCzz?VxJn}s$drab3c)^TjMl^(P$R#cFfx_}hWkO~ndUNeBj8G*`X z+=K^)ap0R8@$0&Hcuv_SL_jARTRb{6*O<#2P`zaM^#?CQQQ^btE}NRh1_Z?-_nz&i zp@KqJ@w%Pq4s*PW+Waj{n%VYptf-8=$eT=-e&gQnbO?+>&<=o8Jjd&Q>n5d~Msycq zKno^CK8AY4Z3D7k8Nl!DP$hO>Q9tMQAMDrBSjbukWmvHm5%P=5(ji3-2 z+s=WF)Ig%pwrg|fnHkh|LG*mp@9gR2K!k#P+RRb{F#wXj0XaL)PUHtxvuYzHZvT3& zGxz;tl?0fK8%STh&_HA9c81AzCPdScw^ai%N^>HQqRlj<#Ev1T4}WE1byY0zkTn9@ zDnNunFJ}?UR}C;`ogxx@G7%B3gp&&bXStBcdG=COsM7b(6~4;LMn>CG06TUACkr>M z_3xjcv{Tg^v6r`$VaZP@ig-y<^{`CN?OybRDGBe+VgK7^_fG}&f#bz1@IWg>9A&v^ zDPu#G@-A70f!FY4($Z#;jD$6BVB6{4-8-(iAnuh=<@;0m(16qu6Hm`0@7MoG8vfqK zNk3D_e)xqRka_trZsl${^WWBH*K>)GzhZ+!;ND>JAM=Pe^O~=ZwE*1yX5~@M^HITX z@^L#@0!$IlZX>$%H?C2+j$edKx-2&F`e~xmkfpQSbbi=q4mF@CsI9RId@uxo za{PJ3ZD^M<*XeDz+o6nP9nRqwCu~wDUdKqtFh=Rs{n(2VL`HX2bL0mT8mRe zn8#!=%Rbo(2+W+nf}hN|eN5bo`=53k#4Hug$kf#GJkO^BH}L>uMea7w5~oX+sRO!_ zeiqrD1Z+@Xxe~x@@Ep2+s?{R-YCPZVfjZ8lULXdeASr?Z24}=P>5QOU2%jtN&Fs!l z1Ho4kpUBB?Da1#t(QDC{a(7N9FVW6D3LI1(n+JbFDmK)kW_5og)9GJN(WNomp0sq( z6_xA_{1d~mqEmp8A1Dz6VdfFt34fYx90qZbjkk(|^5C}ZaIem^F(6HCP-E3(!v~ar zXBZjtf($hrKgWfHQHZ*61GfHpSWWme&lRrzpF0tozoiW;POl~7tv&k4dkW~179EJg zD14jtS1qyNDnfw53YXk|B0k2U!Kr*HMs_tcl$8PCi1QstoW&$B%(F6>P>~-z`~t}| z7a2&U0(YvM#9O;OL377P2pkbegGOmMNp%98IXy{8!Ue7JcV2;1V*bRnnSD*jmr+Kg z<@~JB+?Vl*BiX#dHhVPZ*5lA^5m$fvIp{wI*|Ees)E}NNq)&BbrlQrB)_FQAsH=H? zN*!T({*;58Oj zsshw*k${WfKuVSoPAo>t`?mboqXp7O?N*79!KV@MIFd*wlIupqnB*xE3`Clk4anKb z4l+csEq&2Mf!4;IN9D_t^d_ZfSC~^>YLJx$p5~7&87)KL$byVQl|Uv*3Gct|mI(9= zu>@LwdK108pQrLqhc|?t(m+mN&!&!JlwYQhm_~!GPbay;zckc z43;88L>r!{*@4Jt*qL8}kU0fJYfUahF@yM+W2Liw%{sq;(2_UpH>mg&zs7BS;9OO~ z8&IlMS(B~9HYxY3m|PyQ@b4|%ko;n+Y)zL@EiOwWtjCyKA(LLyeX3-hNE3|`DT`K!u4r3NeE0sIRAU?#Fkq)_>aGf!A3N4IL3 zU6dcVsA8qI!gB0m0nZ6PZHeJ}AHT$TJNg>5$H=Z$lP`)L(L;_qy`0AXE2&6 zw7|Im@FcGGHB7pCp2aJJAO!l+9>0-~Vw2E~uqc@t!j$0$ zC|qmehjDy%GoAO_KFRy<>~9p0(gONei+&K+76@zGx{fea-;-OxPX?9C?BBV7ZpdXm zZ=BNCf7_h_J#y{SBSOYGCzd3cL;t@Qz@qc}k`p*GnN#&=cBxNdQuFFGZ-r9(1Z%ipiAT?%>%Yv|_miQJl;Dmr znGWU2!hX1bry$n$ zOA3BS`WnkvYhaQCVimVqJyv1%87?Zn4rmP?Od_T_;HzU{au-bX;k8}-iC~BwyuMKwoi17^&vJo?c3B9AHFgEWU4`MgfVS;OQim% zMABv+{4IXz+m7iG<0#{UnD`x?UfVx-43C}4X^$BjCPP+Wr(QqI({-K?z!N(M2%fbE z2LarhTF2`s3eP=vq!gLUgSa|01jLqgyART3%>$(Y(%xLEw+xT`aN?y8>oUB`&6b)a z-J*>JReI)^E^g~f!&sXb9{FstKR5E-oFVo)3P?K*+>>nLtge|}X|&?J62!IiC0q30 zzaew+gGyC?M2!#{U{$o@vt={|a6eIuGk235Y0+Fb4K-QhOe%G2TVie5{`1VZm80I} z&HIpj$7SCNL>s33;mYi$=+cj3ll>!1`9v-*(-q^UOQmvB2A4I^R3Rwld$86n_e zq^RK+(7KdmgPj}QJ{ruU#MP_3I0g}i9lWl;8HBU$M7LfRc>;cP&DZ>Nr+%0XhXp)8 z1gLT8e>RhLHS{3mi|B5G5+m}f^HVXZ&rLWdG7?kI+9ZfA+e0_zAj%ON!TwT35tFL- zu}xQ5kZ9z5vtrzKjWtxPMqkW3kG&32E)Z#Y)t(3`75{ddCKiTod%hJ*PR=Kmd@NK)LK-K*aD znr;Addc5OZf9rF$KgKIl-ec-G=(0~^I_`TwI_E}n$0CIRS|goc&jmMqf7sIO0MEEJ z|Jh{Hfz?$z$%|$u4udP%3C%E2t>>>r+lsr5b897BKY2?B9`1j?_+t#iA8N$~ODECY ztaBz^A#H!wmDNoRQrgOfm2i;`AvZMpx6m2%ilnl0q|^LGT}#^mvUR^@IhN2KEIh+| z;3i97_DR}@7;T4tXZ{EE!&YnHOE$dG|LyKw@0~DPtM9V|><|GUBo>?T1@9QW7IGw$WHr~fx~o$UZ}rCP9qT6qM>FJGp8_(47Qc!2jS^&9a9%tp^r>Z~t&pZyoR zRz~dCC}Lf;;}i}s3qgpA@o7$lpS1{)hXwtP+Z@0n>R=>8btZwierdYsr_^PmBHkIx z!4NaPp^|P^u&Dj(IyM>SYq@iU;Hz*Si4$?z+Hnf4>Lq%-t^9gKJ0xogw9rJY|D)hILYTHtfb?? z5inTF)(o*<4)fMnp&>+Gf048DDX2Jq23s}30`jD_e@H3fC=DhFw@N{c{6>5(alDxy zX^y&E@2GZLEF%@ia#gjG$!PGd=}tB6+U*d6h&*;v65~-`OmsTQ9Y$)~z=z&R6F4XSBC}hMN95cm|qz2*JzKAYb--hE$Hd%trWODMlQ{o)`h&M~_fmK5dlIIq-%BV42;}=dEE1Z_Yqot%vIps7h`xHAOQ|9D>Vivj z_aGRYpu&>m4r|-Zzs$UCy?5in3iTz>;VqwSDEUNBIlo%e))COtUgZDD&L(&_*OJ>{)p5aI zV0{l$US~=DM3io5ao$Z{MeLCe!3H8^!$I{G|LoVg`QefNI(*|NFPx8(8GWt67RV|=vmN?bZadT zo_MZCVXWA1;Gjmu;O{7-pTxT2_XqB4`AU10_45i&<~gdk-Ol5HW|4Dc^;1gr*q(73D9rW6#tb>a$w@BYsi`4W=1rdfRrxrX{S-?R zQNHhANyWV+Z%mTsUo#$WDy3Z}Pwm;vU4Y#yv=2~8edKEAPzq-X%@dF{o<)Loe9iU9; zli7PtiYtFEbyTV9o=Dclbj$b@grCyw$cdFZViF zW=~RXo|-pkIOIZ&oH=I^>i0&5^%>Y|Cb#b49s|m2xI$PCY)2XyOvU-+A6uBsFBLu@Y9E{&D{<)WNGb}n zp36q`B2#F-aq4p%O?<_}i3ezH(Y4hJE|W z)YJVQ)OQLjl2ikKr~yK)$_s&``yN*epqXUBu|-QG4}aIm^>qza9{HB0z1c@@INW*q zx0CDTJ6I!ww8lm)l>5^9O<@!8x^y&7dw(%nGQj`anMmOz3K3{kMU&oym3|h1hEMkk z5VO_&E9U}y7;dWdiH^75XPHtiT4xujYl16J3cD>Z7x|Fv*&=z-s#9K#v)={~WgMiz zo3vZEj714vgJE9IB2vZMVnM4eQ`qh=xD&yH+k}!wyuR!NMq__kDHX;7-#VVRf4Isq z4T8wl0okVO@OpD&k6Xe;A%yTl8*LoJnS7UKPRaDEW12YyH{f9b)mMD(OU4W z$hMSm>FRO_;aY@L=Pr7Io)$ChNs$n4M4PmwRs&Kq_K&0%SLzl z6kx!}dfz6N^JIHRGQilvW?pAaDw_VMSjG-!3zupu zlMClyrSJVlOQt6y*eGE0gL=2V2~E}BcLKR{U>n~A5MG1B)W$cHf51$Zf(wB0kL?Gr z+cX&p6+|3YX!@{+ewJpxRJ#{BblF~;1}>s_qPCS%Y4AG-z{542U1pa^3jo(cn6%7& zRS0Q+%rkz1>mk>ija5EMzsEaVvx~W10Y%$1NOi1xo)>=uuY|JHg}_2y{wd*zrQ{-K zcFs%hO}9uimD^ao_>t5+g6Q^$f!dc^n;O`pk|g4x_= zxLaF*mwFw9U<6K1GN>ni{R}K_9fx~Fi|^e0YoqxI&4-+|tH6uiuC9X$_583F)0E;< zpk#FY%&}dnRa0T|=PeR1%C|siVY<%hSx+!S&lQcKWr{7T?6SYxfs;3WjOF=A?@5E*B|$hc+>_`i@&}Pv-0&nMXXrEyrnjQoWf2`Ua~4GmCLU~+a7DRi`m)FD3aFO&+ z#W8kz50v*x48dTzI_*D#8_e+L9H|vJ=ka}4NfaXPY-W$G-rv>L9-j_-W1f2OozROH z!YNO(TZ>ZnPGz)P^!(ED1>&IB8WX$qDoYoWSLNg*p2i+aE~0gY+m;}mfM&m$RI~aG z!D}JKEBC9hAVDh-R^Q7SC;x!9Ki^`_8u5yJ~{f5lK#d1(Q;!j`f{A)b%Kd) zOU@3V*iE#b4)Ja?>y=IO{`q9$LW#nJXo}yvLkQ}hwqCZ9^O1_SH^};t`K&*SFR%$n zOgnWYx&3t7V3G1r*YkM(soX8oj+gH5EM?;QGpy69>Or-w2FphrqXLym-wR)o$?`2i z^0s;(D1*yzR_)juIypOa{N=Vx@@Qv@q|B4_<~VQvw4k%>5_O%?u04!8G3;n~mSbt( z7F>|uagg-k!m{#6k6O{DZ`LQ#_{+6*Es{`I*j4<6o*fDQ?KX((ppPXVZtvYN`BmST zR&0blb!$~8w0!ei@%@r%?GI`JOAab&Y_nV9yoYX*i)EMf**_NP?S1`~!7zns0swpX z*khx7&4{LLUu(GGqH=VHh-Ko(la*0TKevrYJLar069iu|_rbtteb|-XVB!u9ccAm$ z^3k1h-~C$g8Gdz#Cw5FeSWY1``TZW#Po~dD0B+NuZby3mvH>Au)uwXs&+@yX%aWFz z8?)S9S#stm9;^ayn0P+9QjJU4@cXk=DFCt(*(QG}IQRlZiZh*vt;VVJYJ*B8y1k2M zY|Xh%7KSTa(=XG@^!8~At*5&7bnEQcC*vQqUn~>XS0{lr@P?|F_g^_&^v!)pzf!D! z3x614d6yy>`PN|~%}L`Ou}_6P_*-bemfQfXpBPW=jIxXMzX7Uvi6P&fYgAa(qH$ob z34P&$^$n#)-c{Lronta>8sJMYt}p!uxbng-S6c{}&I)*kqj4%ZJ2z6wfO@s#&ZOck z!F$n`s-Rseyl(ZsM18qr;O?^s%u&pYqwi1U#t=2 zE3B96k#P-U^P!gHv4!7GDNBr&!ODC|0*=}D%bpL!z~N)=qIY{H2faF|0Weby4YgI1 zN*Fae`we}s?RIN0Mq$Z{&-8qIJLJb*;%Zw~#%=oovkMkYcxeFXp$UC}tdK7Vr#hxzw8; zH@V{i&2K_DD1ytMH_~IlV66k`-${_!9CD?2;S=8hfzET%vm&(sxUNMWrqAD};9jil z$+Ai-Wp6%oZ18gYgYo*z2>>*wykjEl9|-|hA8V_vPTC3fHa>l9;aOb!s?-e%$ZchG`PRFJ z4;b)HFrkapdqg-G!vAzsW06w5dq`Xn|Sb~ zl^%Ou8qXx~BnLk_Tw5bTYAk%5c|#lbsC<5p2#Y+nqEr`p>pPAhnx50!ekiKLUj)f? zexDT`7Y<+67bFWVqLo$ny;S3!S>FqO#~{lyDR&>A-J2MYjUUe0{34mDnkEFJ$OgMY z(n5R-V!ls-71K3hB+&xSuXt&-jv6psKS%|SDX!0`jWxWs{%7-<`m?vrr?>Y%K~RzA z(gG6Gt8fyddipG4Mj}+_diVGq$d-V)*hsRZRbDvWl*@@^-@ak4}Ub; zYrz{U@lpbLEWjZPaSg|71!~%Mp~=g;@zxgK6dpu#b$S;G-@HyjU=nEq9%x7#bqMWp zik*;wC8*Z;uIJW-k=OjHR|JVeA^D}5hpmoFP9wQ_XxF&#l`kM9g6&50ZT6!y?mHwc zpMx)=d%ZcXE!3x^H^ab->i2)SN2wlHVrqlP0n0syuWGrV;3h~x>g+*F)N05J^ zmsvdMmj@V^&Q!)SR5V1dtUY!==(ai@`rFiy7`U=Bd1=g;{Zv!_v2&3jIf$Srn&E=( z4LIuLIXnI;?IaoFWNxPPHrY(y7KbZDY{;&zkL&@UzqXr-cibtOAhXwN!s~7!JM;^_ zj@FQ)cB}1hdn0o|%kkFm*d;t-Y3x=u=vl?A+}0qi=qp2f+-|tt8}T6SSiPRImA(xTg)>U*>#Ea+-lQ+BJ81b<5ij@N#t_g!{67E0Ka1 zY}#w1LOoY*rmv*Nbk!_dgjZG8IHJX0XNfGrY#$F6Y2xY^Kv2*uCXXz>jhGnU!+?{$ zvR~mp1zH8bo&_c{+CAJ1E5+U3GiN%3dUl^nuqLfWzf)WLB}&Sl^6ID*gmsHo+O_SR z#XGz};gYhf!+$xui%Ffsi(vf5TlJ{mW5 z4VmFrltKLogdmxoI@R-)J0+Gh%Ha+Hn0OdaHg~ex00v_xgSQ--xBpV-v@$zO3KK3J-zu#!~>GtEROZ zA52|a;0+tg_Z8Rxsiu8tM!xw)H$|2D)@wRG8610YLYiTc^;Ek$vh^oU?|J8ZX?T)X zCBw$M{%PGSQ1)a-l1xhr-;WlTtzsKuzu&n35Uhissczm97ueGpJg8JV4O%|hF-7~e zr;E;lxryeeR8+!(vm#5T-%-?|R_i5OV!K2GZ@2M>E&%RVvuns1$ zP5t#m`)m@7pX_~&PjBCpBW0KYAuvaQ)d>Bfa@Kv#PFxFcED6sOg~mP@3g~A&P3veA zDW1!$(A1uJ3JD z%IwaJk*M{ z-6a>H7z^Lz{}Owh#<0ogHzk#YRq65T(ilp4U%MR6U2ogD2bLn7SrJnt60Sk+%-6db zy4B;nIg&1wHcS3#%PehI_ey`df#Df`Mo z9D0(9NkzJ-C~b=%^>2u!AdJQo4#kO0w0-LQmuebS%@-qH`jaCf4#b1A^)hu}owvoB zTeLgV$hUB@mzp^0@!QHAk38=XBaPi!Sw4QZekOkXO&Uo(!C_y6AHBRyO;(@1jmG!< zg$>SgEt^XY5AM~OW$Ro-q!g&$4?v6sYXV2_9k}RNyBi)VL?yTHbs8pBiLth<&^#aA zwmSIT%$w>hNtL>1?-Iu7D84CHXII%ZXp|r05GZYJ)kdF8L8nQQf{K#Qdd><0bB?)4 zvscnAn<9Vus3pY++Ewh9Ws(v$RDZe@Ou0I0^C0B{MfF=Wk}^b;q1)NmY9kRtMcaPd z(-=FmGVXx$9vbNX3VHqcDDBzzu~h+&Gw%9rdXXDOkN~7}ZDzQw7o1~VC;~6ofraNq z$b3g*@W(>G2ldOmrPjt@wiZz;bsg;G*0d;&%>_m^*4&JV?>_&M8AtSVwk5-I*S$%z zo9I;)>DbAR*T3>EG4beGKPuZ64cxiSNgeMe1^^n>yZ;wpbZp|>sd+Zja^Q7E)|KB2 zw@9Z54zNsB7ZYb|zjkO}@FHW3KhK`0P3VEgC-Yu*WdR^MjGdN z`i7*k>tGrwS_%&>v-RwkiU)&;OVe8xM3_FK-1n1pnWbf!Vu7f->1vY=HrktMt<6p| zJDIXB$2U`xvG?e)+nUJLu2azPQ60UN{I@Nag|j9~{H^T*c;I~`tc}L*HopgpVcGpU zV3n*r<@P8|VS8UtvlrXci0ulpq?@cUpvu-yyD$V?4+rUaJL6*yl)dVyft$B{ z4zMxqZLZnwJlcVZQh0-%5_{~)FLcx9y!QQWTA!l=dOF>kF4U-4`)M1k{T6*edE=~l zY4*M}HHJ&!%E~00ozYvxe%?{;1uxdLJ8T=i<@!?+=pc=BLU(pWoBUbZ-Dln$nXn72 zMw3^(F{Vx|`g%eQmBykO_?M;-_@mi*deOqvn8QxReA;jBqnv20kYYRyCW%&CA~5{$r+n zVT?5rLbG;2xsBV)^a$(yJPx~Y@n4-F4Rul%zmL|&O+CYlU;`U?FX{}+C5%_Q4a~Z^ zKR8A#P)h9mbr(DOVXgj%i$AEREO@eJK`&T&w#i?~3=1$hY{0GOOPfp(7Td(BUm>*0 zc1q6znX0DU!EYM5{^D=n7GZP7D6IA> z(YD%yZ_ZCb^=t$|L8wQde`Bxg1@@IxKWc|&zKwd7=rR2r+u$;r#^NBa8Jc)SMEt%f z4f=*3!TN^Jjr9$$i%L7q8&a;?Kfa`yPA-#$K{oX}qOKV>a~<>B)^k4Bi~0^bEDfH1 zHyP9RyZ*~%Rn-d$mU=HZCG&RXWpWz;@M<94M^nefa&GIGUMKFVv=dRc<8Yj!W~fm! z?*A#_$^)V7y7)6Q_842%EQ7I?WynsJjAalhiG;C)A+lxcW+EAlwUi>e;^i$%B1^`S zC9<|4!{D_<4Dq6f@0s`eckbMC&i$Qpp65LG-t#MHS2Jw9gVar48w?Jzrpt~G?iRC0 z*}$gC52mu^&cPD{3KF%zvvu%T@9jA4%Vq59<981%BLzn?ZI=QapKq7Ut+P0BFO~GJ>mE z-+YeXk#5*s;{@v&uAKq6(F1FtZ3&#al+yY+aC49?KyCWR!c?{oSb}Zi@pSLHsE$)0 zXTaXe<2&a*?fae>KuCh3R~e%FJ#^hYCcCb(VCv(3cgb>hf;)GhrS6+Dfd$ErT8;8tMT!>Kj%dLp+7sIj0 zapWGY+{I&&Zx)9X9YWnTpzAZCD*<7fJEO7iA8Y#e(dd@+&4kBY$Bp=96UQ81iQe|% zavZaohQfS$OVfL1Qe7_3N)Vz*-Q4Di*w-exo*Vfh&nlmwFZgp_=|}4MCxw(`IcVIm zMq3@sd`n4XJMAyx>>w?zg0L6$4ro4jx7~~D`2zVK)O?^jK)-yu>eS(~%gNn?&4RF* zvm2o+FI~_`6VcV;&6wQiu$^7QtiD(dPPLTx#R|0|0B~N@lzmXj$94YZE7;tRwK@IA zCcj?JXi9&(+Rj_hDnGUHwNusoBwOrw>fjc9@^r+Bz>0Z0itda!pJ|LZ+iVNuFV!U1 z=;*I0u|Zwea&>j1AGL3I(M3rwDjjLD^pr>Q+5p)bpgM8xYzAfJPW_G7V6r*vT`_?0 zs-AglcH(%jzvkV5+k#4eeSsXyl#<~l9H$ro1B@%?Sw>F5Zm@p%;IZ;#6cPN7c549A zdd7{1I%>3*q1R>?p%nZ~;8z;H=kfb6K-fft`h=D9XHZs>jt7$5E-lLT;X_*hGHq46 z^DK7}5`xzCc`IC*myK3U+z4FJX2yu$UC##Km4!9fSk*K{!|xG6}D z7yCw+g8j(Gyz#~RTEF_rPG=*O(d`S3*ZHE|}~ z_$M~&rLOw%k__AL4~DjRxx@nNNq;(cNWu&t_=)#g^^vf5Z&>pkm=pgh9WHpP&;Pv? zk2R5SQ>2_Rn`jzpv8vU1r52a-I98gXRc(sN?x8{a~wEL&-`Nb2>^Ib>+&zC(c!!Zy<1qy zXz(;{)Ht}izh-uBly2RN^H16n>~c{}ct>kLevZ%SbA&9|44m!KFH`2z27n|hIj`$W zRH?cP=b}4`<i<6Cxmt|Uy9bex)PAI%uQW|MC5BA&z=it#UvSEPE zvx1vG5Y$MES=p6{@9eCcNibIP3`q$T58Qxb_ncCTotVa_u2k*P(ui3XPP(%HQ9S9* zPg#s${TcahoP65Fa-kqzrMe_O@b0K@4)UrqeqwpVk7wclv68^EBMHQCrNmQP3d3l& zzjtJu8pIsiPR0F+)UA#cGQ2KIEq70)9@wL&N+fhXbF?mrk4cai!7HonIlW4i8pDAm zf%z*CW2UONI&LJ&@q2?y;7@UhPchdb{d2<8WSqo7d6id2b*2GHf!7|Jw!)=tl z-h3+jR;}}ws^R6?Tdot0Q*|P%+Gex2t_wXQwd3M;c(eZI;PfI>(f#^mZG7N+DkO?=dzFM-?G+T)}}=7L#KBc8z#U?r~0 z;=*O!W~yfu9RUDUi^{ZEL?lD8KND?UL-{DP4gyd(4B&^IEnq+Xr3GJ1)cad5WkCRd z6+TYhdWcU>NkO_1IfAy*S2!!1S&Pb1Pv1R^6w#SzF+-#IaJpRiH|u}p;VpeFm*D_b zGnNBvO!^rFQXzCtlDDX@RgN;}AwbbDX0FFEcu;L8Q@mf4V5D#Oa|ba09kHiTlMKat z3-B|cukdJJ>p$SiM7{#sZD&Ccc9$-7{5!+zD%GG3iFX$6mRd6^so*v*WBaP znPn)yZeUCd13&mWpG-pl6kBYkY-U@aBrorr$cH9{s{2OXk*wINiA&tz!bC2stUM0{n!J|H<;u%JORcyqS-;%=ZKK z`OaLl#zOU!FQSoLqNt%-(Slt#=@b|64QuAl7Axtu!|+l>K&Q^^PlGveJ_}LcO;@VH zoe=hm|M^er1V!M{vI#x2X$;sDP#UHas~CYnKN>E%a*?!?RU? z?k~O_(3jrO0AAk__{BvmWH`JJF0AcB#LS3biXH&p5Dp=*%@g3Wig)rk#*t=DPbnLL z8=um!%h8Tx{P}pBU->AoRGbjOcI7%`n#7{O%X7CB=JCkQ}Bw98S+H8v|+{oR?idJ%^lYbpba~ zOA07^)qRC+rr9dB$WygM5>-YhukK1*`I7CjQwLj35>6(^h+(her8Npq0!HuUHq$X% zn6VK1XEJgVb#aag=E3Cvw)`7rJ~8*ai7W(_ljb2Bx;{|WC=j6TL3QW?m>TrV>X8cs z*FJw|G|ZF`#Rwubb)f|ZQBK20arbw;R>t!c`dEo1y~gwyp3nAXcul0=$@v z+mySGG^)XP7$^HGOJJ&*tVRyw2?4}tx&&`lpdY2_iHAeLmL1DFfV8Pta)Kr>rEfE2zR9J$b^PZF zodr2!Kz?LH()N9`D3AFqzeTHG8;~hB?7G zlHik~Wr>+g)w`9g^)h-LA`kCT*y?=t}JB#x-vAM#`|>WjXa-lGWMQr}OT z7v07s^2|?LW6;PfQ6feo^p4eNhY1j4w!pctW_R|Jvc= zz-t)dn}FPHh z8XW6X)i;3=Ub_gJFyFYI7@|4ywZ#HyY6uCE32qU%o%{H82B;0^!PIi8N0-v>DfXQz zlYOnn3ac&~|My+@h(|2IchsC*=->@8;wfS=h?-*E$)-g0jW_a@d+Ax>BLL!=w1c`> zlf(kp{Fr2Uz*HdD`>KCC$?Vn-{_iMJpzQKpD|kl}OB2%yLp0z*F!DP5@N*EHyfX$M zT&2n7l4;l357{OLK*N$9J*F@4w>MmKjOw-gjRP`OK$vXBeLb(6V^99pSEvKLI11H1 zyI~*T$=>(k_fzvw$uhWk>5>6hOypilcyR;M5!1AX+0neX%w!qFcv@3Z(;$oTUbt&? z)*AByFtDcKcd*SLv8DJ-@4WaCtLh|wIASx77D~f{aKSero2;SJUYbh(rt?l(!3f=# znn+?{70{usT;RtN6*=ZV%G;LVVRJ*FA%b6)j?7XW2N1PF<~3&)9e8!Pb@&zbg7_wr z<;X7-)pE=wYA37r;C#PMivmddPK8|r$djo{X(R*9K3#PP?42&@Ct~8 zJjzscK1&01L?yr6SehnhhcGuty|_q4l6K%kY2AV%ZB4B-;GbpWR|fjGG@33i3EnSOizD zG)o7TLX682lTPo-25a=FDZh(%_2ql*a&Ge~R;ouDdZNEJMM~+*{qgIjO_BfP&uR({bp6tP${pa$#%s!yL+`=K6>7AW`JL^fL<>A*B?RZuqI*NSEc} zJV5?Kgc0J1N5<_-c0={`;#QQ^rQy>wQ!H~0bRo`4=|z@+R-WFlWtI{cAbepS(p0Al zMjuuz(<Yp#n^&`!o}{9I!jx6VE6wjk!x;86QXmo_@N8tMeV8Nz^4yR!M?#KoI#+)#={y5TX#tFxE&Ano H?4ADs98>Qd literal 0 HcmV?d00001 diff --git a/lib/assets/images/revanced.svg b/lib/assets/images/revanced.svg new file mode 100644 index 00000000..7318abbd --- /dev/null +++ b/lib/assets/images/revanced.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/lib/assets/images/revanced_afn.png b/lib/assets/images/revanced_afn.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2767f54fad69a35a0e6a389f373d36191bb937 GIT binary patch literal 24197 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 BdJzBs literal 0 HcmV?d00001 diff --git a/lib/backend/api/github_api.dart b/lib/backend/api/github_api.dart new file mode 100644 index 00000000..5823e191 --- /dev/null +++ b/lib/backend/api/github_api.dart @@ -0,0 +1,17 @@ +import 'package:github/github.dart'; + +class GithubAPI { + var github = GitHub(); + + Future latestRelease(String org, repoName) async { + var latestRelease = await github.repositories + .getLatestRelease(RepositorySlug(org, repoName)); + var dlurl = latestRelease.assets?.first.browserDownloadUrl; + print(dlurl); + return latestRelease; + } +} + +void main(List args) { + GithubAPI().latestRelease('revanced', 'revanced-patches'); +} diff --git a/lib/backend/api/manager_api.dart b/lib/backend/api/manager_api.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/lib/backend/api/manager_api.dart @@ -0,0 +1 @@ + diff --git a/lib/main.dart b/lib/main.dart index d92f3e3a..a4379dad 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'package:revanced_manager_flutter/ui/screens/home_screen.dart'; import 'package:revanced_manager_flutter/ui/screens/patcher_screen.dart'; import 'constants.dart'; @@ -17,6 +18,9 @@ class MyApp extends StatelessWidget { title: 'ReVanced Manager', theme: ThemeData.light().copyWith( backgroundColor: Colors.red, + textTheme: GoogleFonts.interTextTheme( + Theme.of(context).textTheme, + ), useMaterial3: true, colorScheme: const ColorScheme.light( primary: purple40, diff --git a/lib/models/release.dart b/lib/models/release.dart new file mode 100644 index 00000000..6b94de84 --- /dev/null +++ b/lib/models/release.dart @@ -0,0 +1,9 @@ +import 'package:revanced_manager_flutter/models/release_asset.dart'; + +class Release { + String? tagName; + String? publishedAt; + bool? isPrerelease; + List? assets; + String? body; +} diff --git a/lib/models/release_asset.dart b/lib/models/release_asset.dart new file mode 100644 index 00000000..3e65b7a8 --- /dev/null +++ b/lib/models/release_asset.dart @@ -0,0 +1,4 @@ +class ReleaseAsset { + String? downloadUrl; + String? name; +} diff --git a/lib/ui/screens/home_screen.dart b/lib/ui/screens/home_screen.dart index 61897628..735c257b 100644 --- a/lib/ui/screens/home_screen.dart +++ b/lib/ui/screens/home_screen.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:revanced_manager_flutter/ui/widgets/available_update.dart'; +import 'package:revanced_manager_flutter/ui/widgets/installed_apps.dart'; +import 'package:revanced_manager_flutter/ui/widgets/latest_commit.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @@ -8,52 +11,61 @@ class HomeScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( body: SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 0.0, - horizontal: 24.0, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - "ReVanced Manager", - style: GoogleFonts.manrope( - fontSize: 24, - fontWeight: FontWeight.w500, - ), - ), - IconButton( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 0.0, + horizontal: 20.0, + ), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( onPressed: () {}, icon: const Icon( Icons.more_vert, ), - ) - ], - ), - const SizedBox(height: 12), - Align( - alignment: Alignment.topLeft, - child: Text( - "Dashboard", - style: GoogleFonts.lato( - fontSize: 32, ), ), - ), - const SizedBox(height: 12), - Align( - alignment: Alignment.topLeft, - child: Text( - "ReVanced Updates", - style: GoogleFonts.lato( - fontSize: 22, + const SizedBox(height: 60), + Align( + alignment: Alignment.topLeft, + child: Text( + "Dashboard", + style: GoogleFonts.inter( + fontSize: 28, + ), ), ), - ), - ], + const SizedBox(height: 23), + Align( + alignment: Alignment.topLeft, + child: Text( + "ReVanced Updates", + style: GoogleFonts.inter( + fontSize: 18, + ), + ), + ), + const SizedBox(height: 10), + const LatestCommitWidget(), + const SizedBox(height: 14), + Align( + alignment: Alignment.topLeft, + child: Text( + "Patched Applications", + style: GoogleFonts.inter( + fontSize: 18, + ), + ), + ), + const SizedBox(height: 14), + const AvailableUpdatesWidget(), + const SizedBox(height: 15), + const InstalledAppsWidget(), + ], + ), ), ), ), diff --git a/lib/ui/widgets/available_update.dart b/lib/ui/widgets/available_update.dart new file mode 100644 index 00000000..4015bfcf --- /dev/null +++ b/lib/ui/widgets/available_update.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class AvailableUpdatesWidget extends StatelessWidget { + const AvailableUpdatesWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "Updates Available(2)", + style: GoogleFonts.inter( + fontSize: 16, + color: const Color(0xff7792BA), + fontWeight: FontWeight.w500, + ), + ), + TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + primary: Colors.white, + backgroundColor: const Color(0xff7792BA), + padding: const EdgeInsets.symmetric( + vertical: 8, + horizontal: 18, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch all"), + ) + ], + ), + ListTile( + horizontalTitleGap: 12.0, + leading: SvgPicture.asset( + "lib/assets/images/revanced.svg", + height: 26, + width: 26, + ), + title: Text( + "ReVanced", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 2 days ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + ListTile( + horizontalTitleGap: 12.0, + leading: const Image( + image: AssetImage("lib/assets/images/reddit.png"), + height: 39, + width: 39, + ), + title: Text( + "ReReddit", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 1 month ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + const SizedBox(height: 4), + Text( + "Changelog", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + fontWeight: FontWeight.w700, + ), + ), + const SizedBox(height: 4), + Text( + "fix: we made the player even worse (you love)", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + const SizedBox(height: 4), + Text( + "chore: guhhughghu", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/widgets/installed_apps.dart b/lib/ui/widgets/installed_apps.dart new file mode 100644 index 00000000..7ecefd59 --- /dev/null +++ b/lib/ui/widgets/installed_apps.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class InstalledAppsWidget extends StatelessWidget { + const InstalledAppsWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "Total Installed(3)", + style: GoogleFonts.inter( + fontSize: 16, + color: const Color(0xff7792BA), + fontWeight: FontWeight.w500, + ), + ), + ListTile( + horizontalTitleGap: 12.0, + leading: const Image( + image: AssetImage("lib/assets/images/reddit.png"), + height: 39, + width: 39, + ), + title: Text( + "ReVanced", + style: GoogleFonts.roboto( + color: const Color(0xff7792BA), + ), + ), + subtitle: const Text("Released 2 days ago"), + trailing: TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + side: const BorderSide( + color: Color(0xff7792BA), + width: 1, + ), + primary: Colors.white, + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Patch"), + ), + ), + Text( + "Changelog", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + fontWeight: FontWeight.w700, + ), + ), + const SizedBox(height: 4), + Text( + "fix: we made the player even worse (you love)", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + const SizedBox(height: 4), + Text( + "chore: guhhughghu", + style: GoogleFonts.roboto( + color: const Color(0xff8691A0), + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/widgets/latest_commit.dart b/lib/ui/widgets/latest_commit.dart new file mode 100644 index 00000000..f28a536b --- /dev/null +++ b/lib/ui/widgets/latest_commit.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +class LatestCommitWidget extends StatelessWidget { + const LatestCommitWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: const Color(0xff1B222B), + ), + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text("Patcher: 20 hours ago"), + Text("Manager: 3 days ago"), + ], + ), + TextButton( + onPressed: () {}, + style: TextButton.styleFrom( + primary: Colors.white, + backgroundColor: const Color(0xff7792BA), + padding: const EdgeInsets.symmetric( + vertical: 10, + horizontal: 24, + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24), + ), + ), + child: const Text("Update Manager"), + ) + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 0cb735e1..133a2d47 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -102,6 +102,13 @@ packages: description: flutter source: sdk version: "0.0.0" + github: + dependency: "direct main" + description: + name: github + url: "https://pub.dartlang.org" + source: hosted + version: "9.4.0" google_fonts: dependency: "direct main" description: @@ -110,7 +117,7 @@ packages: source: hosted version: "3.0.1" http: - dependency: transitive + dependency: "direct main" description: name: http url: "https://pub.dartlang.org" @@ -123,6 +130,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.0.1" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.6.0" lints: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8b61cf6f..6dba6bec 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,8 @@ dependencies: cupertino_icons: ^1.0.2 flutter_svg: ^1.1.1+1 google_fonts: ^3.0.1 + http: ^0.13.4 + github: ^9.4.0 dev_dependencies: flutter_test: