From 38d5d46127f15f2cf7327c60b691b5ee8f4aff78 Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Wed, 25 Apr 2018 18:41:07 -0700 Subject: [PATCH] Revert "New Flutter Gallery UI" (#16984) * Revert "New Flutter Gallery UI (#16936)" This reverts commit 7038597b02b46d89c23560cbe0e307e55b304b4d. --- dev/benchmarks/complex_layout/pubspec.yaml | 2 +- .../main/res/mipmap-hdpi/ic_background.png | Bin 18209 -> 0 bytes .../main/res/mipmap-hdpi/ic_foreground.png | Bin 3581 -> 0 bytes .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3951 -> 544 bytes .../main/res/mipmap-xhdpi/ic_background.png | Bin 31807 -> 0 bytes .../main/res/mipmap-xhdpi/ic_foreground.png | Bin 5455 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5326 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_background.png | Bin 72301 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_foreground.png | Bin 10303 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9650 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_background.png | Bin 125855 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_foreground.png | Bin 16499 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 13901 -> 1443 bytes .../flutter_gallery/lib/gallery/about.dart | 83 -- examples/flutter_gallery/lib/gallery/app.dart | 210 ++--- .../flutter_gallery/lib/gallery/backdrop.dart | 330 -------- .../flutter_gallery/lib/gallery/drawer.dart | 349 ++++++++ .../flutter_gallery/lib/gallery/home.dart | 428 ++++------ .../flutter_gallery/lib/gallery/icons.dart | 50 -- .../lib/gallery/{demos.dart => item.dart} | 753 ++++++++---------- .../flutter_gallery/lib/gallery/options.dart | 466 ----------- .../flutter_gallery/lib/gallery/scales.dart | 37 - .../flutter_gallery/lib/gallery/theme.dart | 62 ++ .../flutter_gallery/lib/gallery/themes.dart | 65 -- .../gallery/{updater.dart => updates.dart} | 0 examples/flutter_gallery/pubspec.yaml | 44 +- .../flutter_gallery/test/drawer_test.dart | 101 +-- .../test/example_code_display_test.dart | 19 +- .../flutter_gallery/test/live_smoketest.dart | 56 +- examples/flutter_gallery/test/pesto_test.dart | 23 +- .../test/simple_smoke_test.dart | 38 +- examples/flutter_gallery/test/smoke_test.dart | 156 ++-- .../flutter_gallery/test/update_test.dart | 6 +- .../test_driver/memory_nav_test.dart | 9 +- .../test_driver/scroll_perf_test.dart | 11 +- .../test_driver/transitions_perf.dart | 4 +- .../test_driver/transitions_perf_test.dart | 45 +- 37 files changed, 1253 insertions(+), 2094 deletions(-) delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png delete mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png delete mode 100644 examples/flutter_gallery/lib/gallery/about.dart delete mode 100644 examples/flutter_gallery/lib/gallery/backdrop.dart create mode 100644 examples/flutter_gallery/lib/gallery/drawer.dart delete mode 100644 examples/flutter_gallery/lib/gallery/icons.dart rename examples/flutter_gallery/lib/gallery/{demos.dart => item.dart} (60%) delete mode 100644 examples/flutter_gallery/lib/gallery/options.dart delete mode 100644 examples/flutter_gallery/lib/gallery/scales.dart create mode 100644 examples/flutter_gallery/lib/gallery/theme.dart delete mode 100644 examples/flutter_gallery/lib/gallery/themes.dart rename examples/flutter_gallery/lib/gallery/{updater.dart => updates.dart} (100%) diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 20d15ea655..64ae2fa498 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter_gallery_assets: git: url: https://flutter.googlesource.com/gallery-assets - ref: 43590e625ab1b07f6a5809287ce16f7e61d9e165 + ref: d318485f208376e06d7e330d9f191141d14722b8 async: 2.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png deleted file mode 100644 index c5ccd079effcd01312ff8b6457b9ef0a6ca32e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18209 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 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png deleted file mode 100644 index e3c6fb0d528ddd064955540cade0ea926596fff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3581 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 LJd3TwxZeFgkP)B+ diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index b8f67f1933dbb23636f092d10e5e1fe1abbb437b..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 3951 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 JPDHLkV1l+vm7)Lu diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png deleted file mode 100644 index d05e1b6799b0816fdbc07b61629bea3835845e12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31807 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 T;WEfzNCD<1R>n9(cg%kPaL+bM diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 6b18864675003c35952d48d544c12a9c77e10c7d..09d4391482be68e9e4a07fab769b5de337d16eb1 100644 GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 5326 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 gOTKsnPiyB+><-WhkNq7{#W??(8S>UIl*&u zbadwp@996LqoddV=g!J}`iS+aLF?%sdXL8jx9N&|gjeY3bmLQ=5Uhy_B`CX%ZGpOP~7Z%7p}qM{TajTlvq)c_@mXwh9^`cm2iSTIX=A&d(tSl zf-{sbg<6C0AcOY|`ul7_yDiklFT~JwLMys$t_`4)BnqQ&}S)LkZ;{ALqO~YhWba0!Imzd+x;pEAIX`Kf-0Kk5a1Z6n|H&O@DgD`;mX|%-L2KvqdG*&IHq1g-t48QIt;f zSG`P+n_%_O*}OSgsFTa>g@dK0%Mj+2^8l;NLI1r$Arr2~nWvWy*9o(JxXO&Ll?!hl zz6}@>LLP`E#j8VEQi~!_?g)9TSkvl^S)Y}9)y_w zeV(%~-a`dLRu1DAq0iw5V`KJo*(P16y$=p0{U9mnOmePilxc8!@~AAZ@PI_)o3Yd$ zmiI+kP^T2#s|VXxF?J6XyQOLCC*{`>D?t;Q-b*B+shRy2unxv1≫CQ}m>8^!eWY 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 Ld@1*W_0#_gizC#` diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png deleted file mode 100644 index fa40533725a589357e10d11b0e9fdda63b526c8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10303 zcmeHt_fu0{_b>3EfJP}I(xg{u1_9|UAiaZhqLEG_h!iOySO_HoB4U&(O*%*~0ipte zAcP_<5fB6^5h9&XzlZ1ka_>9$54bb;ok=-!a`w)dwLfL8wNJdIxxs~V+~;U$Xf7BT z>RHp!(CVGO8P5V|peqJnfG^sI)&{yXl>@xXG&JH=BRw74N3^S1KIOsoj@`RRwLBq4 z;}ii~iFbMO%yZ&fPvhfL1R$*XPiXaog=To;bW&b0$}`q!FFT8!VPJ#ja-55#OEXI3 zF7$?(^bN+FgQJm@;3I}rH7tH&-@G{aQGIOtmMCw{WoU+pFkr(Ohn*=5Pkcr z-|N&fziU$Ajl-2elNkrM@oRXcvF4H^A0P1#EG3E)ES-uDor=oOPE5Q1ey*EI31LcB zI&TGCIdLlXMeI0s;@MSpDeZF;m9@#8e=B?pKqkf)u#Vr*SNzT1%Yq}Vh!j&?m#5)h z=@8YeH};OsTl~HhnO(SR((yodgM$}1GSEl689~PgBaz4V|Hz;l7ysd6(;b&e4C6eBf%cArWK+w#cJ(|MI+Gj=?BNC=alOunh zD@R$OPCJ(8-VqVxKKITK1r44H6M`)-w<{rgSH6r zDj=Ih@3M?XAng~HjKM*j99_M0#VXzV8=TUfwQyrC?Bcco$PE6}dQI^DAdG(`cVB+e zBDKg20`vIv(v|(|aMf6Y^hrd)Cs}i~l)FaA{yrD^Dk>fS=By*gYwE_9f~fa`=i{J^ z{Jvq?*9ac+tDGXa_*s1))DzwbB@7MgoM*+Z6(6G2bgaok?~1-j7{*S;;6O!&WY>V- zH1^x^$Xfi#4rXt@FdfHo^U=D2dJrae`o=3p#{geQsSL3*ax$dlcq2oJp`M(bE1Mb* z(!U3}Db#tvb&r*q1Y6n#6){<{s~h+aX(r^8etlo9Qf(w`G-gG@$r0$d++z4&w7~tp zbIAcqRv=L&j?8q%uty}li27!?Fe>hk!Wg#Q7ZXy=OCGJt5fet|)y)DcJuCi^jTz4l ziBF9Az%F>9OtrDBynmqv(SzSzIU(8?rla7E7gFvLlJNgZ{|68q8wB}J7v4#DJw-xa z(4=dshMZMumeIGlzw34crJ8RhulAx0h;pY9eDZPZ($Cy;UZ3wWb@o^y9bdiQmg2#< z`FNe=hD;JRuvJRCqu8C}6?y8a59){8WfjK1e)!CPVukO3gWQ!xv@7koH~BQiMmwb& zx?7L3O8a$v)#|%iWm9Kfhjd!HPwcS%d>O`n@!WZq51jiv5*%00r{e+*M=Y8ypUCcRCWa(Rlcfxo{rSKdllJrR+ z?__toD0=_wIhc1#0Rtn8AfL8w7l@7ng7NIme8hdEg1 zwD4$Z2A1`s=^LS4PuA3y#2kcvaq?-t=)S1`raw`!pm=OJyP2zBb=~+bRuBBTD7+ z)krPV%hD*)B(y{b(rGC&aZ#T}N1eUB{$UbK;%<%ds9q0)e};FJ(zuiy3Y+z1f7l)| zB>Vba+rFK9F@uC2Iw-9MDSXuhyFEK!hN(e$$hul0-z)_iP*Ai<-0j z4ghe!^M3=NTq-NXM%a~`mi~c{Lg%^2j7XFRP3)F&7IW~M-e_K-NU4g2!f@MCb%U^>qt7~1%Bp+9>~P^71lU9_L@mo^G22t z$oW760tL7&g$l3N(xIZl|dbdyF^hLbe6U~K;^Dm1A0qtd4Q``gQFD{SI(+mm8B6GTWUmjrax z1LqCo-*x?MP)OJ7d1Axkf*2C}-PbU(jh(4eDW0-OMY)_&V&r82V)g5t=Gq$$NL$d= zt_mezcJ)bL%;(ETQ`64dsMV^MBrht-T(bc{*}qcx;VKU;{rbdUvV6d)_MIsb)6I@X z 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 r0v^Rl`tRBQ#^Jws_{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 9650 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 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png deleted file mode 100644 index 3fd2f4fa22a42aaca5012374ccb871ee1fa349fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125855 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%0DD9Nrh}wRh@bW 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

aRP^p5XZ$ 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 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png deleted file mode 100644 index c5df8264954b2db800da9ef0a5ebe02973e48a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16499 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 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 87050b46b0986a2d3c262147886b87f63305119f..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 13901 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 diff --git a/examples/flutter_gallery/lib/gallery/about.dart b/examples/flutter_gallery/lib/gallery/about.dart deleted file mode 100644 index 141d7b3064..0000000000 --- a/examples/flutter_gallery/lib/gallery/about.dart +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/gestures.dart'; -import 'package:flutter/foundation.dart' show defaultTargetPlatform; -import 'package:flutter/material.dart'; - -import 'package:url_launcher/url_launcher.dart'; - -class _LinkTextSpan extends TextSpan { - - // Beware! - // - // This class is only safe because the TapGestureRecognizer is not - // given a deadline and therefore never allocates any resources. - // - // In any other situation -- setting a deadline, using any of the less trivial - // recognizers, etc -- you would have to manage the gesture recognizer's - // lifetime and call dispose() when the TextSpan was no longer being rendered. - // - // Since TextSpan itself is @immutable, this means that you would have to - // manage the recognizer from outside the TextSpan, e.g. in the State of a - // stateful widget that then hands the recognizer to the TextSpan. - - _LinkTextSpan({ TextStyle style, String url, String text }) : super( - style: style, - text: text ?? url, - recognizer: new TapGestureRecognizer()..onTap = () { - launch(url, forceSafariVC: false); - } - ); -} - -void showGalleryAboutDialog(BuildContext context) { - final ThemeData themeData = Theme.of(context); - final TextStyle aboutTextStyle = themeData.textTheme.body2; - final TextStyle linkStyle = themeData.textTheme.body2.copyWith(color: themeData.accentColor); - - showAboutDialog( - context: context, - applicationVersion: 'April 2018 Preview', - applicationIcon: const FlutterLogo(), - applicationLegalese: '© 2017 The Chromium Authors', - children: [ - new Padding( - padding: const EdgeInsets.only(top: 24.0), - child: new RichText( - text: new TextSpan( - children: [ - new TextSpan( - style: aboutTextStyle, - text: 'Flutter is an early-stage, open-source project to help developers ' - 'build high-performance, high-fidelity, mobile apps for ' - '${defaultTargetPlatform == TargetPlatform.iOS ? 'multiple platforms' : 'iOS and Android'} ' - 'from a single codebase. This gallery is a preview of ' - "Flutter's many widgets, behaviors, animations, layouts, " - 'and more. Learn more about Flutter at ' - ), - new _LinkTextSpan( - style: linkStyle, - url: 'https://flutter.io', - ), - new TextSpan( - style: aboutTextStyle, - text: '.\n\nTo see the source code for this app, please visit the ', - ), - new _LinkTextSpan( - style: linkStyle, - url: 'https://goo.gl/iv1p4G', - text: 'flutter github repo', - ), - new TextSpan( - style: aboutTextStyle, - text: '.', - ), - ], - ), - ), - ), - ], - ); -} diff --git a/examples/flutter_gallery/lib/gallery/app.dart b/examples/flutter_gallery/lib/gallery/app.dart index 962ab047ce..d3af4df0c0 100644 --- a/examples/flutter_gallery/lib/gallery/app.dart +++ b/examples/flutter_gallery/lib/gallery/app.dart @@ -8,79 +8,53 @@ import 'package:flutter/foundation.dart' show defaultTargetPlatform; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart' show timeDilation; -import 'package:url_launcher/url_launcher.dart'; - -import 'demos.dart'; import 'home.dart'; -import 'options.dart'; -import 'scales.dart'; -import 'themes.dart'; -import 'updater.dart'; +import 'item.dart'; +import 'theme.dart'; +import 'updates.dart'; class GalleryApp extends StatefulWidget { const GalleryApp({ - Key key, this.updateUrlFetcher, this.enablePerformanceOverlay: true, - this.enableRasterCacheImagesCheckerboard: true, - this.enableOffscreenLayersCheckerboard: true, + this.checkerboardRasterCacheImages: true, + this.checkerboardOffscreenLayers: true, this.onSendFeedback, - }) : super(key: key); + Key key} + ) : super(key: key); final UpdateUrlFetcher updateUrlFetcher; + final bool enablePerformanceOverlay; - final bool enableRasterCacheImagesCheckerboard; - final bool enableOffscreenLayersCheckerboard; + + final bool checkerboardRasterCacheImages; + + final bool checkerboardOffscreenLayers; + final VoidCallback onSendFeedback; @override - _GalleryAppState createState() => new _GalleryAppState(); + GalleryAppState createState() => new GalleryAppState(); } -class _GalleryAppState extends State { - GalleryOptions _options; +class GalleryAppState extends State { + GalleryTheme _galleryTheme = kAllGalleryThemes[0]; + bool _showPerformanceOverlay = false; + bool _checkerboardRasterCacheImages = false; + bool _checkerboardOffscreenLayers = false; + TextDirection _overrideDirection = TextDirection.ltr; + double _timeDilation = 1.0; + TargetPlatform _platform; + + // A null value indicates "use system default". + double _textScaleFactor; + Timer _timeDilationTimer; - Map _buildRoutes() { - // For a different example of how to set up an application routing table - // using named routes, consider the example in the Navigator class documentation: - // https://docs.flutter.io/flutter/widgets/Navigator-class.html - - return new Map.fromIterable( - kAllGalleryDemos, - key: (dynamic demo) => '${demo.routeName}', - value: (dynamic demo) => demo.buildRoute, - )..addAll( - new Map.fromIterable( - kAllGalleryDemoCategories, - key: (dynamic category) => '/${category.name}', - value: (dynamic category) { - return (BuildContext context) { - return new DemosPage( - category: category, - optionsPage: new GalleryOptionsPage( - options: _options, - onOptionsChanged: _handleOptionsChanged, - onSendFeedback: widget.onSendFeedback ?? () { - launch('https://github.com/flutter/flutter/issues/new', forceSafariVC: false); - }, - ), - ); - }; - }, - ), - ); - } - @override void initState() { + _timeDilation = timeDilation; super.initState(); - _options = new GalleryOptions( - theme: kLightGalleryTheme, - textScaleFactor: kAllGalleryTextScaleValues[0], - timeDilation: timeDilation, - platform: defaultTargetPlatform, - ); } @override @@ -90,50 +64,80 @@ class _GalleryAppState extends State { super.dispose(); } - void _handleOptionsChanged(GalleryOptions newOptions) { - setState(() { - if (_options.timeDilation != newOptions.timeDilation) { - _timeDilationTimer?.cancel(); - _timeDilationTimer = null; - if (newOptions.timeDilation > 1.0) { - // We delay the time dilation change long enough that the user can see - // that UI has started reacting and then we slam on the brakes so that - // they see that the time is in fact now dilated. - _timeDilationTimer = new Timer(const Duration(milliseconds: 150), () { - timeDilation = newOptions.timeDilation; - }); - } else { - timeDilation = newOptions.timeDilation; - } - } - - _options = newOptions; - }); - } - - Widget _applyTextScaleFactor(Widget child) { + Widget _applyScaleFactor(Widget child) { return new Builder( - builder: (BuildContext context) { - return new MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: _options.textScaleFactor.scale, - ), - child: child, - ); - }, + builder: (BuildContext context) => new MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaleFactor: _textScaleFactor, + ), + child: child, + ), ); } @override Widget build(BuildContext context) { Widget home = new GalleryHome( - optionsPage: new GalleryOptionsPage( - options: _options, - onOptionsChanged: _handleOptionsChanged, - onSendFeedback: widget.onSendFeedback ?? () { - launch('https://github.com/flutter/flutter/issues/new'); - }, - ), + galleryTheme: _galleryTheme, + onThemeChanged: (GalleryTheme value) { + setState(() { + _galleryTheme = value; + }); + }, + showPerformanceOverlay: _showPerformanceOverlay, + onShowPerformanceOverlayChanged: widget.enablePerformanceOverlay ? (bool value) { + setState(() { + _showPerformanceOverlay = value; + }); + } : null, + checkerboardRasterCacheImages: _checkerboardRasterCacheImages, + onCheckerboardRasterCacheImagesChanged: widget.checkerboardRasterCacheImages ? (bool value) { + setState(() { + _checkerboardRasterCacheImages = value; + }); + } : null, + checkerboardOffscreenLayers: _checkerboardOffscreenLayers, + onCheckerboardOffscreenLayersChanged: widget.checkerboardOffscreenLayers ? (bool value) { + setState(() { + _checkerboardOffscreenLayers = value; + }); + } : null, + onPlatformChanged: (TargetPlatform value) { + setState(() { + _platform = value == defaultTargetPlatform ? null : value; + }); + }, + timeDilation: _timeDilation, + onTimeDilationChanged: (double value) { + setState(() { + _timeDilationTimer?.cancel(); + _timeDilationTimer = null; + _timeDilation = value; + if (_timeDilation > 1.0) { + // We delay the time dilation change long enough that the user can see + // that the checkbox in the drawer has started reacting, then we slam + // on the brakes so that they see that the time is in fact now dilated. + _timeDilationTimer = new Timer(const Duration(milliseconds: 150), () { + timeDilation = _timeDilation; + }); + } else { + timeDilation = _timeDilation; + } + }); + }, + textScaleFactor: _textScaleFactor, + onTextScaleFactorChanged: (double value) { + setState(() { + _textScaleFactor = value; + }); + }, + overrideDirection: _overrideDirection, + onOverrideDirectionChanged: (TextDirection value) { + setState(() { + _overrideDirection = value; + }); + }, + onSendFeedback: widget.onSendFeedback, ); if (widget.updateUrlFetcher != null) { @@ -143,21 +147,31 @@ class _GalleryAppState extends State { ); } + final Map _kRoutes = {}; + for (GalleryItem item in kAllGalleryItems) { + // For a different example of how to set up an application routing table + // using named routes, consider the example in the Navigator class documentation: + // https://docs.flutter.io/flutter/widgets/Navigator-class.html + _kRoutes[item.routeName] = (BuildContext context) { + return item.buildRoute(context); + }; + } + return new MaterialApp( - theme: _options.theme.data.copyWith(platform: _options.platform), title: 'Flutter Gallery', color: Colors.grey, - showPerformanceOverlay: _options.showPerformanceOverlay, - checkerboardOffscreenLayers: _options.showOffscreenLayersCheckerboard, - checkerboardRasterCacheImages: _options.showRasterCacheImagesCheckerboard, - routes: _buildRoutes(), + theme: _galleryTheme.theme.copyWith(platform: _platform ?? defaultTargetPlatform), + showPerformanceOverlay: _showPerformanceOverlay, + checkerboardRasterCacheImages: _checkerboardRasterCacheImages, + checkerboardOffscreenLayers: _checkerboardOffscreenLayers, + routes: _kRoutes, + home: home, builder: (BuildContext context, Widget child) { return new Directionality( - textDirection: _options.textDirection, - child: _applyTextScaleFactor(child), + textDirection: _overrideDirection, + child: _applyScaleFactor(child), ); }, - home: home, ); } } diff --git a/examples/flutter_gallery/lib/gallery/backdrop.dart b/examples/flutter_gallery/lib/gallery/backdrop.dart deleted file mode 100644 index 8de2d9b1cd..0000000000 --- a/examples/flutter_gallery/lib/gallery/backdrop.dart +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math' as math; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/material.dart'; - -const double _kFrontHeadingHeight = 32.0; // front layer beveled rectangle -const double _kFrontClosedHeight = 72.0; // front layer height when closed -const double _kBackAppBarHeight = 56.0; // back layer (options) appbar height - -// The size of the front layer heading's left and right beveled corners. -final Tween _kFrontHeadingBevelRadius = new BorderRadiusTween( - begin: const BorderRadius.only( - topLeft: const Radius.circular(12.0), - topRight: const Radius.circular(12.0), - ), - end: const BorderRadius.only( - topLeft: const Radius.circular(_kFrontHeadingHeight), - topRight: const Radius.circular(_kFrontHeadingHeight), - ), -); - -class _IgnorePointerWhileStatusIsNot extends StatefulWidget { - const _IgnorePointerWhileStatusIsNot(this.status, { - Key key, - this.controller, - this.child, - }) : super(key: key); - - final AnimationController controller; - final AnimationStatus status; - final Widget child; - - @override - _IgnorePointerWhileStatusIsNotState createState() => new _IgnorePointerWhileStatusIsNotState(); -} - -class _IgnorePointerWhileStatusIsNotState extends State<_IgnorePointerWhileStatusIsNot> { - bool _ignoring; - - @override - void initState() { - super.initState(); - widget.controller.addStatusListener(_handleStatusChange); - _ignoring = widget.controller.status != AnimationStatus.completed; - } - - @override - void dispose() { - widget.controller.removeStatusListener(_handleStatusChange); - super.dispose(); - } - - void _handleStatusChange(AnimationStatus _) { - final bool value = widget.controller.status != widget.status; - if (_ignoring != value) { - setState(() { - _ignoring = value; - }); - } - } - - @override - Widget build(BuildContext context) { - return new IgnorePointer( - ignoring: _ignoring, - child: widget.child, - ); - } -} - -class _CrossFadeTransition extends AnimatedWidget { - const _CrossFadeTransition({ - Key key, - this.alignment: Alignment.center, - Animation progress, - this.child0, - this.child1, - }) : super(key: key, listenable: progress); - - final AlignmentGeometry alignment; - final Widget child0; - final Widget child1; - - @override - Widget build(BuildContext context) { - final Animation progress = listenable; - - final double opacity1 = new CurvedAnimation( - parent: new ReverseAnimation(progress), - curve: const Interval(0.5, 1.0), - ).value; - - final double opacity2 = new CurvedAnimation( - parent: progress, - curve: const Interval(0.5, 1.0), - ).value; - - return new Stack( - alignment: alignment, - children: [ - new IgnorePointer( - ignoring: opacity1 < 1.0, - child: new Opacity( - opacity: opacity1, - child: child1, - ), - ), - new IgnorePointer( - ignoring: opacity2 <1.0, - child: new Opacity( - opacity: opacity2, - child: child0, - ), - ), - ], - ); - } -} - -class _BackAppBar extends StatelessWidget { - const _BackAppBar({ - Key key, - this.leading: const SizedBox(width: 56.0), - @required this.title, - this.trailing, - }) : assert(leading != null), assert(title != null), super(key: key); - - final Widget leading; - final Widget title; - final Widget trailing; - - @override - Widget build(BuildContext context) { - final List children = [ - new Container( - alignment: Alignment.center, - width: 56.0, - child: leading, - ), - new Expanded( - child: title, - ), - ]; - - if (trailing != null) { - children.add( - new Container( - alignment: Alignment.center, - width: 56.0, - child: trailing, - ), - ); - } - - final ThemeData theme = Theme.of(context); - - return IconTheme.merge( - data: theme.primaryIconTheme, - child: new DefaultTextStyle( - style: theme.primaryTextTheme.title, - child: new SizedBox( - height: _kBackAppBarHeight, - child: new Row(children: children), - ), - ), - ); - } -} - -class Backdrop extends StatefulWidget { - const Backdrop({ - this.frontAction, - this.frontTitle, - this.frontHeading, - this.frontLayer, - this.backTitle, - this.backLayer, - }); - - final Widget frontAction; - final Widget frontTitle; - final Widget frontLayer; - final Widget frontHeading; - final Widget backTitle; - final Widget backLayer; - - @override - _BackdropState createState() => new _BackdropState(); -} - -class _BackdropState extends State with SingleTickerProviderStateMixin { - final GlobalKey _backdropKey = new GlobalKey(debugLabel: 'Backdrop'); - AnimationController _controller; - - @override - void initState() { - super.initState(); - _controller = new AnimationController( - duration: const Duration(milliseconds: 300), - value: 1.0, - vsync: this, - ); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - double get _backdropHeight { - // Warning: this can be safely called from the event handlers but it may - // not be called at build time. - final RenderBox renderBox = _backdropKey.currentContext.findRenderObject(); - return math.max(0.0, renderBox.size.height - _kBackAppBarHeight - _kFrontClosedHeight); - } - - void _handleDragUpdate(DragUpdateDetails details) { - _controller.value -= details.primaryDelta / (_backdropHeight ?? details.primaryDelta); - } - - void _handleDragEnd(DragEndDetails details) { - if (_controller.isAnimating || _controller.status == AnimationStatus.completed) - return; - - final double flingVelocity = details.velocity.pixelsPerSecond.dy / _backdropHeight; - if (flingVelocity < 0.0) - _controller.fling(velocity: math.max(2.0, -flingVelocity)); - else if (flingVelocity > 0.0) - _controller.fling(velocity: math.min(-2.0, -flingVelocity)); - else - _controller.fling(velocity: _controller.value < 0.5 ? -2.0 : 2.0); - } - - void _toggleFrontLayer() { - final AnimationStatus status = _controller.status; - final bool isOpen = status == AnimationStatus.completed || status == AnimationStatus.forward; - _controller.fling(velocity: isOpen ? -2.0 : 2.0); - } - - Widget _buildStack(BuildContext context, BoxConstraints constraints) { - final Animation frontRelativeRect = new RelativeRectTween( - begin: new RelativeRect.fromLTRB(0.0, constraints.biggest.height - _kFrontClosedHeight, 0.0, 0.0), - end: const RelativeRect.fromLTRB(0.0, _kBackAppBarHeight, 0.0, 0.0), - ).animate(_controller); - - return new Stack( - key: _backdropKey, - children: [ - new Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - // Back layer - new _BackAppBar( - leading: widget.frontAction, - title: new _CrossFadeTransition( - progress: _controller, - alignment: AlignmentDirectional.centerStart, - child0: widget.frontTitle, - child1: widget.backTitle, - ), - trailing: new IconButton( - onPressed: _toggleFrontLayer, - tooltip: 'Show options page', - icon: new AnimatedIcon( - icon: AnimatedIcons.close_menu, - progress: _controller, - ), - ), - ), - new Expanded( - child: new _IgnorePointerWhileStatusIsNot( - AnimationStatus.dismissed, - controller: _controller, - child: widget.backLayer, - ), - ), - ], - ), - // Front layer - new PositionedTransition( - rect: frontRelativeRect, - child: new AnimatedBuilder( - animation: _controller, - builder: (BuildContext context, Widget child) { - return new PhysicalShape( - elevation: 12.0, - color: Theme.of(context).canvasColor, - clipper: new ShapeBorderClipper( - shape: new BeveledRectangleBorder( - borderRadius: _kFrontHeadingBevelRadius.lerp(_controller.value), - ), - ), - child: child, - ); - }, - child: new _IgnorePointerWhileStatusIsNot( - AnimationStatus.completed, - controller: _controller, - child: widget.frontLayer, - ), - ), - ), - new PositionedTransition( - rect: frontRelativeRect, - child: new Container( - alignment: Alignment.topLeft, - child: new GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: _toggleFrontLayer, - onVerticalDragUpdate: _handleDragUpdate, - onVerticalDragEnd: _handleDragEnd, - child: widget.frontHeading, - ), - ), - ), - ], - ); - } - - @override - Widget build(BuildContext context) { - return new LayoutBuilder(builder: _buildStack); - } -} diff --git a/examples/flutter_gallery/lib/gallery/drawer.dart b/examples/flutter_gallery/lib/gallery/drawer.dart new file mode 100644 index 0000000000..4dfe73269f --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/drawer.dart @@ -0,0 +1,349 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:math' as math; + +import 'package:flutter/foundation.dart' show defaultTargetPlatform, required; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +import 'package:url_launcher/url_launcher.dart'; + +import 'theme.dart'; + +class LinkTextSpan extends TextSpan { + + // Beware! + // + // This class is only safe because the TapGestureRecognizer is not + // given a deadline and therefore never allocates any resources. + // + // In any other situation -- setting a deadline, using any of the less trivial + // recognizers, etc -- you would have to manage the gesture recognizer's + // lifetime and call dispose() when the TextSpan was no longer being rendered. + // + // Since TextSpan itself is @immutable, this means that you would have to + // manage the recognizer from outside the TextSpan, e.g. in the State of a + // stateful widget that then hands the recognizer to the TextSpan. + + LinkTextSpan({ TextStyle style, String url, String text }) : super( + style: style, + text: text ?? url, + recognizer: new TapGestureRecognizer()..onTap = () { + launch(url, forceSafariVC: false); + } + ); +} + +class GalleryDrawerHeader extends StatefulWidget { + const GalleryDrawerHeader({ Key key, this.light }) : super(key: key); + + final bool light; + + @override + _GalleryDrawerHeaderState createState() => new _GalleryDrawerHeaderState(); +} + +class _GalleryDrawerHeaderState extends State { + bool _logoHasName = true; + bool _logoHorizontal = true; + MaterialColor _logoColor = Colors.blue; + + @override + Widget build(BuildContext context) { + final double systemTopPadding = MediaQuery.of(context).padding.top; + + return new Semantics( + label: 'Flutter', + child: new DrawerHeader( + decoration: new FlutterLogoDecoration( + margin: new EdgeInsets.fromLTRB(12.0, 12.0 + systemTopPadding, 12.0, 12.0), + style: _logoHasName ? _logoHorizontal ? FlutterLogoStyle.horizontal + : FlutterLogoStyle.stacked + : FlutterLogoStyle.markOnly, + lightColor: _logoColor.shade400, + darkColor: _logoColor.shade900, + textColor: widget.light ? const Color(0xFF616161) : const Color(0xFF9E9E9E), + ), + duration: const Duration(milliseconds: 750), + child: new GestureDetector( + onLongPress: () { + setState(() { + _logoHorizontal = !_logoHorizontal; + if (!_logoHasName) + _logoHasName = true; + }); + }, + onTap: () { + setState(() { + _logoHasName = !_logoHasName; + }); + }, + onDoubleTap: () { + setState(() { + final List options = []; + if (_logoColor != Colors.blue) + options.addAll([Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue]); + if (_logoColor != Colors.amber) + options.addAll([Colors.amber, Colors.amber, Colors.amber]); + if (_logoColor != Colors.red) + options.addAll([Colors.red, Colors.red, Colors.red]); + if (_logoColor != Colors.indigo) + options.addAll([Colors.indigo, Colors.indigo, Colors.indigo]); + if (_logoColor != Colors.pink) + options.addAll([Colors.pink]); + if (_logoColor != Colors.purple) + options.addAll([Colors.purple]); + if (_logoColor != Colors.cyan) + options.addAll([Colors.cyan]); + _logoColor = options[new math.Random().nextInt(options.length)]; + }); + } + ), + ), + ); + } +} + +class GalleryDrawer extends StatelessWidget { + const GalleryDrawer({ + Key key, + this.galleryTheme, + @required this.onThemeChanged, + this.timeDilation, + @required this.onTimeDilationChanged, + this.textScaleFactor, + this.onTextScaleFactorChanged, + this.showPerformanceOverlay, + this.onShowPerformanceOverlayChanged, + this.checkerboardRasterCacheImages, + this.onCheckerboardRasterCacheImagesChanged, + this.checkerboardOffscreenLayers, + this.onCheckerboardOffscreenLayersChanged, + this.onPlatformChanged, + this.overrideDirection: TextDirection.ltr, + this.onOverrideDirectionChanged, + this.onSendFeedback, + }) : assert(onThemeChanged != null), + assert(onTimeDilationChanged != null), + super(key: key); + + final GalleryTheme galleryTheme; + final ValueChanged onThemeChanged; + + final double timeDilation; + final ValueChanged onTimeDilationChanged; + + final double textScaleFactor; + final ValueChanged onTextScaleFactorChanged; + + final bool showPerformanceOverlay; + final ValueChanged onShowPerformanceOverlayChanged; + + final bool checkerboardRasterCacheImages; + final ValueChanged onCheckerboardRasterCacheImagesChanged; + + final bool checkerboardOffscreenLayers; + final ValueChanged onCheckerboardOffscreenLayersChanged; + + final ValueChanged onPlatformChanged; + + final TextDirection overrideDirection; + final ValueChanged onOverrideDirectionChanged; + + final VoidCallback onSendFeedback; + + @override + Widget build(BuildContext context) { + final ThemeData themeData = Theme.of(context); + final TextStyle aboutTextStyle = themeData.textTheme.body2; + final TextStyle linkStyle = themeData.textTheme.body2.copyWith(color: themeData.accentColor); + + final List themeItems = kAllGalleryThemes.map((GalleryTheme theme) { + return new RadioListTile( + title: new Text(theme.name), + secondary: new Icon(theme.icon), + value: theme, + groupValue: galleryTheme, + onChanged: onThemeChanged, + selected: galleryTheme == theme, + ); + }).toList(); + + final Widget mountainViewItem = new RadioListTile( + // on iOS, we don't want to show an Android phone icon + secondary: new Icon(defaultTargetPlatform == TargetPlatform.iOS ? Icons.star : Icons.phone_android), + title: new Text(defaultTargetPlatform == TargetPlatform.iOS ? 'Mountain View' : 'Android'), + value: TargetPlatform.android, + groupValue: Theme.of(context).platform, + onChanged: onPlatformChanged, + selected: Theme.of(context).platform == TargetPlatform.android, + ); + + final Widget cupertinoItem = new RadioListTile( + // on iOS, we don't want to show the iPhone icon + secondary: new Icon(defaultTargetPlatform == TargetPlatform.iOS ? Icons.star_border : Icons.phone_iphone), + title: new Text(defaultTargetPlatform == TargetPlatform.iOS ? 'Cupertino' : 'iOS'), + value: TargetPlatform.iOS, + groupValue: Theme.of(context).platform, + onChanged: onPlatformChanged, + selected: Theme.of(context).platform == TargetPlatform.iOS, + ); + + final List textSizeItems = []; + final Map textSizes = { + null: 'System Default', + 0.8: 'Small', + 1.0: 'Normal', + 1.3: 'Large', + 2.0: 'Huge', + }; + for (double size in textSizes.keys) { + textSizeItems.add(new RadioListTile( + secondary: const Icon(Icons.text_fields), + title: new Text(textSizes[size]), + value: size, + groupValue: textScaleFactor, + onChanged: onTextScaleFactorChanged, + selected: textScaleFactor == size, + )); + } + + final Widget animateSlowlyItem = new CheckboxListTile( + title: const Text('Animate Slowly'), + value: timeDilation != 1.0, + onChanged: (bool value) { + onTimeDilationChanged(value ? 20.0 : 1.0); + }, + secondary: const Icon(Icons.hourglass_empty), + selected: timeDilation != 1.0, + ); + + final Widget overrideDirectionItem = new CheckboxListTile( + title: const Text('Force RTL'), + value: overrideDirection == TextDirection.rtl, + onChanged: (bool value) { + onOverrideDirectionChanged(value ? TextDirection.rtl : TextDirection.ltr); + }, + secondary: const Icon(Icons.format_textdirection_r_to_l), + selected: overrideDirection == TextDirection.rtl, + ); + + final Widget sendFeedbackItem = new ListTile( + leading: const Icon(Icons.report), + title: const Text('Send feedback'), + onTap: onSendFeedback ?? () { + launch('https://github.com/flutter/flutter/issues/new'); + }, + ); + + final Widget aboutItem = new AboutListTile( + icon: const FlutterLogo(), + applicationVersion: 'April 2018 Preview', + applicationIcon: const FlutterLogo(), + applicationLegalese: '© 2017 The Chromium Authors', + aboutBoxChildren: [ + new Padding( + padding: const EdgeInsets.only(top: 24.0), + child: new RichText( + text: new TextSpan( + children: [ + new TextSpan( + style: aboutTextStyle, + text: 'Flutter is an early-stage, open-source project to help developers ' + 'build high-performance, high-fidelity, mobile apps for ' + '${defaultTargetPlatform == TargetPlatform.iOS ? 'multiple platforms' : 'iOS and Android'} ' + 'from a single codebase. This gallery is a preview of ' + "Flutter's many widgets, behaviors, animations, layouts, " + 'and more. Learn more about Flutter at ' + ), + new LinkTextSpan( + style: linkStyle, + url: 'https://flutter.io' + ), + new TextSpan( + style: aboutTextStyle, + text: '.\n\nTo see the source code for this app, please visit the ' + ), + new LinkTextSpan( + style: linkStyle, + url: 'https://goo.gl/iv1p4G', + text: 'flutter github repo' + ), + new TextSpan( + style: aboutTextStyle, + text: '.' + ) + ] + ) + ) + ) + ] + ); + + final List allDrawerItems = [ + new GalleryDrawerHeader( + light: galleryTheme.theme.brightness == Brightness.light, + ), + ] + ..addAll(themeItems) + ..addAll([ + const Divider(), + mountainViewItem, + cupertinoItem, + const Divider(), + ]) + ..addAll(textSizeItems) + ..addAll([ + overrideDirectionItem, + const Divider(), + animateSlowlyItem, + const Divider(), + ]); + + bool addedOptionalItem = false; + if (onCheckerboardOffscreenLayersChanged != null) { + allDrawerItems.add(new CheckboxListTile( + title: const Text('Checkerboard Offscreen Layers'), + value: checkerboardOffscreenLayers, + onChanged: onCheckerboardOffscreenLayersChanged, + secondary: const Icon(Icons.assessment), + selected: checkerboardOffscreenLayers, + )); + addedOptionalItem = true; + } + + if (onCheckerboardRasterCacheImagesChanged != null) { + allDrawerItems.add(new CheckboxListTile( + title: const Text('Checkerboard Raster Cache Images'), + value: checkerboardRasterCacheImages, + onChanged: onCheckerboardRasterCacheImagesChanged, + secondary: const Icon(Icons.assessment), + selected: checkerboardRasterCacheImages, + )); + addedOptionalItem = true; + } + + if (onShowPerformanceOverlayChanged != null) { + allDrawerItems.add(new CheckboxListTile( + title: const Text('Performance Overlay'), + value: showPerformanceOverlay, + onChanged: onShowPerformanceOverlayChanged, + secondary: const Icon(Icons.assessment), + selected: showPerformanceOverlay, + )); + addedOptionalItem = true; + } + + if (addedOptionalItem) + allDrawerItems.add(const Divider()); + + allDrawerItems.addAll([ + sendFeedbackItem, + aboutItem, + ]); + + return new Drawer(child: new ListView(primary: false, children: allDrawerItems)); + } +} diff --git a/examples/flutter_gallery/lib/gallery/home.dart b/examples/flutter_gallery/lib/gallery/home.dart index b81d8bf708..754ebdbbab 100644 --- a/examples/flutter_gallery/lib/gallery/home.dart +++ b/examples/flutter_gallery/lib/gallery/home.dart @@ -1,286 +1,126 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:developer'; -import 'dart:math' as math; - +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'backdrop.dart'; -import 'demos.dart'; +import 'drawer.dart'; +import 'item.dart'; +import 'theme.dart'; +const double _kFlexibleSpaceMaxHeight = 256.0; const String _kGalleryAssetsPackage = 'flutter_gallery_assets'; -const Color _kFlutterBlue = const Color(0xFF003D75); -const double _kDemoItemHeight = 64.0; -class _FlutterLogo extends StatelessWidget { - const _FlutterLogo({ Key key }) : super(key: key); - - @override - Widget build(BuildContext context) { - return new Center( - child: new Container( - width: 34.0, - height: 34.0, - decoration: const BoxDecoration( - image: const DecorationImage( - image: const AssetImage( - 'white_logo/logo.png', - package: _kGalleryAssetsPackage, - ), - ), - ), - ), - ); - } +class _BackgroundLayer { + _BackgroundLayer({ int level, double parallax }) + : assetName = 'appbar/appbar_background_layer$level.png', + assetPackage = _kGalleryAssetsPackage, + parallaxTween = new Tween(begin: 0.0, end: parallax); + final String assetName; + final String assetPackage; + final Tween parallaxTween; } -class _CategoryItem extends StatelessWidget { - const _CategoryItem({ - Key key, - this.category, - this.onTap, - }) : super (key: key); +final List<_BackgroundLayer> _kBackgroundLayers = <_BackgroundLayer>[ + new _BackgroundLayer(level: 0, parallax: _kFlexibleSpaceMaxHeight), + new _BackgroundLayer(level: 1, parallax: _kFlexibleSpaceMaxHeight), + new _BackgroundLayer(level: 2, parallax: _kFlexibleSpaceMaxHeight / 2.0), + new _BackgroundLayer(level: 3, parallax: _kFlexibleSpaceMaxHeight / 4.0), + new _BackgroundLayer(level: 4, parallax: _kFlexibleSpaceMaxHeight / 2.0), + new _BackgroundLayer(level: 5, parallax: _kFlexibleSpaceMaxHeight) +]; - final GalleryDemoCategory category; - final VoidCallback onTap; +class _AppBarBackground extends StatelessWidget { + const _AppBarBackground({ Key key, this.animation }) : super(key: key); + + final Animation animation; @override Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final bool isDark = theme.brightness == Brightness.dark; - - return new RawMaterialButton( - padding: EdgeInsets.zero, - splashColor: theme.primaryColor.withOpacity(0.12), - highlightColor: Colors.transparent, - onPressed: onTap, - child: new Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - new Padding( - padding: const EdgeInsets.all(6.0), - child: new Icon( - category.icon, - size: 60.0, - color: isDark ? Colors.white : _kFlutterBlue, - ), - ), - const SizedBox(height: 10.0), - new Container( - height: 48.0, - alignment: Alignment.center, - child: new Text( - category.name, - textAlign: TextAlign.center, - style: theme.textTheme.subhead.copyWith( - fontFamily: 'GoogleSans', - color: isDark ? Colors.white : _kFlutterBlue, - ), - ), - ), - ], - ), - ); - } -} - -class _CategoriesPage extends StatelessWidget { - const _CategoriesPage({ - Key key, - this.categories, - this.onCategoryTap, - }) : super(key: key); - - final Iterable categories; - final ValueChanged onCategoryTap; - - @override - Widget build(BuildContext context) { - const double aspectRatio = 160.0 / 180.0; - final List categoriesList = categories.toList(); - final int columnCount = (MediaQuery.of(context).orientation == Orientation.portrait) ? 2 : 3; - - return new SingleChildScrollView( - child: new LayoutBuilder( - builder: (BuildContext context, BoxConstraints constraints) { - final double columnWidth = constraints.biggest.width / columnCount.toDouble(); - final double rowHeight = columnWidth * aspectRatio; - final int rowCount = (categories.length + columnCount - 1) ~/ columnCount; - - return new Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: new List.generate(rowCount, (int rowIndex) { - final int columnCountForRow = rowIndex == rowCount - 1 - ? categories.length - columnCount * math.max(0, rowCount - 1) - : columnCount; - - return new Row( - children: new List.generate(columnCountForRow, (int columnIndex) { - final int index = rowIndex * columnCount + columnIndex; - final GalleryDemoCategory category = categoriesList[index]; - - return new SizedBox( - width: columnWidth, - height: rowHeight, - child: new _CategoryItem( - category: category, - onTap: () { - Navigator.pushNamed(context, '/${category.name}'); - }, - ), - ); - }), - ); - }), - ); - }, - ), - ); - } -} - -class _DemoItem extends StatelessWidget { - const _DemoItem({ Key key, this.demo }) : super(key: key); - - final GalleryDemo demo; - - void _launchDemo(BuildContext context) { - if (demo.routeName != null) { - Timeline.instantSync('Start Transition', arguments: { - 'from': '/', - 'to': demo.routeName, - }); - Navigator.pushNamed(context, demo.routeName); - } - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final bool isDark = theme.brightness == Brightness.dark; - final double textScaleFactor = MediaQuery.of(context)?.textScaleFactor ?? 1.0; - - return new RawMaterialButton( - padding: EdgeInsets.zero, - splashColor: theme.primaryColor.withOpacity(0.12), - highlightColor: Colors.transparent, - onPressed: () { - _launchDemo(context); - }, - child: new Container( - constraints: new BoxConstraints(minHeight: _kDemoItemHeight * textScaleFactor), - child: new Row( - children: [ - new Container( - width: 56.0, - height: 56.0, - alignment: Alignment.center, - child: new Icon( - demo.icon, - size: 24.0, - color: isDark ? Colors.white : _kFlutterBlue, - ), - ), - new Expanded( - child: new Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - new Text( - demo.title, - style: theme.textTheme.subhead.copyWith( - color: isDark ? Colors.white : const Color(0xFF202124), - ), - ), - new Text( - demo.subtitle, - style: theme.textTheme.body1.copyWith( - color: isDark ? Colors.white : const Color(0xFF60646B)), - ), - ], - ), - ), - const SizedBox(width: 44.0), - ], - ), - ), - ); - } -} - -class DemosPage extends StatelessWidget { - const DemosPage({ - Key key, - this.category, - this.optionsPage, - }) : super(key: key); - - final GalleryDemoCategory category; - final Widget optionsPage; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final bool isDark = theme.brightness == Brightness.dark; - - return new Scaffold( - backgroundColor: isDark ? _kFlutterBlue : theme.primaryColor, - body: new SafeArea( - child: new SizedBox.expand( - child: new Backdrop( - backTitle: const Text('Options'), - backLayer: optionsPage, - frontAction: const BackButton(), - frontTitle: new Text(category.name), - frontHeading: new Container( - height: 40.0, - alignment: Alignment.bottomCenter, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: const Divider( - color: const Color(0xFFD5D7DA), - height: 1.0 - ), - ), - frontLayer: new Padding( - padding: const EdgeInsets.only(top: 40.0), - child: new ListView( - key: const ValueKey('GalleryDemoList'), // So tests can find it. - padding: const EdgeInsets.only(top: 8.0), - children: kGalleryCategoryToDemos[category].map((GalleryDemo demo) { - return new _DemoItem(demo: demo); - }).toList(), - ), - ), - ), - ), - ), + return new AnimatedBuilder( + animation: animation, + builder: (BuildContext context, Widget child) { + return new Stack( + children: _kBackgroundLayers.map((_BackgroundLayer layer) { + return new Positioned( + top: -layer.parallaxTween.evaluate(animation), + left: 0.0, + right: 0.0, + bottom: 0.0, + child: new Image.asset( + layer.assetName, + package: layer.assetPackage, + fit: BoxFit.cover, + height: _kFlexibleSpaceMaxHeight + ) + ); + }).toList() + ); + } ); } } class GalleryHome extends StatefulWidget { + const GalleryHome({ + Key key, + this.galleryTheme, + @required this.onThemeChanged, + this.timeDilation, + @required this.onTimeDilationChanged, + this.textScaleFactor, + this.onTextScaleFactorChanged, + this.showPerformanceOverlay, + this.onShowPerformanceOverlayChanged, + this.checkerboardRasterCacheImages, + this.onCheckerboardRasterCacheImagesChanged, + this.checkerboardOffscreenLayers, + this.onCheckerboardOffscreenLayersChanged, + this.onPlatformChanged, + this.overrideDirection: TextDirection.ltr, + this.onOverrideDirectionChanged, + this.onSendFeedback, + }) : assert(onThemeChanged != null), + assert(onTimeDilationChanged != null), + super(key: key); + // In checked mode our MaterialApp will show the default "debug" banner. // Otherwise show the "preview" banner. static bool showPreviewBanner = true; - const GalleryHome({ - Key key, - this.optionsPage, - }) : super(key: key); + final GalleryTheme galleryTheme; + final ValueChanged onThemeChanged; - final Widget optionsPage; + final double timeDilation; + final ValueChanged onTimeDilationChanged; + + final double textScaleFactor; + final ValueChanged onTextScaleFactorChanged; + + final bool showPerformanceOverlay; + final ValueChanged onShowPerformanceOverlayChanged; + + final bool checkerboardRasterCacheImages; + final ValueChanged onCheckerboardRasterCacheImagesChanged; + + final bool checkerboardOffscreenLayers; + final ValueChanged onCheckerboardOffscreenLayersChanged; + + final ValueChanged onPlatformChanged; + + final TextDirection overrideDirection; + final ValueChanged onOverrideDirectionChanged; + + final VoidCallback onSendFeedback; @override - _GalleryHomeState createState() => new _GalleryHomeState(); + GalleryHomeState createState() => new GalleryHomeState(); } -class _GalleryHomeState extends State with SingleTickerProviderStateMixin { +class GalleryHomeState extends State with SingleTickerProviderStateMixin { static final GlobalKey _scaffoldKey = new GlobalKey(); + AnimationController _controller; @override @@ -299,27 +139,75 @@ class _GalleryHomeState extends State with SingleTickerProviderStat super.dispose(); } + List _galleryListItems() { + final List listItems = []; + final ThemeData themeData = Theme.of(context); + final TextStyle headerStyle = themeData.textTheme.body2.copyWith(color: themeData.accentColor); + String category; + for (GalleryItem galleryItem in kAllGalleryItems) { + if (category != galleryItem.category) { + if (category != null) + listItems.add(const Divider()); + listItems.add( + new MergeSemantics( + child: new Container( + height: 48.0, + padding: const EdgeInsetsDirectional.only(start: 16.0), + alignment: AlignmentDirectional.centerStart, + child: new SafeArea( + top: false, + bottom: false, + child: new Semantics( + header: true, + child: new Text(galleryItem.category, style: headerStyle), + ), + ), + ), + ) + ); + category = galleryItem.category; + } + listItems.add(galleryItem); + } + return listItems; + } + @override Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final bool isDark = theme.brightness == Brightness.dark; - Widget home = new Scaffold( key: _scaffoldKey, - backgroundColor: isDark ? _kFlutterBlue : theme.primaryColor, - body: new SafeArea( - bottom: false, - child: new Backdrop( - backTitle: const Text('Options'), - backLayer: widget.optionsPage, - frontAction: const _FlutterLogo(), - frontTitle: const Text('Flutter gallery'), - frontHeading: new Container(height: 24.0), - frontLayer: new _CategoriesPage( - categories: kAllGalleryDemoCategories, - ), - ), + drawer: new GalleryDrawer( + galleryTheme: widget.galleryTheme, + onThemeChanged: widget.onThemeChanged, + timeDilation: widget.timeDilation, + onTimeDilationChanged: widget.onTimeDilationChanged, + textScaleFactor: widget.textScaleFactor, + onTextScaleFactorChanged: widget.onTextScaleFactorChanged, + showPerformanceOverlay: widget.showPerformanceOverlay, + onShowPerformanceOverlayChanged: widget.onShowPerformanceOverlayChanged, + checkerboardRasterCacheImages: widget.checkerboardRasterCacheImages, + onCheckerboardRasterCacheImagesChanged: widget.onCheckerboardRasterCacheImagesChanged, + checkerboardOffscreenLayers: widget.checkerboardOffscreenLayers, + onCheckerboardOffscreenLayersChanged: widget.onCheckerboardOffscreenLayersChanged, + onPlatformChanged: widget.onPlatformChanged, + overrideDirection: widget.overrideDirection, + onOverrideDirectionChanged: widget.onOverrideDirectionChanged, + onSendFeedback: widget.onSendFeedback, ), + body: new CustomScrollView( + slivers: [ + const SliverAppBar( + pinned: true, + expandedHeight: _kFlexibleSpaceMaxHeight, + flexibleSpace: const FlexibleSpaceBar( + title: const Text('Flutter Gallery'), + // TODO(abarth): Wire up to the parallax in a way that doesn't pop during hero transition. + background: const _AppBarBackground(animation: kAlwaysDismissedAnimation), + ), + ), + new SliverList(delegate: new SliverChildListDelegate(_galleryListItems())), + ], + ) ); assert(() { diff --git a/examples/flutter_gallery/lib/gallery/icons.dart b/examples/flutter_gallery/lib/gallery/icons.dart deleted file mode 100644 index 7ec4cb2770..0000000000 --- a/examples/flutter_gallery/lib/gallery/icons.dart +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class GalleryIcons { - GalleryIcons._(); - - static const IconData tooltip = const IconData(0xe900, fontFamily: 'GalleryIcons'); - static const IconData text_fields_alt = const IconData(0xe901, fontFamily: 'GalleryIcons'); - static const IconData tabs = const IconData(0xe902, fontFamily: 'GalleryIcons'); - static const IconData switches = const IconData(0xe903, fontFamily: 'GalleryIcons'); - static const IconData sliders = const IconData(0xe904, fontFamily: 'GalleryIcons'); - static const IconData shrine = const IconData(0xe905, fontFamily: 'GalleryIcons'); - static const IconData sentiment_very_satisfied = const IconData(0xe906, fontFamily: 'GalleryIcons'); - static const IconData refresh = const IconData(0xe907, fontFamily: 'GalleryIcons'); - static const IconData progress_activity = const IconData(0xe908, fontFamily: 'GalleryIcons'); - static const IconData phone_iphone = const IconData(0xe909, fontFamily: 'GalleryIcons'); - static const IconData page_control = const IconData(0xe90a, fontFamily: 'GalleryIcons'); - static const IconData more_vert = const IconData(0xe90b, fontFamily: 'GalleryIcons'); - static const IconData menu = const IconData(0xe90c, fontFamily: 'GalleryIcons'); - static const IconData list_alt = const IconData(0xe90d, fontFamily: 'GalleryIcons'); - static const IconData grid_on = const IconData(0xe90e, fontFamily: 'GalleryIcons'); - static const IconData expand_all = const IconData(0xe90f, fontFamily: 'GalleryIcons'); - static const IconData event = const IconData(0xe910, fontFamily: 'GalleryIcons'); - static const IconData drive_video = const IconData(0xe911, fontFamily: 'GalleryIcons'); - static const IconData dialogs = const IconData(0xe912, fontFamily: 'GalleryIcons'); - static const IconData data_table = const IconData(0xe913, fontFamily: 'GalleryIcons'); - static const IconData custom_typography = const IconData(0xe914, fontFamily: 'GalleryIcons'); - static const IconData colors = const IconData(0xe915, fontFamily: 'GalleryIcons'); - static const IconData chips = const IconData(0xe916, fontFamily: 'GalleryIcons'); - static const IconData check_box = const IconData(0xe917, fontFamily: 'GalleryIcons'); - static const IconData cards = const IconData(0xe918, fontFamily: 'GalleryIcons'); - static const IconData buttons = const IconData(0xe919, fontFamily: 'GalleryIcons'); - static const IconData bottom_sheets = const IconData(0xe91a, fontFamily: 'GalleryIcons'); - static const IconData bottom_navigation = const IconData(0xe91b, fontFamily: 'GalleryIcons'); - static const IconData animation = const IconData(0xe91c, fontFamily: 'GalleryIcons'); - static const IconData account_box = const IconData(0xe91d, fontFamily: 'GalleryIcons'); - static const IconData snackbar = const IconData(0xe91e, fontFamily: 'GalleryIcons'); - static const IconData category_mdc = const IconData(0xe91f, fontFamily: 'GalleryIcons'); - static const IconData cupertino_progress = const IconData(0xe920, fontFamily: 'GalleryIcons'); - static const IconData cupertino_pull_to_refresh = const IconData(0xe921, fontFamily: 'GalleryIcons'); - static const IconData cupertino_switch = const IconData(0xe922, fontFamily: 'GalleryIcons'); - static const IconData generic_buttons = const IconData(0xe923, fontFamily: 'GalleryIcons'); - static const IconData backdrop = const IconData(0xe924, fontFamily: 'GalleryIcons'); - static const IconData bottom_app_bar = const IconData(0xe925, fontFamily: 'GalleryIcons'); - static const IconData bottom_sheet_persistent = const IconData(0xe926, fontFamily: 'GalleryIcons'); - static const IconData lists_leave_behind = const IconData(0xe927, fontFamily: 'GalleryIcons'); -} diff --git a/examples/flutter_gallery/lib/gallery/demos.dart b/examples/flutter_gallery/lib/gallery/item.dart similarity index 60% rename from examples/flutter_gallery/lib/gallery/demos.dart rename to examples/flutter_gallery/lib/gallery/item.dart index c6a14e18e1..ada4c4c767 100644 --- a/examples/flutter_gallery/lib/gallery/demos.dart +++ b/examples/flutter_gallery/lib/gallery/item.dart @@ -1,66 +1,19 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:developer'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../demo/all.dart'; -import 'icons.dart'; -class GalleryDemoCategory { - const GalleryDemoCategory._({ this.name, this.icon }); - @required final String name; - @required final IconData icon; +typedef Widget GalleryDemoBuilder(); - @override - bool operator ==(dynamic other) { - if (identical(this, other)) - return true; - if (runtimeType != other.runtimeType) - return false; - final GalleryDemoCategory typedOther = other; - return typedOther.name == name && typedOther.icon == icon; - } - - @override - int get hashCode => hashValues(name, icon); - - @override - String toString() { - return '$runtimeType($name)'; - } -} - -const GalleryDemoCategory _kDemos = const GalleryDemoCategory._( - name: 'Vignettes', - icon: GalleryIcons.animation, -); - -const GalleryDemoCategory _kStyle = const GalleryDemoCategory._( - name: 'Style', - icon: GalleryIcons.custom_typography, -); - -const GalleryDemoCategory _kMaterialComponents = const GalleryDemoCategory._( - name: 'Material', - icon: GalleryIcons.category_mdc, -); - -const GalleryDemoCategory _kCupertinoComponents = const GalleryDemoCategory._( - name: 'Cupertino', - icon: GalleryIcons.phone_iphone, -); - -const GalleryDemoCategory _kMedia = const GalleryDemoCategory._( - name: 'Media', - icon: GalleryIcons.drive_video, -); - -class GalleryDemo { - const GalleryDemo({ +class GalleryItem extends StatelessWidget { + const GalleryItem({ @required this.title, - @required this.icon, this.subtitle, @required this.category, @required this.routeName, @@ -71,400 +24,363 @@ class GalleryDemo { assert(buildRoute != null); final String title; - final IconData icon; final String subtitle; - final GalleryDemoCategory category; + final String category; final String routeName; final WidgetBuilder buildRoute; @override - String toString() { - return '$runtimeType($title $routeName)'; + Widget build(BuildContext context) { + return new ListTile( + title: new Text(title), + subtitle: new Text(subtitle), + onTap: () { + if (routeName != null) { + Timeline.instantSync('Start Transition', arguments: { + 'from': '/', + 'to': routeName + }); + Navigator.pushNamed(context, routeName); + } + } + ); } } -List _buildGalleryDemos() { - final List galleryDemos = [ +List _buildGalleryItems() { + // When editing this list, make sure you keep it in sync with + // the list in ../../test_driver/transitions_perf_test.dart + final List galleryItems = [ // Demos - new GalleryDemo( + new GalleryItem( title: 'Shrine', subtitle: 'Basic shopping app', - icon: GalleryIcons.shrine, - category: _kDemos, + category: 'Vignettes', routeName: ShrineDemo.routeName, buildRoute: (BuildContext context) => new ShrineDemo(), ), - new GalleryDemo( + new GalleryItem( title: 'Contact profile', subtitle: 'Address book entry with a flexible appbar', - icon: GalleryIcons.account_box, - category: _kDemos, + category: 'Vignettes', routeName: ContactsDemo.routeName, buildRoute: (BuildContext context) => new ContactsDemo(), ), - new GalleryDemo( + new GalleryItem( title: 'Animation', subtitle: 'Section organizer', - icon: GalleryIcons.animation, - category: _kDemos, + category: 'Vignettes', routeName: AnimationDemo.routeName, buildRoute: (BuildContext context) => const AnimationDemo(), ), - - // Style - new GalleryDemo( - title: 'Colors', - subtitle: 'All of the predefined colors', - icon: GalleryIcons.colors, - category: _kStyle, - routeName: ColorsDemo.routeName, - buildRoute: (BuildContext context) => new ColorsDemo(), - ), - new GalleryDemo( - title: 'Typography', - subtitle: 'All of the predefined text styles', - icon: GalleryIcons.custom_typography, - category: _kStyle, - routeName: TypographyDemo.routeName, - buildRoute: (BuildContext context) => new TypographyDemo(), - ), - - // Material Components - new GalleryDemo( - title: 'Backdrop', - subtitle: 'Select a front layer from back layer', - icon: GalleryIcons.backdrop, - category: _kMaterialComponents, - routeName: BackdropDemo.routeName, - buildRoute: (BuildContext context) => new BackdropDemo(), - ), - new GalleryDemo( - title: 'Bottom app bar', - subtitle: 'With repositionable floating action button', - icon: GalleryIcons.bottom_app_bar, - category: _kMaterialComponents, - routeName: BottomAppBarDemo.routeName, - buildRoute: (BuildContext context) => new BottomAppBarDemo(), - ), - new GalleryDemo( - title: 'Bottom navigation', - subtitle: 'Bottom navigation with cross-fading views', - icon: GalleryIcons.bottom_navigation, - category: _kMaterialComponents, - routeName: BottomNavigationDemo.routeName, - buildRoute: (BuildContext context) => new BottomNavigationDemo(), - ), - new GalleryDemo( - title: 'Buttons', - subtitle: 'All kinds: flat, raised, dropdown, icon, etc', - icon: GalleryIcons.generic_buttons, - category: _kMaterialComponents, - routeName: ButtonsDemo.routeName, - buildRoute: (BuildContext context) => new ButtonsDemo(), - ), - new GalleryDemo( - title: 'Cards', - subtitle: 'Material with rounded corners and a drop shadow', - icon: GalleryIcons.cards, - category: _kMaterialComponents, - routeName: CardsDemo.routeName, - buildRoute: (BuildContext context) => new CardsDemo(), - ), - new GalleryDemo( - title: 'Chips', - subtitle: 'Label with an optional delete button and avatar', - icon: GalleryIcons.chips, - category: _kMaterialComponents, - routeName: ChipDemo.routeName, - buildRoute: (BuildContext context) => new ChipDemo(), - ), - new GalleryDemo( - title: 'Data tables', - subtitle: 'Rows and columns', - icon: GalleryIcons.data_table, - category: _kMaterialComponents, - routeName: DataTableDemo.routeName, - buildRoute: (BuildContext context) => new DataTableDemo(), - ), - new GalleryDemo( - title: 'Date and time pickers', - subtitle: 'Date and time selection widgets', - icon: GalleryIcons.event, - category: _kMaterialComponents, - routeName: DateAndTimePickerDemo.routeName, - buildRoute: (BuildContext context) => new DateAndTimePickerDemo(), - ), - new GalleryDemo( - title: 'Dialog', - subtitle: 'All kinds: simple, alert, fullscreen, etc', - icon: GalleryIcons.dialogs, - category: _kMaterialComponents, - routeName: DialogDemo.routeName, - buildRoute: (BuildContext context) => new DialogDemo(), - ), - new GalleryDemo( - title: 'Drawer', - subtitle: 'Navigation drawer with a standard header', - icon: GalleryIcons.menu, - category: _kMaterialComponents, - routeName: DrawerDemo.routeName, - buildRoute: (BuildContext context) => new DrawerDemo(), - ), - new GalleryDemo( - title: 'Expand/collapse list control', - subtitle: 'List with one level of sublists', - icon: GalleryIcons.expand_all, - category: _kMaterialComponents, - routeName: TwoLevelListDemo.routeName, - buildRoute: (BuildContext context) => new TwoLevelListDemo(), - ), - new GalleryDemo( - title: 'Expansion panels', - subtitle: 'List of expanding panels', - icon: GalleryIcons.expand_all, - category: _kMaterialComponents, - routeName: ExpansionPanelsDemo.routeName, - buildRoute: (BuildContext context) => new ExpansionPanelsDemo(), - ), - new GalleryDemo( - title: 'Floating action button', - subtitle: 'Action buttons with transitions', - icon: GalleryIcons.buttons, - category: _kMaterialComponents, - routeName: TabsFabDemo.routeName, - buildRoute: (BuildContext context) => new TabsFabDemo(), - ), - new GalleryDemo( - title: 'Grid', - subtitle: 'Row and column layout', - icon: GalleryIcons.grid_on, - category: _kMaterialComponents, - routeName: GridListDemo.routeName, - buildRoute: (BuildContext context) => const GridListDemo(), - ), - new GalleryDemo( - title: 'Icons', - subtitle: 'Enabled and disabled icons with varying opacity', - icon: GalleryIcons.sentiment_very_satisfied, - category: _kMaterialComponents, - routeName: IconsDemo.routeName, - buildRoute: (BuildContext context) => new IconsDemo(), - ), - new GalleryDemo( - title: 'Leave-behind list items', - subtitle: 'List items with hidden actions', - icon: GalleryIcons.lists_leave_behind, - category: _kMaterialComponents, - routeName: LeaveBehindDemo.routeName, - buildRoute: (BuildContext context) => const LeaveBehindDemo(), - ), - new GalleryDemo( - title: 'List', - subtitle: 'Layout variations for scrollable lists', - icon: GalleryIcons.list_alt, - category: _kMaterialComponents, - routeName: ListDemo.routeName, - buildRoute: (BuildContext context) => const ListDemo(), - ), - new GalleryDemo( - title: 'Menus', - subtitle: 'Menu buttons and simple menus', - icon: GalleryIcons.more_vert, - category: _kMaterialComponents, - routeName: MenuDemo.routeName, - buildRoute: (BuildContext context) => const MenuDemo(), - ), - new GalleryDemo( - title: 'Modal bottom sheet', - subtitle: 'Modal sheet that slides up from the bottom', - icon: GalleryIcons.bottom_sheets, - category: _kMaterialComponents, - routeName: ModalBottomSheetDemo.routeName, - buildRoute: (BuildContext context) => new ModalBottomSheetDemo(), - ), - new GalleryDemo( - title: 'Page selector', - subtitle: 'PageView with indicator', - icon: GalleryIcons.page_control, - category: _kMaterialComponents, - routeName: PageSelectorDemo.routeName, - buildRoute: (BuildContext context) => new PageSelectorDemo(), - ), - new GalleryDemo( - title: 'Persistent bottom sheet', - subtitle: 'Sheet that slides up from the bottom', - icon: GalleryIcons.bottom_sheet_persistent, - category: _kMaterialComponents, - routeName: PersistentBottomSheetDemo.routeName, - buildRoute: (BuildContext context) => new PersistentBottomSheetDemo(), - ), - new GalleryDemo( - title: 'Progress indicators', - subtitle: 'All kinds: linear, circular, indeterminate, etc', - icon: GalleryIcons.progress_activity, - category: _kMaterialComponents, - routeName: ProgressIndicatorDemo.routeName, - buildRoute: (BuildContext context) => new ProgressIndicatorDemo(), - ), - new GalleryDemo( - title: 'Pull to refresh', - subtitle: 'Refresh indicators', - icon: GalleryIcons.refresh, - category: _kMaterialComponents, - routeName: OverscrollDemo.routeName, - buildRoute: (BuildContext context) => const OverscrollDemo(), - ), - new GalleryDemo( - title: 'Scrollable tabs', - subtitle: 'Tab bar that scrolls', - category: _kMaterialComponents, - icon: GalleryIcons.tabs, - routeName: ScrollableTabsDemo.routeName, - buildRoute: (BuildContext context) => new ScrollableTabsDemo(), - ), - new GalleryDemo( - title: 'Selection controls', - subtitle: 'Checkboxes, radio buttons, and switches', - icon: GalleryIcons.check_box, - category: _kMaterialComponents, - routeName: SelectionControlsDemo.routeName, - buildRoute: (BuildContext context) => new SelectionControlsDemo(), - ), - new GalleryDemo( - title: 'Sliders', - subtitle: 'Widgets that select a value by dragging the slider thumb', - icon: GalleryIcons.sliders, - category: _kMaterialComponents, - routeName: SliderDemo.routeName, - buildRoute: (BuildContext context) => new SliderDemo(), - ), - new GalleryDemo( - title: 'Snackbar', - subtitle: 'Temporary message that appears at the bottom', - icon: GalleryIcons.snackbar, - category: _kMaterialComponents, - routeName: SnackBarDemo.routeName, - buildRoute: (BuildContext context) => const SnackBarDemo(), - ), - new GalleryDemo( - title: 'Tabs', - subtitle: 'Tabs with independently scrollable views', - icon: GalleryIcons.tabs, - category: _kMaterialComponents, - routeName: TabsDemo.routeName, - buildRoute: (BuildContext context) => new TabsDemo(), - ), - new GalleryDemo( - title: 'Text fields', - subtitle: 'Single line of editable text and numbers', - icon: GalleryIcons.text_fields_alt, - category: _kMaterialComponents, - routeName: TextFormFieldDemo.routeName, - buildRoute: (BuildContext context) => const TextFormFieldDemo(), - ), - new GalleryDemo( - title: 'Tooltips', - subtitle: 'Short message displayed after a long-press', - icon: GalleryIcons.tooltip, - category: _kMaterialComponents, - routeName: TooltipDemo.routeName, - buildRoute: (BuildContext context) => new TooltipDemo(), - ), - - // Cupertino Components - new GalleryDemo( - title: 'Activity Indicator', - subtitle: 'Cupertino styled activity indicator', - icon: GalleryIcons.cupertino_progress, - category: _kCupertinoComponents, - routeName: CupertinoProgressIndicatorDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoProgressIndicatorDemo(), - ), - new GalleryDemo( - title: 'Buttons', - subtitle: 'Cupertino styled buttons', - icon: GalleryIcons.generic_buttons, - category: _kCupertinoComponents, - routeName: CupertinoButtonsDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoButtonsDemo(), - ), - new GalleryDemo( - title: 'Dialogs', - subtitle: 'Cupertino styled dialogs', - icon: GalleryIcons.dialogs, - category: _kCupertinoComponents, - routeName: CupertinoDialogDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoDialogDemo(), - ), - new GalleryDemo( - title: 'Navigation', - subtitle: 'Cupertino styled navigation patterns', - icon: GalleryIcons.bottom_navigation, - category: _kCupertinoComponents, - routeName: CupertinoNavigationDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoNavigationDemo(), - ), - new GalleryDemo( - title: 'Pickers', - subtitle: 'Cupertino styled pickers', - icon: GalleryIcons.event, - category: _kCupertinoComponents, - routeName: CupertinoPickerDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoPickerDemo(), - ), - new GalleryDemo( - title: 'Pull to refresh', - subtitle: 'Cupertino styled refresh controls', - icon: GalleryIcons.cupertino_pull_to_refresh, - category: _kCupertinoComponents, - routeName: CupertinoRefreshControlDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoRefreshControlDemo(), - ), - new GalleryDemo( - title: 'Sliders', - subtitle: 'Cupertino styled sliders', - icon: GalleryIcons.sliders, - category: _kCupertinoComponents, - routeName: CupertinoSliderDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoSliderDemo(), - ), - new GalleryDemo( - title: 'Switches', - subtitle: 'Cupertino styled switches', - icon: GalleryIcons.cupertino_switch, - category: _kCupertinoComponents, - routeName: CupertinoSwitchDemo.routeName, - buildRoute: (BuildContext context) => new CupertinoSwitchDemo(), - ), - - // Media - new GalleryDemo( - title: 'Animated images', - subtitle: 'GIF and WebP animations', - icon: GalleryIcons.animation, - category: _kMedia, - routeName: ImagesDemo.routeName, - buildRoute: (BuildContext context) => new ImagesDemo(), - ), - new GalleryDemo( + new GalleryItem( title: 'Video', subtitle: 'Video playback', - icon: GalleryIcons.drive_video, - category: _kMedia, + category: 'Vignettes', routeName: VideoDemo.routeName, buildRoute: (BuildContext context) => const VideoDemo(), ), + // Material Components + new GalleryItem( + title: 'Backdrop', + subtitle: 'Select a front layer from back layer', + category: 'Material Components', + routeName: BackdropDemo.routeName, + buildRoute: (BuildContext context) => new BackdropDemo(), + ), + new GalleryItem( + title: 'Bottom app bar', + subtitle: 'With repositionable floating action button', + category: 'Material Components', + routeName: BottomAppBarDemo.routeName, + buildRoute: (BuildContext context) => new BottomAppBarDemo(), + ), + new GalleryItem( + title: 'Bottom navigation', + subtitle: 'Bottom navigation with cross-fading views', + category: 'Material Components', + routeName: BottomNavigationDemo.routeName, + buildRoute: (BuildContext context) => new BottomNavigationDemo(), + ), + new GalleryItem( + title: 'Buttons', + subtitle: 'All kinds: flat, raised, dropdown, icon, etc', + category: 'Material Components', + routeName: ButtonsDemo.routeName, + buildRoute: (BuildContext context) => new ButtonsDemo(), + ), + new GalleryItem( + title: 'Cards', + subtitle: 'Material with rounded corners and a drop shadow', + category: 'Material Components', + routeName: CardsDemo.routeName, + buildRoute: (BuildContext context) => new CardsDemo(), + ), + new GalleryItem( + title: 'Chips', + subtitle: 'Label with an optional delete button and avatar', + category: 'Material Components', + routeName: ChipDemo.routeName, + buildRoute: (BuildContext context) => new ChipDemo(), + ), + new GalleryItem( + title: 'Data tables', + subtitle: 'Rows and columns', + category: 'Material Components', + routeName: DataTableDemo.routeName, + buildRoute: (BuildContext context) => new DataTableDemo(), + ), + new GalleryItem( + title: 'Date and time pickers', + subtitle: 'Date and time selection widgets', + category: 'Material Components', + routeName: DateAndTimePickerDemo.routeName, + buildRoute: (BuildContext context) => new DateAndTimePickerDemo(), + ), + new GalleryItem( + title: 'Dialog', + subtitle: 'All kinds: simple, alert, fullscreen, etc', + category: 'Material Components', + routeName: DialogDemo.routeName, + buildRoute: (BuildContext context) => new DialogDemo(), + ), + new GalleryItem( + title: 'Drawer', + subtitle: 'Navigation drawer with a standard header', + category: 'Material Components', + routeName: DrawerDemo.routeName, + buildRoute: (BuildContext context) => new DrawerDemo(), + ), + new GalleryItem( + title: 'Expand/collapse list control', + subtitle: 'List with one level of sublists', + category: 'Material Components', + routeName: TwoLevelListDemo.routeName, + buildRoute: (BuildContext context) => new TwoLevelListDemo(), + ), + new GalleryItem( + title: 'Expansion panels', + subtitle: 'List of expanding panels', + category: 'Material Components', + routeName: ExpansionPanelsDemo.routeName, + buildRoute: (BuildContext context) => new ExpansionPanelsDemo(), + ), + new GalleryItem( + title: 'Floating action button', + subtitle: 'Action buttons with transitions', + category: 'Material Components', + routeName: TabsFabDemo.routeName, + buildRoute: (BuildContext context) => new TabsFabDemo(), + ), + new GalleryItem( + title: 'Grid', + subtitle: 'Row and column layout', + category: 'Material Components', + routeName: GridListDemo.routeName, + buildRoute: (BuildContext context) => const GridListDemo(), + ), + new GalleryItem( + title: 'Icons', + subtitle: 'Enabled and disabled icons with varying opacity', + category: 'Material Components', + routeName: IconsDemo.routeName, + buildRoute: (BuildContext context) => new IconsDemo(), + ), + new GalleryItem( + title: 'Leave-behind list items', + subtitle: 'List items with hidden actions', + category: 'Material Components', + routeName: LeaveBehindDemo.routeName, + buildRoute: (BuildContext context) => const LeaveBehindDemo(), + ), + new GalleryItem( + title: 'List', + subtitle: 'Layout variations for scrollable lists', + category: 'Material Components', + routeName: ListDemo.routeName, + buildRoute: (BuildContext context) => const ListDemo(), + ), + new GalleryItem( + title: 'Menus', + subtitle: 'Menu buttons and simple menus', + category: 'Material Components', + routeName: MenuDemo.routeName, + buildRoute: (BuildContext context) => const MenuDemo(), + ), + new GalleryItem( + title: 'Modal bottom sheet', + subtitle: 'Modal sheet that slides up from the bottom', + category: 'Material Components', + routeName: ModalBottomSheetDemo.routeName, + buildRoute: (BuildContext context) => new ModalBottomSheetDemo(), + ), + new GalleryItem( + title: 'Page selector', + subtitle: 'PageView with indicator', + category: 'Material Components', + routeName: PageSelectorDemo.routeName, + buildRoute: (BuildContext context) => new PageSelectorDemo(), + ), + new GalleryItem( + title: 'Persistent bottom sheet', + subtitle: 'Sheet that slides up from the bottom', + category: 'Material Components', + routeName: PersistentBottomSheetDemo.routeName, + buildRoute: (BuildContext context) => new PersistentBottomSheetDemo(), + ), + new GalleryItem( + title: 'Progress indicators', + subtitle: 'All kinds: linear, circular, indeterminate, etc', + category: 'Material Components', + routeName: ProgressIndicatorDemo.routeName, + buildRoute: (BuildContext context) => new ProgressIndicatorDemo(), + ), + new GalleryItem( + title: 'Pull to refresh', + subtitle: 'Refresh indicators', + category: 'Material Components', + routeName: OverscrollDemo.routeName, + buildRoute: (BuildContext context) => const OverscrollDemo(), + ), + new GalleryItem( + title: 'Scrollable tabs', + subtitle: 'Tab bar that scrolls', + category: 'Material Components', + routeName: ScrollableTabsDemo.routeName, + buildRoute: (BuildContext context) => new ScrollableTabsDemo(), + ), + new GalleryItem( + title: 'Selection controls', + subtitle: 'Checkboxes, radio buttons, and switches', + category: 'Material Components', + routeName: SelectionControlsDemo.routeName, + buildRoute: (BuildContext context) => new SelectionControlsDemo(), + ), + new GalleryItem( + title: 'Sliders', + subtitle: 'Widgets that select a value by dragging the slider thumb', + category: 'Material Components', + routeName: SliderDemo.routeName, + buildRoute: (BuildContext context) => new SliderDemo(), + ), + new GalleryItem( + title: 'Snackbar', + subtitle: 'Temporary message that appears at the bottom', + category: 'Material Components', + routeName: SnackBarDemo.routeName, + buildRoute: (BuildContext context) => const SnackBarDemo(), + ), + new GalleryItem( + title: 'Tabs', + subtitle: 'Tabs with independently scrollable views', + category: 'Material Components', + routeName: TabsDemo.routeName, + buildRoute: (BuildContext context) => new TabsDemo(), + ), + new GalleryItem( + title: 'Text fields', + subtitle: 'Single line of editable text and numbers', + category: 'Material Components', + routeName: TextFormFieldDemo.routeName, + buildRoute: (BuildContext context) => const TextFormFieldDemo(), + ), + new GalleryItem( + title: 'Tooltips', + subtitle: 'Short message displayed after a long-press', + category: 'Material Components', + routeName: TooltipDemo.routeName, + buildRoute: (BuildContext context) => new TooltipDemo(), + ), + // Cupertino Components + new GalleryItem( + title: 'Activity Indicator', + subtitle: 'Cupertino styled activity indicator', + category: 'Cupertino Components', + routeName: CupertinoProgressIndicatorDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoProgressIndicatorDemo(), + ), + new GalleryItem( + title: 'Buttons', + subtitle: 'Cupertino styled buttons', + category: 'Cupertino Components', + routeName: CupertinoButtonsDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoButtonsDemo(), + ), + new GalleryItem( + title: 'Dialogs', + subtitle: 'Cupertino styled dialogs', + category: 'Cupertino Components', + routeName: CupertinoDialogDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoDialogDemo(), + ), + new GalleryItem( + title: 'Navigation', + subtitle: 'Cupertino styled navigation patterns', + category: 'Cupertino Components', + routeName: CupertinoNavigationDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoNavigationDemo(), + ), + new GalleryItem( + title: 'Pickers', + subtitle: 'Cupertino styled pickers', + category: 'Cupertino Components', + routeName: CupertinoPickerDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoPickerDemo(), + ), + new GalleryItem( + title: 'Pull to refresh', + subtitle: 'Cupertino styled refresh controls', + category: 'Cupertino Components', + routeName: CupertinoRefreshControlDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoRefreshControlDemo(), + ), + new GalleryItem( + title: 'Sliders', + subtitle: 'Cupertino styled sliders', + category: 'Cupertino Components', + routeName: CupertinoSliderDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoSliderDemo(), + ), + new GalleryItem( + title: 'Switches', + subtitle: 'Cupertino styled switches', + category: 'Cupertino Components', + routeName: CupertinoSwitchDemo.routeName, + buildRoute: (BuildContext context) => new CupertinoSwitchDemo(), + ), + // Media + new GalleryItem( + title: 'Animated images', + subtitle: 'GIF and WebP animations', + category: 'Media', + routeName: ImagesDemo.routeName, + buildRoute: (BuildContext context) => new ImagesDemo(), + ), + // Styles + new GalleryItem( + title: 'Colors', + subtitle: 'All of the predefined colors', + category: 'Style', + routeName: ColorsDemo.routeName, + buildRoute: (BuildContext context) => new ColorsDemo(), + ), + new GalleryItem( + title: 'Typography', + subtitle: 'All of the predefined text styles', + category: 'Style', + routeName: TypographyDemo.routeName, + buildRoute: (BuildContext context) => new TypographyDemo(), + ) ]; // Keep Pesto around for its regression test value. It is not included // in (release builds) the performance tests. assert(() { - galleryDemos.insert(0, - new GalleryDemo( + galleryItems.insert(0, + new GalleryItem( title: 'Pesto', subtitle: 'Simple recipe browser', - icon: Icons.adjust, - category: _kDemos, + category: 'Vignettes', routeName: PestoDemo.routeName, buildRoute: (BuildContext context) => const PestoDemo(), ), @@ -472,18 +388,7 @@ List _buildGalleryDemos() { return true; }()); - return galleryDemos; + return galleryItems; } -final List kAllGalleryDemos = _buildGalleryDemos(); - -final Set kAllGalleryDemoCategories = - kAllGalleryDemos.map((GalleryDemo demo) => demo.category).toSet(); - -final Map> kGalleryCategoryToDemos = - new Map>.fromIterable( - kAllGalleryDemoCategories, - value: (dynamic category) { - return kAllGalleryDemos.where((GalleryDemo demo) => demo.category == category).toList(); - }, - ); +final List kAllGalleryItems = _buildGalleryItems(); diff --git a/examples/flutter_gallery/lib/gallery/options.dart b/examples/flutter_gallery/lib/gallery/options.dart deleted file mode 100644 index f3fbe02a46..0000000000 --- a/examples/flutter_gallery/lib/gallery/options.dart +++ /dev/null @@ -1,466 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'about.dart'; -import 'scales.dart'; -import 'themes.dart'; - -class GalleryOptions { - GalleryOptions({ - this.theme, - this.textScaleFactor, - this.textDirection: TextDirection.ltr, - this.timeDilation: 1.0, - this.platform, - this.showOffscreenLayersCheckerboard: false, - this.showRasterCacheImagesCheckerboard: false, - this.showPerformanceOverlay: false, - }); - - final GalleryTheme theme; - final GalleryTextScaleValue textScaleFactor; - final TextDirection textDirection; - final double timeDilation; - final TargetPlatform platform; - final bool showPerformanceOverlay; - final bool showRasterCacheImagesCheckerboard; - final bool showOffscreenLayersCheckerboard; - - GalleryOptions copyWith({ - GalleryTheme theme, - GalleryTextScaleValue textScaleFactor, - TextDirection textDirection, - double timeDilation, - TargetPlatform platform, - bool showPerformanceOverlay, - bool showRasterCacheImagesCheckerboard, - bool showOffscreenLayersCheckerboard, - }) { - return new GalleryOptions( - theme: theme ?? this.theme, - textScaleFactor: textScaleFactor ?? this.textScaleFactor, - textDirection: textDirection ?? this.textDirection, - timeDilation: timeDilation ?? this.timeDilation, - platform: platform ?? this.platform, - showPerformanceOverlay: showPerformanceOverlay ?? this.showPerformanceOverlay, - showOffscreenLayersCheckerboard: showOffscreenLayersCheckerboard ?? this.showOffscreenLayersCheckerboard, - showRasterCacheImagesCheckerboard: showRasterCacheImagesCheckerboard ?? this.showRasterCacheImagesCheckerboard, - ); - } - - @override - bool operator ==(dynamic other) { - if (runtimeType != other.runtimeType) - return false; - final GalleryOptions typedOther = other; - return theme == typedOther.theme - && textScaleFactor == typedOther.textScaleFactor - && textDirection == typedOther.textDirection - && platform == typedOther.platform - && showPerformanceOverlay == typedOther.showPerformanceOverlay - && showRasterCacheImagesCheckerboard == typedOther.showRasterCacheImagesCheckerboard - && showOffscreenLayersCheckerboard == typedOther.showRasterCacheImagesCheckerboard; - } - - @override - int get hashCode => hashValues( - theme, - textScaleFactor, - textDirection, - timeDilation, - platform, - showPerformanceOverlay, - showRasterCacheImagesCheckerboard, - showOffscreenLayersCheckerboard, - ); - - @override - String toString() { - return '$runtimeType($theme)'; - } -} - -const double _kItemHeight = 48.0; -const EdgeInsetsDirectional _kItemPadding = const EdgeInsetsDirectional.only(start: 56.0); - -class _OptionsItem extends StatelessWidget { - const _OptionsItem({ Key key, this.child }) : super(key: key); - - final Widget child; - - @override - Widget build(BuildContext context) { - final double textScaleFactor = MediaQuery.of(context)?.textScaleFactor ?? 1.0; - - return new Container( - constraints: new BoxConstraints(minHeight: _kItemHeight * textScaleFactor), - padding: _kItemPadding, - alignment: AlignmentDirectional.centerStart, - child: new DefaultTextStyle( - style: DefaultTextStyle.of(context).style, - maxLines: 2, - overflow: TextOverflow.fade, - child: new IconTheme( - data: Theme.of(context).primaryIconTheme, - child: child, - ), - ), - ); - } -} - -class _BooleanItem extends StatelessWidget { - const _BooleanItem(this.title, this.value, this.onChanged); - - final String title; - final bool value; - final ValueChanged onChanged; - - @override - Widget build(BuildContext context) { - final bool isDark = Theme.of(context).brightness == Brightness.dark; - return new _OptionsItem( - child: new Row( - children: [ - new Expanded(child: new Text(title)), - new Switch( - value: value, - onChanged: onChanged, - activeColor: const Color(0xFF39CEFD), - activeTrackColor: isDark ? Colors.white30 : Colors.black26, - ), - ], - ), - ); - } -} - -class _ActionItem extends StatelessWidget { - const _ActionItem(this.text, this.onTap); - - final String text; - final VoidCallback onTap; - - @override - Widget build(BuildContext context) { - return new _OptionsItem( - child: new _FlatButton( - onPressed: onTap, - child: new Text(text), - ), - ); - } -} - -class _FlatButton extends StatelessWidget { - const _FlatButton({ Key key, this.onPressed, this.child }) : super(key: key); - - final VoidCallback onPressed; - final Widget child; - - @override - Widget build(BuildContext context) { - return new FlatButton( - padding: EdgeInsets.zero, - onPressed: onPressed, - child: new DefaultTextStyle( - style: Theme.of(context).primaryTextTheme.subhead, - child: child, - ), - ); - } -} - -class _Heading extends StatelessWidget { - const _Heading(this.text); - - final String text; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - return new Semantics( - header: true, - child: new _OptionsItem( - child: new DefaultTextStyle( - style: theme.textTheme.body1.copyWith( - fontFamily: 'GoogleSans', - color: theme.accentColor, - ), - child: new Text(text), - ), - ), - ); - } -} - -class _ThemeItem extends StatelessWidget { - const _ThemeItem(this.options, this.onOptionsChanged); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - - @override - Widget build(BuildContext context) { - return new _BooleanItem( - 'Dark Theme', - options.theme == kDarkGalleryTheme, - (bool value) { - onOptionsChanged( - options.copyWith( - theme: value ? kDarkGalleryTheme : kLightGalleryTheme, - ), - ); - }, - ); - } -} - -class _TextScaleFactorItem extends StatelessWidget { - const _TextScaleFactorItem(this.options, this.onOptionsChanged); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - - @override - Widget build(BuildContext context) { - return new _OptionsItem( - child: new Row( - children: [ - new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text('Text size'), - new Text( - '${options.textScaleFactor.label}', - style: Theme.of(context).primaryTextTheme.body1, - ), - ], - ), - ), - new PopupMenuButton( - padding: const EdgeInsetsDirectional.only(end: 16.0), - icon: const Icon(Icons.arrow_drop_down), - itemBuilder: (BuildContext context) { - return kAllGalleryTextScaleValues.map((GalleryTextScaleValue scaleValue) { - return new PopupMenuItem( - value: scaleValue, - child: new Text(scaleValue.label), - ); - }).toList(); - }, - onSelected: (GalleryTextScaleValue scaleValue) { - onOptionsChanged( - options.copyWith(textScaleFactor: scaleValue), - ); - }, - ), - ], - ), - ); - } -} - -class _TextDirectionItem extends StatelessWidget { - const _TextDirectionItem(this.options, this.onOptionsChanged); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - - @override - Widget build(BuildContext context) { - return new _BooleanItem( - 'Force RTL', - options.textDirection == TextDirection.rtl, - (bool value) { - onOptionsChanged( - options.copyWith( - textDirection: value ? TextDirection.rtl : TextDirection.ltr, - ), - ); - }, - ); - } -} - -class _TimeDilationItem extends StatelessWidget { - const _TimeDilationItem(this.options, this.onOptionsChanged); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - - @override - Widget build(BuildContext context) { - return new _BooleanItem( - 'Slow motion', - options.timeDilation != 1.0, - (bool value) { - onOptionsChanged( - options.copyWith( - timeDilation: value ? 20.0 : 1.0, - ), - ); - }, - ); - } -} - -class _PlatformItem extends StatelessWidget { - const _PlatformItem(this.options, this.onOptionsChanged); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - - String _platformLabel(TargetPlatform platform) { - switch(platform) { - case TargetPlatform.android: - return 'Mountain View'; - case TargetPlatform.fuchsia: - return 'Fuchsia'; - case TargetPlatform.iOS: - return 'Cupertino'; - } - assert(false); - return null; - } - - @override - Widget build(BuildContext context) { - return new _OptionsItem( - child: new Row( - children: [ - new Expanded( - child: new Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text('Platform mechanics'), - new Text( - '${_platformLabel(options.platform)}', - style: Theme.of(context).primaryTextTheme.body1, - ), - ], - ), - ), - new PopupMenuButton( - padding: const EdgeInsetsDirectional.only(end: 16.0), - icon: const Icon(Icons.arrow_drop_down), - itemBuilder: (BuildContext context) { - return TargetPlatform.values.map((TargetPlatform platform) { - return new PopupMenuItem( - value: platform, - child: new Text(_platformLabel(platform)), - ); - }).toList(); - }, - onSelected: (TargetPlatform platform) { - onOptionsChanged( - options.copyWith(platform: platform), - ); - }, - ), - ], - ), - ); - } -} - -class GalleryOptionsPage extends StatelessWidget { - const GalleryOptionsPage({ - Key key, - this.options, - this.onOptionsChanged, - this.onSendFeedback, - }) : super(key: key); - - final GalleryOptions options; - final ValueChanged onOptionsChanged; - final VoidCallback onSendFeedback; - - List _enabledDiagnosticItems() { - // Boolean showFoo options with a value of null: don't display - // the showFoo option at all. - if (null == options.showOffscreenLayersCheckerboard - ?? options.showRasterCacheImagesCheckerboard - ?? options.showPerformanceOverlay) - return const []; - - final List items = [ - const Divider(), - const _Heading('Diagnostics'), - ]; - - if (options.showOffscreenLayersCheckerboard != null) { - items.add( - new _BooleanItem( - 'Highlight offscreen layers', - options.showOffscreenLayersCheckerboard, - (bool value) { - onOptionsChanged(options.copyWith(showOffscreenLayersCheckerboard: value)); - } - ), - ); - } - if (options.showRasterCacheImagesCheckerboard != null) { - items.add( - new _BooleanItem( - 'Highlight raster cache images', - options.showRasterCacheImagesCheckerboard, - (bool value) { - onOptionsChanged(options.copyWith(showRasterCacheImagesCheckerboard: value)); - }, - ), - ); - } - if (options.showPerformanceOverlay != null) { - items.add( - new _BooleanItem( - 'Show performance overlay', - options.showPerformanceOverlay, - (bool value) { - onOptionsChanged(options.copyWith(showPerformanceOverlay: value)); - }, - ), - ); - } - - return items; - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - - return new DefaultTextStyle( - style: theme.primaryTextTheme.subhead, - child: new ListView( - padding: const EdgeInsets.only(bottom: 124.0), - children: [ - const _Heading('Display'), - new _ThemeItem(options, onOptionsChanged), - new _TextScaleFactorItem(options, onOptionsChanged), - new _TextDirectionItem(options, onOptionsChanged), - new _TimeDilationItem(options, onOptionsChanged), - const Divider(), - const _Heading('Platform mechanics'), - new _PlatformItem(options, onOptionsChanged), - ]..addAll( - _enabledDiagnosticItems(), - )..addAll( - [ - const Divider(), - const _Heading('Flutter gallery'), - new _ActionItem('About Flutter Gallery', () { - showGalleryAboutDialog(context); - }), - new _ActionItem('Send feedback', onSendFeedback), - ], - ), - ), - ); - } -} diff --git a/examples/flutter_gallery/lib/gallery/scales.dart b/examples/flutter_gallery/lib/gallery/scales.dart deleted file mode 100644 index bd5c474036..0000000000 --- a/examples/flutter_gallery/lib/gallery/scales.dart +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class GalleryTextScaleValue { - const GalleryTextScaleValue(this.scale, this.label); - - final double scale; - final String label; - - @override - bool operator ==(dynamic other) { - if (runtimeType != other.runtimeType) - return false; - final GalleryTextScaleValue typedOther = other; - return scale == typedOther.scale && label == typedOther.label; - } - - @override - int get hashCode => hashValues(scale, label); - - @override - String toString() { - return '$runtimeType($label)'; - } - -} - -const List kAllGalleryTextScaleValues = const [ - const GalleryTextScaleValue(null, 'System Default'), - const GalleryTextScaleValue(0.8, 'Small'), - const GalleryTextScaleValue(1.0, 'Normal'), - const GalleryTextScaleValue(1.3, 'Large'), - const GalleryTextScaleValue(2.0, 'Huge'), -]; diff --git a/examples/flutter_gallery/lib/gallery/theme.dart b/examples/flutter_gallery/lib/gallery/theme.dart new file mode 100644 index 0000000000..f84b52bdf2 --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/theme.dart @@ -0,0 +1,62 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +class GalleryTheme { + const GalleryTheme({ this.name, this.icon, this.theme }); + final String name; + final IconData icon; + final ThemeData theme; +} + +const int _kPurplePrimaryValue = 0xFF6200EE; +const MaterialColor _kPurpleSwatch = const MaterialColor( + _kPurplePrimaryValue, + const { + 50: const Color(0xFFF2E7FE), + 100: const Color(0xFFD7B7FD), + 200: const Color(0xFFBB86FC), + 300: const Color(0xFF9E55FC), + 400: const Color(0xFF7F22FD), + 500: const Color(_kPurplePrimaryValue), + 700: const Color(0xFF3700B3), + 800: const Color(0xFF270096), + 900: const Color(0xFF190078), + } +); + +final List kAllGalleryThemes = [ + new GalleryTheme( + name: 'Light', + icon: Icons.brightness_5, + theme: new ThemeData( + brightness: Brightness.light, + primarySwatch: Colors.blue, + ), + ), + new GalleryTheme( + name: 'Dark', + icon: Icons.brightness_7, + theme: new ThemeData( + brightness: Brightness.dark, + primarySwatch: Colors.blue, + ), + ), + new GalleryTheme( + name: 'Purple', + icon: Icons.brightness_6, + theme: new ThemeData( + brightness: Brightness.light, + primarySwatch: _kPurpleSwatch, + buttonColor: _kPurpleSwatch[500], + splashColor: Colors.white24, + splashFactory: InkRipple.splashFactory, + errorColor: const Color(0xFFFF1744), + buttonTheme: const ButtonThemeData( + textTheme: ButtonTextTheme.primary, + ), + ), + ), +]; diff --git a/examples/flutter_gallery/lib/gallery/themes.dart b/examples/flutter_gallery/lib/gallery/themes.dart deleted file mode 100644 index 18d545c4ed..0000000000 --- a/examples/flutter_gallery/lib/gallery/themes.dart +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class GalleryTheme { - const GalleryTheme._(this.name, this.data); - - final String name; - final ThemeData data; -} - -final GalleryTheme kDarkGalleryTheme = new GalleryTheme._('Dark', _buildDarkTheme()); -final GalleryTheme kLightGalleryTheme = new GalleryTheme._('Light', _buildLightTheme()); - -TextTheme _buildTextTheme(TextTheme base) { - return base.copyWith( - title: base.title.copyWith( - fontFamily: 'GoogleSans', - ), - ); -} - -ThemeData _buildDarkTheme() { - const Color primaryColor = const Color(0xFF0175c2); - final ThemeData base = new ThemeData.dark(); - return base.copyWith( - primaryColor: primaryColor, - buttonColor: primaryColor, - indicatorColor: Colors.white, - accentColor: const Color(0xFF13B9FD), - canvasColor: const Color(0xFF202124), - scaffoldBackgroundColor: const Color(0xFF202124), - backgroundColor: const Color(0xFF202124), - buttonTheme: const ButtonThemeData( - textTheme: ButtonTextTheme.primary, - ), - textTheme: _buildTextTheme(base.textTheme), - primaryTextTheme: _buildTextTheme(base.primaryTextTheme), - accentTextTheme: _buildTextTheme(base.accentTextTheme), - ); -} - -ThemeData _buildLightTheme() { - const Color primaryColor = const Color(0xFF0175c2); - final ThemeData base = new ThemeData.light(); - return base.copyWith( - primaryColor: primaryColor, - buttonColor: primaryColor, - indicatorColor: Colors.white, - splashColor: Colors.white24, - splashFactory: InkRipple.splashFactory, - accentColor: const Color(0xFF13B9FD), - canvasColor: Colors.white, - scaffoldBackgroundColor: Colors.white, - backgroundColor: Colors.white, - buttonTheme: const ButtonThemeData( - textTheme: ButtonTextTheme.primary, - ), - textTheme: _buildTextTheme(base.textTheme), - primaryTextTheme: _buildTextTheme(base.primaryTextTheme), - accentTextTheme: _buildTextTheme(base.accentTextTheme), - ); -} diff --git a/examples/flutter_gallery/lib/gallery/updater.dart b/examples/flutter_gallery/lib/gallery/updates.dart similarity index 100% rename from examples/flutter_gallery/lib/gallery/updater.dart rename to examples/flutter_gallery/lib/gallery/updates.dart diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index f7bca7446c..877d08aaee 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: flutter_gallery_assets: git: url: https://flutter.googlesource.com/gallery-assets - ref: 43590e625ab1b07f6a5809287ce16f7e61d9e165 + ref: d318485f208376e06d7e330d9f191141d14722b8 charcode: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,11 +79,6 @@ flutter: uses-material-design: true assets: - lib/gallery/example_code.dart - - packages/flutter_gallery_assets/white_logo/logo.png - - packages/flutter_gallery_assets/white_logo/1.5x/logo.png - - packages/flutter_gallery_assets/white_logo/2.5x/logo.png - - packages/flutter_gallery_assets/white_logo/3.0x/logo.png - - packages/flutter_gallery_assets/white_logo/4.0x/logo.png - packages/flutter_gallery_assets/videos/butterfly.mp4 - packages/flutter_gallery_assets/animated_flutter_lgtm.gif - packages/flutter_gallery_assets/animated_flutter_stickers.webp @@ -171,42 +166,5 @@ flutter: - family: AbrilFatface fonts: - asset: packages/flutter_gallery_assets/shrine/fonts/abrilfatface/AbrilFatface-Regular.ttf - - family: GalleryIcons - fonts: - - asset: packages/flutter_gallery_assets/fonts/GalleryIcons.ttf - - family: GoogleSans - fonts: - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-BoldItalic.ttf - weight: 700 - style: italic - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-Bold.ttf - weight: 700 - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-Italic.ttf - weight: 400 - style: italic - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-MediumItalic.ttf - weight: 500 - style: italic - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-Medium.ttf - weight: 500 - - asset: packages/flutter_gallery_assets/fonts/GoogleSans-Regular.ttf - weight: 400 - - family: GoogleSansDisplay - fonts: - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-BoldItalic.ttf - weight: 700 - style: italic - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-Bold.ttf - weight: 700 - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-Italic.ttf - weight: 400 - style: italic - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-MediumItalic.ttf - style: italic - weight: 500 - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-Medium.ttf - weight: 500 - - asset: packages/flutter_gallery_assets/fonts/GoogleSansDisplay-Regular.ttf - weight: 400 # PUBSPEC CHECKSUM: 50c7 diff --git a/examples/flutter_gallery/test/drawer_test.dart b/examples/flutter_gallery/test/drawer_test.dart index bcc1203a1f..5a108b34ae 100644 --- a/examples/flutter_gallery/test/drawer_test.dart +++ b/examples/flutter_gallery/test/drawer_test.dart @@ -14,82 +14,87 @@ void main() { testWidgets('Flutter Gallery drawer item test', (WidgetTester tester) async { bool hasFeedback = false; + void mockOnSendFeedback() { + hasFeedback = true; + } - await tester.pumpWidget( - new GalleryApp( - onSendFeedback: () { - hasFeedback = true; - }, - ), - ); + await tester.pumpWidget(new GalleryApp(onSendFeedback: mockOnSendFeedback)); await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - // Show the options page - await tester.tap(find.byTooltip('Show options page')); - await tester.pumpAndSettle(); + final Finder finder = find.byWidgetPredicate((Widget widget) { + return widget is Tooltip && widget.message == 'Open navigation menu'; + }); + expect(finder, findsOneWidget); + + // Open drawer + await tester.tap(finder); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation MaterialApp app = find.byType(MaterialApp).evaluate().first.widget; expect(app.theme.brightness, equals(Brightness.light)); - // Switch to the dark theme: first switch control - await tester.tap(find.byType(Switch).first); - await tester.pumpAndSettle(); + // Change theme + await tester.tap(find.text('Dark')); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation app = find.byType(MaterialApp).evaluate().first.widget; expect(app.theme.brightness, equals(Brightness.dark)); expect(app.theme.platform, equals(TargetPlatform.android)); - // Popup the platform menu: second menu button, choose 'Cupertino' - await tester.tap(find.byIcon(Icons.arrow_drop_down).at(1)); - await tester.pumpAndSettle(); - await tester.tap(find.text('Cupertino').at(1)); - await tester.pumpAndSettle(); + // Change platform + await tester.tap(find.text('iOS')); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation app = find.byType(MaterialApp).evaluate().first.widget; expect(app.theme.platform, equals(TargetPlatform.iOS)); // Verify the font scale. - final Size origTextSize = tester.getSize(find.text('Text size')); - expect(origTextSize, equals(const Size(144.0, 16.0))); + final Size origTextSize = tester.getSize(find.text('Small')); + expect(origTextSize, equals(const Size(176.0, 14.0))); - // Popup the text size menu: first menu button, choose 'Small' - await tester.tap(find.byIcon(Icons.arrow_drop_down).first); - await tester.pumpAndSettle(); + // Switch font scale. await tester.tap(find.text('Small')); - await tester.pumpAndSettle(); - Size textSize = tester.getSize(find.text('Text size')); - expect(textSize, equals(const Size(116.0, 13.0))); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + final Size textSize = tester.getSize(find.text('Small')); + expect(textSize, equals(const Size(176.0, 11.0))); - // Set font scale back to the default. - await tester.tap(find.byIcon(Icons.arrow_drop_down).first); - await tester.pumpAndSettle(); + // Set font scale back to default. await tester.tap(find.text('System Default')); - await tester.pumpAndSettle(); - textSize = tester.getSize(find.text('Text size')); - expect(textSize, origTextSize); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + final Size newTextSize = tester.getSize(find.text('Small')); + expect(newTextSize, equals(origTextSize)); - // Switch to slow animation: third switch control - expect(timeDilation, 1.0); - await tester.tap(find.byType(Switch).at(2)); - await tester.pumpAndSettle(); + // Scroll to the bottom of the menu. + await tester.drag(find.text('Small'), const Offset(0.0, -1000.0)); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + + // Test slow animations. + expect(timeDilation, equals(1.0)); + await tester.tap(find.text('Animate Slowly')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. expect(timeDilation, greaterThan(1.0)); - // Restore normal animation: third switch control - await tester.tap(find.byType(Switch).at(2)); - await tester.pumpAndSettle(); - expect(timeDilation, 1.0); + // Put back time dilation (so as not to throw off tests after this one). + await tester.tap(find.text('Animate Slowly')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + expect(timeDilation, equals(1.0)); // Send feedback. expect(hasFeedback, false); - - // Scroll to the end - await tester.drag(find.text('Text size'), const Offset(0.0, -1000.0)); - await tester.pumpAndSettle(); await tester.tap(find.text('Send feedback')); - await tester.pumpAndSettle(); + await tester.pump(); expect(hasFeedback, true); - // Hide the options page - await tester.tap(find.byTooltip('Show options page')); - await tester.pumpAndSettle(); + // Close drawer + await tester.tap(find.byType(DrawerController)); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation }); } diff --git a/examples/flutter_gallery/test/example_code_display_test.dart b/examples/flutter_gallery/test/example_code_display_test.dart index bdcba35c7b..8b9624ef80 100644 --- a/examples/flutter_gallery/test/example_code_display_test.dart +++ b/examples/flutter_gallery/test/example_code_display_test.dart @@ -18,16 +18,25 @@ void main() { await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - Scrollable.ensureVisible(tester.element(find.text('Material')), alignment: 0.5); - await tester.pumpAndSettle(); - await tester.tap(find.text('Material')); - await tester.pumpAndSettle(); + + // Scroll the Buttons demo into view so that a tap will succeed + final Offset allDemosOrigin = tester.getTopRight(find.text('Vignettes')); + final Finder button = find.text('Buttons'); + while (button.evaluate().isEmpty) { + await tester.dragFrom(allDemosOrigin, const Offset(0.0, -200.0)); + await tester.pumpAndSettle(); + } // Launch the buttons demo and then prove that showing the example // code dialog does not crash. await tester.tap(find.text('Buttons')); - await tester.pumpAndSettle(); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation + + await tester.tap(find.text('RAISED')); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation await tester.tap(find.byTooltip('Show example code')); await tester.pump(); // start animation diff --git a/examples/flutter_gallery/test/live_smoketest.dart b/examples/flutter_gallery/test/live_smoketest.dart index caebc3ae74..08e2c69975 100644 --- a/examples/flutter_gallery/test/live_smoketest.dart +++ b/examples/flutter_gallery/test/live_smoketest.dart @@ -10,15 +10,18 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_gallery/gallery/demos.dart'; -import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; +import 'package:flutter_gallery/gallery/app.dart'; +import 'package:flutter_gallery/gallery/item.dart'; // Reports success or failure to the native code. const MethodChannel _kTestChannel = const MethodChannel('io.flutter.demo.gallery/TestLifecycleListener'); +// The titles for all of the Gallery demos. +final List _kAllDemos = kAllGalleryItems.map((GalleryItem item) => item.title).toList(); + // We don't want to wait for animations to complete before tapping the // back button in the demos with these titles. -const List _kUnsynchronizedDemoTitles = const [ +const List _kUnsynchronizedDemos = const [ 'Progress indicators', 'Activity Indicator', 'Video', @@ -26,45 +29,38 @@ const List _kUnsynchronizedDemoTitles = const [ // These demos can't be backed out of by tapping a button whose // tooltip is 'Back'. -const List _kSkippedDemoTitles = const [ +const List _kSkippedDemos = const [ 'Pull to refresh', - 'Progress indicators', - 'Activity Indicator', - 'Video', ]; Future main() async { try { // Verify that _kUnsynchronizedDemos and _kSkippedDemos identify // demos that actually exist. - final List allDemoTitles = kAllGalleryDemos.map((GalleryDemo demo) => demo.title).toList(); - if (!new Set.from(allDemoTitles).containsAll(_kUnsynchronizedDemoTitles)) - fail('Unrecognized demo titles in _kUnsynchronizedDemosTitles: $_kUnsynchronizedDemoTitles'); - if (!new Set.from(allDemoTitles).containsAll(_kSkippedDemoTitles)) - fail('Unrecognized demo names in _kSkippedDemoTitles: $_kSkippedDemoTitles'); + if (!new Set.from(_kAllDemos).containsAll(_kUnsynchronizedDemos)) + fail('Unrecognized demo names in _kUnsynchronizedDemos: $_kUnsynchronizedDemos'); + if (!new Set.from(_kAllDemos).containsAll(_kSkippedDemos)) + fail('Unrecognized demo names in _kSkippedDemos: $_kSkippedDemos'); runApp(const GalleryApp()); final _LiveWidgetController controller = new _LiveWidgetController(); - for (GalleryDemoCategory category in kAllGalleryDemoCategories) { - await controller.tap(find.text(category.name)); - for (GalleryDemo demo in kGalleryCategoryToDemos[category]) { - final Finder demoItem = find.text(demo.title); - await controller.scrollIntoView(demoItem, alignment: 0.5); + for (String demo in _kAllDemos) { + print('Testing "$demo" demo'); + final Finder menuItem = find.text(demo); + await controller.scrollIntoView(menuItem, alignment: 0.5); - if (_kSkippedDemoTitles.contains(demo.title)) { - print('> skipped $demo'); - continue; - } - - for (int i = 0; i < 2; i += 1) { - await controller.tap(demoItem); // Launch the demo - controller.frameSync = !_kUnsynchronizedDemoTitles.contains(demo.title); - await controller.tap(find.byTooltip('Back')); - controller.frameSync = true; - } - print('Success'); + if (_kSkippedDemos.contains(demo)) { + print('> skipped $demo'); + continue; } - await controller.tap(find.byTooltip('Back')); + + for (int i = 0; i < 2; i += 1) { + await controller.tap(menuItem); // Launch the demo + controller.frameSync = !_kUnsynchronizedDemos.contains(demo); + await controller.tap(find.byTooltip('Back')); + controller.frameSync = true; + } + print('Success'); } _kTestChannel.invokeMethod('success'); diff --git a/examples/flutter_gallery/test/pesto_test.dart b/examples/flutter_gallery/test/pesto_test.dart index 7d6d555aa7..9bf2b44a81 100644 --- a/examples/flutter_gallery/test/pesto_test.dart +++ b/examples/flutter_gallery/test/pesto_test.dart @@ -17,7 +17,7 @@ void main() { // The bug only manifests itself when the screen's orientation is portrait const Center( child: const SizedBox( - width: 450.0, + width: 400.0, height: 800.0, child: const GalleryApp() ) @@ -26,32 +26,29 @@ void main() { await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - await tester.tap(find.text('Vignettes')); - await tester.pumpAndSettle(); - await tester.tap(find.text('Pesto')); - await tester.pumpAndSettle(); + await tester.pump(); // Launch pesto + await tester.pump(const Duration(seconds: 1)); // transition is complete await tester.tap(find.text('Pesto Bruschetta')); - await tester.pumpAndSettle(); + await tester.pump(); // Launch the recipe page + await tester.pump(const Duration(seconds: 1)); // transition is complete await tester.drag(find.text('Pesto Bruschetta'), const Offset(0.0, -300.0)); - await tester.pumpAndSettle(); + await tester.pump(); Navigator.pop(find.byType(Scaffold).evaluate().single); - await tester.pumpAndSettle(); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // transition is complete }); testWidgets('Pesto can be scrolled all the way down', (WidgetTester tester) async { await tester.pumpWidget(const GalleryApp()); await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 - await tester.pump(); // triggers a frame - - await tester.tap(find.text('Vignettes')); - await tester.pumpAndSettle(); await tester.tap(find.text('Pesto')); - await tester.pumpAndSettle(); + await tester.pump(); // Launch pesto + await tester.pump(const Duration(seconds: 1)); // transition is complete await tester.fling(find.text('Pesto Bruschetta'), const Offset(0.0, -200.0), 10000.0); await tester.pumpAndSettle(); // start and finish fling diff --git a/examples/flutter_gallery/test/simple_smoke_test.dart b/examples/flutter_gallery/test/simple_smoke_test.dart index 21baf516a0..d889b30ea6 100644 --- a/examples/flutter_gallery/test/simple_smoke_test.dart +++ b/examples/flutter_gallery/test/simple_smoke_test.dart @@ -16,29 +16,37 @@ void main() { await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - final Finder showOptionsPageButton = find.byTooltip('Show options page'); + final Finder finder = find.byWidgetPredicate((Widget widget) { + return widget is Tooltip && widget.message == 'Open navigation menu'; + }); + expect(finder, findsOneWidget); - // Show the options page - await tester.tap(showOptionsPageButton); - await tester.pumpAndSettle(); + // Open drawer + await tester.tap(finder); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation - // Switch to the dark theme: the first switch control - await tester.tap(find.byType(Switch).first); - await tester.pumpAndSettle(); + // Change theme + await tester.tap(find.text('Dark')); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation - // Close the options page - expect(showOptionsPageButton, findsOneWidget); - await tester.tap(showOptionsPageButton); - await tester.pumpAndSettle(); + // Close drawer + await tester.tap(find.byType(DrawerController)); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation - // Show the vignettes + // Open Demos await tester.tap(find.text('Vignettes')); - await tester.pumpAndSettle(); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation - // Show the Contact profile demo and scroll it upwards + // Open Flexible space toolbar await tester.tap(find.text('Contact profile')); - await tester.pumpAndSettle(); + await tester.pump(); // start animation + await tester.pump(const Duration(seconds: 1)); // end animation + // Scroll it up await tester.drag(find.text('(650) 555-1234'), const Offset(0.0, -50.0)); await tester.pump(const Duration(milliseconds: 200)); await tester.drag(find.text('(650) 555-1234'), const Offset(0.0, -50.0)); diff --git a/examples/flutter_gallery/test/smoke_test.dart b/examples/flutter_gallery/test/smoke_test.dart index 18392629e2..888a9f1143 100644 --- a/examples/flutter_gallery/test/smoke_test.dart +++ b/examples/flutter_gallery/test/smoke_test.dart @@ -2,21 +2,31 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:collection' show LinkedHashSet; import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_gallery/gallery/demos.dart'; +import 'package:flutter_gallery/gallery/item.dart' show GalleryItem, kAllGalleryItems; import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; -// This title is visible on the home and demo category pages. It's -// not visible when the demos are running. -const String kGalleryTitle = 'Flutter gallery'; +const String kCaption = 'Flutter Gallery'; -// All of the classes printed by debugDump etc, must have toString() -// values approved by verityToStringOutput(). -int toStringErrors = 0; +final List demoCategories = new LinkedHashSet.from( + kAllGalleryItems.map((GalleryItem item) => item.category) +).toList(); + +final List routeNames = + kAllGalleryItems.map((GalleryItem item) => item.routeName).toList(); + +Finder findGalleryItemByRouteName(WidgetTester tester, String routeName) { + return find.byWidgetPredicate((Widget widget) { + return widget is GalleryItem && widget.routeName == routeName; + }); +} + +int errors = 0; void reportToStringError(String name, String route, int lineNumber, List lines, String message) { // If you're on line 12, then it has index 11. @@ -26,7 +36,7 @@ void reportToStringError(String name, String route, int lineNumber, List final int firstLine = math.max(0, lineNumber - margin); final int lastLine = math.min(lines.length, lineNumber + margin); print('$name : $route : line $lineNumber of ${lines.length} : $message; nearby lines were:\n ${lines.sublist(firstLine, lastLine).join("\n ")}'); - toStringErrors += 1; + errors += 1; } void verifyToStringOutput(String name, String route, String testString) { @@ -46,16 +56,22 @@ void verifyToStringOutput(String name, String route, String testString) { } } -Future smokeDemo(WidgetTester tester, GalleryDemo demo) async { - print(demo); +// Start a gallery demo and then go back. This function assumes that the +// we're starting on the home route and that the submenu that contains +// the item for a demo that pushes route 'routeName' is already open. +Future smokeDemo(WidgetTester tester, String routeName) async { + // Ensure that we're (likely to be) on the home page + final Finder menuItem = findGalleryItemByRouteName(tester, routeName); + expect(menuItem, findsOneWidget); + // Don't use pumpUntilNoTransientCallbacks in this function, because some of // the smoketests have infinitely-running animations (e.g. the progress // indicators demo). - await tester.tap(find.text(demo.title)); + await tester.tap(menuItem); await tester.pump(); // Launch the demo. await tester.pump(const Duration(milliseconds: 400)); // Wait until the demo has opened. - expect(find.text(kGalleryTitle), findsNothing); + expect(find.text(kCaption), findsNothing); // Leave the demo on the screen briefly for manual testing. await tester.pump(const Duration(milliseconds: 400)); @@ -69,7 +85,6 @@ Future smokeDemo(WidgetTester tester, GalleryDemo demo) async { await tester.pump(const Duration(milliseconds: 400)); // Verify that the dumps are pretty. - final String routeName = demo.routeName; verifyToStringOutput('debugDumpApp', routeName, WidgetsBinding.instance.renderViewElement.toStringDeep()); verifyToStringOutput('debugDumpRenderTree', routeName, RendererBinding.instance?.renderView?.toStringDeep()); verifyToStringOutput('debugDumpLayerTree', routeName, RendererBinding.instance?.renderView?.debugLayer?.toStringDeep()); @@ -93,85 +108,74 @@ Future smokeDemo(WidgetTester tester, GalleryDemo demo) async { await tester.pump(); // Start the pop "back" operation. await tester.pump(); // Complete the willPop() Future. await tester.pump(const Duration(milliseconds: 400)); // Wait until it has finished. + + return null; } -Future smokeOptionsPage(WidgetTester tester) async { - final Finder showOptionsPageButton = find.byTooltip('Show options page'); +Future runSmokeTest(WidgetTester tester) async { + bool hasFeedback = false; + void mockOnSendFeedback() { + hasFeedback = true; + } - // Show the options page - await tester.tap(showOptionsPageButton); - await tester.pumpAndSettle(); - - // Switch to the dark theme: first switch control - await tester.tap(find.byType(Switch).first); - await tester.pumpAndSettle(); - - // Switch back to the light theme: first switch control again - await tester.tap(find.byType(Switch).first); - await tester.pumpAndSettle(); - - // Popup the text size menu: first menu button, choose 'Small' - await tester.tap(find.byIcon(Icons.arrow_drop_down).first); - await tester.pumpAndSettle(); - await tester.tap(find.text('Small')); - await tester.pumpAndSettle(); - - // Popup the text size menu: first menu button, choose 'Normal' - await tester.tap(find.byIcon(Icons.arrow_drop_down).first); - await tester.pumpAndSettle(); - await tester.tap(find.text('Normal')); - await tester.pumpAndSettle(); - - // Scroll the 'Send feedback' item into view - await tester.drag(find.text('Normal'), const Offset(0.0, -1000.0)); - await tester.pumpAndSettle(); - await tester.tap(find.text('Send feedback')); - await tester.pumpAndSettle(); - - // Close the options page - expect(showOptionsPageButton, findsOneWidget); - await tester.tap(showOptionsPageButton); - await tester.pumpAndSettle(); -} - -Future smokeGallery(WidgetTester tester) async { - bool sendFeedbackButtonPressed = false; - - await tester.pumpWidget( - new GalleryApp( - onSendFeedback: () { - sendFeedbackButtonPressed = true; // see smokeOptionsPage() - }, - ), - ); + await tester.pumpWidget(new GalleryApp(onSendFeedback: mockOnSendFeedback)); await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - expect(find.text(kGalleryTitle), findsOneWidget); + expect(find.text(kCaption), findsOneWidget); - for (GalleryDemoCategory category in kAllGalleryDemoCategories) { - await tester.tap(find.text(category.name)); - await tester.pumpAndSettle(); - for (GalleryDemo demo in kGalleryCategoryToDemos[category]) { - Scrollable.ensureVisible(tester.element(find.text(demo.title)), alignment: 0.5); - await smokeDemo(tester, demo); - tester.binding.debugAssertNoTransientCallbacks('A transient callback was still active after running $demo'); - } - await tester.pageBack(); + for (String routeName in routeNames) { + final Finder finder = findGalleryItemByRouteName(tester, routeName); + Scrollable.ensureVisible(tester.element(finder), alignment: 0.5); await tester.pumpAndSettle(); + await smokeDemo(tester, routeName); + tester.binding.debugAssertNoTransientCallbacks('A transient callback was still active after leaving route $routeName'); } - expect(toStringErrors, 0); + expect(errors, 0); - await smokeOptionsPage(tester); - expect(sendFeedbackButtonPressed, true); + final Finder navigationMenuButton = find.byTooltip('Open navigation menu'); + expect(navigationMenuButton, findsOneWidget); + await tester.tap(navigationMenuButton); + await tester.pump(); // Start opening drawer. + await tester.pump(const Duration(seconds: 1)); // Wait until it's really opened. + + // Switch theme. + await tester.tap(find.text('Dark')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + + // Switch theme. + await tester.tap(find.text('Light')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + + // Switch font scale. + await tester.tap(find.text('Small')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + // Switch font scale back to default. + await tester.tap(find.text('System Default')); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + + // Scroll the 'Send feedback' item into view. + await tester.drag(find.text('Small'), const Offset(0.0, -1000.0)); + await tester.pump(); + await tester.pump(const Duration(seconds: 1)); // Wait until it's changed. + + // Send feedback. + expect(hasFeedback, false); + await tester.tap(find.text('Send feedback')); + await tester.pump(); + expect(hasFeedback, true); } void main() { - testWidgets('Flutter Gallery app smoke test', smokeGallery); + testWidgets('Flutter Gallery app smoke test', runSmokeTest); testWidgets('Flutter Gallery app smoke test with semantics', (WidgetTester tester) async { RendererBinding.instance.setSemanticsEnabled(true); - await smokeGallery(tester); + await runSmokeTest(tester); RendererBinding.instance.setSemanticsEnabled(false); }); } diff --git a/examples/flutter_gallery/test/update_test.dart b/examples/flutter_gallery/test/update_test.dart index f757a97001..9d3b1263c1 100644 --- a/examples/flutter_gallery/test/update_test.dart +++ b/examples/flutter_gallery/test/update_test.dart @@ -3,7 +3,7 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; +import 'package:flutter_gallery/gallery/app.dart'; Future mockUpdateUrlFetcher() { // A real implementation would connect to the network to retrieve this value @@ -26,8 +26,8 @@ void main() { await tester.tap(find.text('NO THANKS')); await tester.pump(); - await tester.tap(find.text('Vignettes')); - await tester.pump(); // Launch + await tester.tap(find.text('Shrine')); + await tester.pump(); // Launch shrine await tester.pump(const Duration(seconds: 1)); // transition is complete final Finder backButton = find.byTooltip('Back'); diff --git a/examples/flutter_gallery/test_driver/memory_nav_test.dart b/examples/flutter_gallery/test_driver/memory_nav_test.dart index 8771a2fc36..29390de943 100644 --- a/examples/flutter_gallery/test_driver/memory_nav_test.dart +++ b/examples/flutter_gallery/test_driver/memory_nav_test.dart @@ -14,17 +14,14 @@ void main() { }); test('navigation', () async { - await driver.tap(find.text('Material')); - - final SerializableFinder demoList = find.byValueKey('GalleryDemoList'); - final SerializableFinder demoItem = find.text('Text fields'); - await driver.scrollUntilVisible(demoList, demoItem, + final SerializableFinder menuItem = find.text('Text fields'); + await driver.scrollUntilVisible(find.byType('CustomScrollView'), menuItem, dyScroll: -300.0, alignment: 0.5, timeout: const Duration(minutes: 1), ); for (int i = 0; i < 15; i++) { - await driver.tap(demoItem); + await driver.tap(menuItem); await driver.tap(find.byTooltip('Back')); } }); diff --git a/examples/flutter_gallery/test_driver/scroll_perf_test.dart b/examples/flutter_gallery/test_driver/scroll_perf_test.dart index 8ed957a6ff..48368fb368 100644 --- a/examples/flutter_gallery/test_driver/scroll_perf_test.dart +++ b/examples/flutter_gallery/test_driver/scroll_perf_test.dart @@ -22,21 +22,24 @@ void main() { test('measure', () async { final Timeline timeline = await driver.traceAction(() async { - await driver.tap(find.text('Material')); + final SerializableFinder home = find.byValueKey('Gallery List'); + expect(home, isNotNull); - final SerializableFinder demoList = find.byValueKey('GalleryDemoList'); + await driver.tap(find.text('Vignettes')); + await driver.tap(find.text('Components')); + await driver.tap(find.text('Style')); // TODO(eseidel): These are very artificial scrolls, we should use better // https://github.com/flutter/flutter/issues/3316 // Scroll down for (int i = 0; i < 5; i++) { - await driver.scroll(demoList, 0.0, -300.0, const Duration(milliseconds: 300)); + await driver.scroll(home, 0.0, -300.0, const Duration(milliseconds: 300)); await new Future.delayed(const Duration(milliseconds: 500)); } // Scroll up for (int i = 0; i < 5; i++) { - await driver.scroll(demoList, 0.0, 300.0, const Duration(milliseconds: 300)); + await driver.scroll(home, 0.0, 300.0, const Duration(milliseconds: 300)); await new Future.delayed(const Duration(milliseconds: 500)); } }); diff --git a/examples/flutter_gallery/test_driver/transitions_perf.dart b/examples/flutter_gallery/test_driver/transitions_perf.dart index ea21b2db6c..dcb401c0e9 100644 --- a/examples/flutter_gallery/test_driver/transitions_perf.dart +++ b/examples/flutter_gallery/test_driver/transitions_perf.dart @@ -6,13 +6,13 @@ import 'dart:async'; import 'dart:convert' show JsonEncoder; import 'package:flutter_driver/driver_extension.dart'; -import 'package:flutter_gallery/gallery/demos.dart'; +import 'package:flutter_gallery/gallery/item.dart'; import 'package:flutter_gallery/main.dart' as app; Future _handleMessages(String message) async { assert(message == 'demoNames'); return const JsonEncoder.withIndent(' ').convert( - kAllGalleryDemos.map((GalleryDemo demo) => '${demo.title}@${demo.category.name}').toList(), + kAllGalleryItems.map((GalleryItem item) => item.title).toList(), ); } diff --git a/examples/flutter_gallery/test_driver/transitions_perf_test.dart b/examples/flutter_gallery/test_driver/transitions_perf_test.dart index 876cb921d5..1128934746 100644 --- a/examples/flutter_gallery/test_driver/transitions_perf_test.dart +++ b/examples/flutter_gallery/test_driver/transitions_perf_test.dart @@ -45,7 +45,8 @@ const List kUnsynchronizedDemos = const [ 'Video', ]; -// All of the gallery demos, identified as "title@category". +// All of the gallery demo titles in the order they appear on the +// gallery home page. // // These names are reported by the test app, see _handleMessages() // in transitions_perf.dart. @@ -120,26 +121,20 @@ Future saveDurationsHistogram(List> events, String ou /// Scrolls each demo menu item into view, launches it, then returns to the /// home screen twice. Future runDemos(List demos, FlutterDriver driver) async { - final SerializableFinder demoList = find.byValueKey('GalleryDemoList'); - String currentDemoCategory; - for (String demo in demos) { - final String demoAtCategory = _allDemos.firstWhere((String s) => s.startsWith(demo)); - final String demoCategory = demoAtCategory.substring(demoAtCategory.indexOf('@') + 1); - - if (currentDemoCategory == null) { - await driver.tap(find.text(demoCategory)); - } else if (currentDemoCategory != demoCategory) { - await driver.tap(find.byTooltip('Back')); - await driver.tap(find.text(demoCategory)); - } - currentDemoCategory = demoCategory; - - final SerializableFinder demoItem = find.text(demo); - await driver.scrollUntilVisible(demoList, demoItem, dyScroll: -48.0, alignment: 0.5); + print('Testing "$demo" demo'); + final SerializableFinder menuItem = find.text(demo); + await driver.scrollUntilVisible(find.byType('CustomScrollView'), menuItem, + dyScroll: -48.0, + alignment: 0.5, + ); for (int i = 0; i < 2; i += 1) { - await driver.tap(demoItem); // Launch the demo + await driver.tap(menuItem); // Launch the demo + + // This demo's back button isn't initially visible. + if (demo == 'Backdrop') + await driver.tap(find.byTooltip('Tap to dismiss')); if (kUnsynchronizedDemos.contains(demo)) { await driver.runUnsynchronized>(() async { @@ -149,12 +144,8 @@ Future runDemos(List demos, FlutterDriver driver) async { await driver.tap(find.byTooltip('Back')); } } - print('Success'); } - - // Return to the home screen - await driver.tap(find.byTooltip('Back')); } void main([List args = const []]) { @@ -180,7 +171,6 @@ void main([List args = const []]) { }); test('all demos', () async { - // Collect timeline data for just a limited set of demos to avoid OOMs. final Timeline timeline = await driver.traceAction( () async { @@ -200,9 +190,14 @@ void main([List args = const []]) { final String histogramPath = path.join(testOutputsDirectory, 'transition_durations.timeline.json'); await saveDurationsHistogram(timeline.json['traceEvents'], histogramPath); + // Scroll back to the top + await driver.scrollUntilVisible(find.byType('CustomScrollView'), find.text(_allDemos[0]), + dyScroll: 200.0, + alignment: 0.0 + ); + // Execute the remaining tests. - final List allDemoNames = _allDemos.map((String s) => s.substring(0, s.indexOf('@'))); - final Set unprofiledDemos = new Set.from(allDemoNames)..removeAll(kProfiledDemos); + final Set unprofiledDemos = new Set.from(_allDemos)..removeAll(kProfiledDemos); await runDemos(unprofiledDemos.toList(), driver); }, timeout: const Timeout(const Duration(minutes: 5)));