From bf3bd7667f07709d0b817ebfcb6972782cfef637 Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Fri, 27 Apr 2018 08:11:20 -0700 Subject: [PATCH] New Gallery UI reprise (#17031) --- dev/benchmarks/complex_layout/pubspec.yaml | 2 +- .../main/res/mipmap-hdpi/ic_background.png | Bin 0 -> 18209 bytes .../main/res/mipmap-hdpi/ic_foreground.png | Bin 0 -> 3581 bytes .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 3951 bytes .../main/res/mipmap-xhdpi/ic_background.png | Bin 0 -> 31807 bytes .../main/res/mipmap-xhdpi/ic_foreground.png | Bin 0 -> 5455 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 5326 bytes .../main/res/mipmap-xxhdpi/ic_background.png | Bin 0 -> 72301 bytes .../main/res/mipmap-xxhdpi/ic_foreground.png | Bin 0 -> 10303 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 9650 bytes .../main/res/mipmap-xxxhdpi/ic_background.png | Bin 0 -> 125855 bytes .../main/res/mipmap-xxxhdpi/ic_foreground.png | Bin 0 -> 16499 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 13901 bytes .../flutter_gallery/lib/gallery/about.dart | 83 ++ examples/flutter_gallery/lib/gallery/app.dart | 210 +++-- .../flutter_gallery/lib/gallery/backdrop.dart | 330 ++++++++ .../lib/gallery/{item.dart => demos.dart} | 745 ++++++++++-------- .../flutter_gallery/lib/gallery/drawer.dart | 349 -------- .../flutter_gallery/lib/gallery/home.dart | 434 ++++++---- .../flutter_gallery/lib/gallery/icons.dart | 50 ++ .../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/{updates.dart => updater.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 | 54 +- 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 +- .../lib/src/services/asset_bundle.dart | 4 +- 38 files changed, 2094 insertions(+), 1253 deletions(-) create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png create mode 100644 examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png create mode 100644 examples/flutter_gallery/lib/gallery/about.dart create mode 100644 examples/flutter_gallery/lib/gallery/backdrop.dart rename examples/flutter_gallery/lib/gallery/{item.dart => demos.dart} (60%) delete mode 100644 examples/flutter_gallery/lib/gallery/drawer.dart create mode 100644 examples/flutter_gallery/lib/gallery/icons.dart create mode 100644 examples/flutter_gallery/lib/gallery/options.dart create mode 100644 examples/flutter_gallery/lib/gallery/scales.dart delete mode 100644 examples/flutter_gallery/lib/gallery/theme.dart create mode 100644 examples/flutter_gallery/lib/gallery/themes.dart rename examples/flutter_gallery/lib/gallery/{updates.dart => updater.dart} (100%) diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 64ae2fa498..20d15ea655 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: d318485f208376e06d7e330d9f191141d14722b8 + ref: 43590e625ab1b07f6a5809287ce16f7e61d9e165 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 new file mode 100644 index 0000000000000000000000000000000000000000..c5ccd079effcd01312ff8b6457b9ef0a6ca32e36 GIT binary patch literal 18209 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 literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..e3c6fb0d528ddd064955540cade0ea926596fff1 GIT binary patch literal 3581 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 literal 0 HcmV?d00001 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 db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..b8f67f1933dbb23636f092d10e5e1fe1abbb437b 100644 GIT binary patch literal 3951 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 I&MBb@08+NrJpcdz 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 new file mode 100644 index 0000000000000000000000000000000000000000..d05e1b6799b0816fdbc07b61629bea3835845e12 GIT binary patch literal 31807 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%0Dw5I)h(Vb(2_pM)Ylm)5`mW+ZJakEc-40Ft~rt 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 V@W{AGgKh+8@O1TaS?83{1ONrGM56!z literal 0 HcmV?d00001 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..052b9828671e09a4e92cff22b0b09a4abad90dc0 GIT binary patch literal 5455 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 RXJBAp@O1TaS?83{1ORZ)Hc9{h literal 0 HcmV?d00001 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 09d4391482be68e9e4a07fab769b5de337d16eb1..6b18864675003c35952d48d544c12a9c77e10c7d 100644 GIT binary patch literal 5326 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&AkyLK z;uuoF_%@ciB;=^%zTKW4PEHE>_gHikG@O<$mD5nL^9%I8x@v0kmw>5R2a{L3URfox zu}VkGf9tK}tzAJbjvpCy*+ZU41~|AdReVYhr8z6suV24v<;t7kv9Yloe{xe(Q}6f4+t>Y_9$y#Pze>c-htq}a zY@tiH&w-0OtB?1|9u5i)c3-+=36I+y@yeCFyiMU1Z+6B!6IiXKt-XDoMPZU}Xz0~L z-1>VAHcwQSk>ka>wb9%EX=rO_C(Sm?byHJOd9p?1LqbJ>!q%-@j|!Z4 zFjt>t#s#vSa@9?QAQ*ytvq(nwEBt@&8<5X0C_HjGtXUK0Mr>erC4$`48g|34_(eOcL1VE3&fE_GX$EP1kXUF>c@=h>zA z%9NkYVo})rBm8#a?RUAixAnfbv-5Lz#KD*qV#lg}U0E4?``i2b_3vH9W48$HIn|PD zefvx0M1|{DRt8T_yp;d_)z$2eH`(kM8PC@q{C)iB(WCiAIw!h1Hr=|bal5$o>(y}P zgMVVyWK|Uyq+2I$y4S1vDI;cfP3y)RR^~S}8MZyu)6w};J6$h!o{QDf9QL@U@~0m^ zo^yOb#D9l^uXLJ4Fa-)Zf3T>XXez!=I*%r|lt;OKCO>=(Dr;}W7ZvL6WGmn4Dym@uD$M#G~ zK3);6(lTw%n?pjniC0&Jp5EAN@S}zyPF{K4qR;KT(q*FCg0lj}rde}^GuY_Moj${V zYioA-y^MW&407_eRV9wUzrD?O{AA*^xmBQ#p`uS(_}%J@-+oSw=$>LNqhKfgAQ8{WFnWbCeJIBKC>9*T> z(M@yD#AHt_c4zs2|3ZyyN|8ckQ$v-0d*vkmv-KC$&Q72B*v@(NoH=tIK7IN$zvkmn z@i|kRl^$wFq+aW`uK4gEW=(TGSD0ncQ>!0LJ8sRNwVbP=G-4WOd2-YF&>9ww>(1{> zUR}x5nZ@_gNjF9O%h&7i@iXVnt*vFL;9Ke0WWQSQY&tVb_yP03Hheba%I8hwGe6uE zHrSQ<_*n1s`7gJ=4ABrfV8v;$*7xMelYuvbp0!v@KREr&rd=h$dzMesrz^};QXM|4 zAAbA9#pCnI_6r{$AK(5c>1~h<`(8Vaqf9$qRq8}N2>u-Up;Nngon_iS@shh=1!{K5 zsvlS`@FC!!t9ALiKf;q7Kk|khEWI9EzBH+~nqRtX){37c)~lXz^KZKLIVmsg@>3JG zx^2v}^!FGZ^IcKhDLZM`x)oPv>A9TU(bUwGSy@@hA91eefkVwc2Hn_I4bhh@F0d-h zdT;XMkoLA`%fG(7{M=B6{gUG5s9>=JvFBXQyx2dDZEn|Wrg(?xGi*Aqd7s&n(d;i* zu-BwdLh0rTQ4>{$?{{_<%O8r>b-(_{>IX{{6Z_GLD;^m8tE-1uSIuwii{6@b_2Js> z_hz+hax2VR)9|?G_@r0Y9C+Qe`X8MB*7U{E&84>F!OD-Tu6>q?eCu-hEysPK$B%MM zF3o97kqAmT*2~54`|k9ud3SehUs}e(pOUXWVRJ}h_~nZc&&|b|?2>jCJUrxRp`XII zAxTE9|Kr)WI(L3GUi*1Tj8Xi;Rlygx^0 zm8%kzS!liM+3EwE^S?%vTQk*7JM4Wn!0_aW6F($hJ<2*VpNaE8>+Trk4;B?i)Z=Fs zxE?P3_N6BFb)@~ZgX;YUHXZ)-^mMzT*wHs_PiPgjM{Sah0`rS4iJo1G%dI&tA>72Q0K zV_F8gpPiX$%wjHn%cE`X#s+=I^~W5Q2nYKQxd-nQ9dP1Uu>5XwuzJkiT+!qv z|4ApqV)N#`eNY^enVD(tka94_Rza+=LdTkaW3J2D=ii(Z=Ih^j-#t-5SnET|lNg5i zj}O>Reb=F*tr*I%M!5ZLd!Nq@$162|%@#GB{pR|+)==ozlInF0=Ra0$+-k$IusYcM z{=w9z(3jZLRoq6NYs6Nem{8nh|RpYm_-d0;r+*flb%<61wtL?4G`E#dm znW-l-hU9TM+}JpanY%z(QS(k6YfYi9%pR_Z4F|vZ@=aKnonm(H8t<~7T0br=JEHd9 z#(`Z+ep-k{E-Li-(u`E6X-+43O!d~6N3yM*=gtr!;L~$qwpN2o zgZ<9r%Xa@SGt4?)w!0l++m&;T%-maBww$zKi(*V(n9;4^qMKdVQFxX zgkMeWuKfaE%2-rRo@e^O&vyBb(e#B)`p=ER7{wl3En23z;MHwxGp zTJ~3$VSe?;$&+q*Xk>Cdbc<+Os{XBqN493y-1er1{Zk&uZ+z9Yx9L;c9O@wYxF4xeLZxZN$LYnhM@LsN0CGNnVc_znzncc zH0_+5d4E^$f05lile{we%RLt}oiVF?s#Ce?m8J5h8y9LMjqT)01u{3iRt{Ys5zsGw z{@YKlT#p$}C$@Z%ob*iikH6u=PiLeQycMr>3+y=?_?vSZ*NzQm_GJ97dFYy?zfGo< zUm%oWO?dzJx!+E3mL0u*QD~2o!S$aXe)|4QYT6$X`?le(RE)l8wQl2q;LonVuL>5X z@N9hWx%AJ6x{v=SJP%d&U#Zt%wdeJgSo@28$y|v!VS6nfnz8;f?s~R4ex@-;)!J~5 z<%TR-JEU6NpBeL>XiO0KHsMDlY!T2L7!`(+zD>B zT2~H)Z2M&{cyo@!gUipke=OV0*xr*}5dFJA^pr@l+UJd2b`zPG&F<8l^kmkXSxdMY zBz4yOeYgAlk4UlO9eM4u{5M>6*sh%7x5LIQVV9JX#y76Un-}*S5|x|X_3`8KUXAC{ z#$C65y;MJ_i596DiuYUUL1JoO5PW_FIVE?fY;>V#YJ& zPt~cNrxpw8Htk+$dAv_Hx;s3#=;|SlCG+nHr?1hmy==s&CRi~^TE^(4Lz-&*oI0Ur zTfRkKlRV!mm#}2H$|AQng45=^{#eDZf4SrT^K0eii@wn7c>F}CcGZRr1)7gKE>Dpw zJ$Avz-+b5ag{lGt!5SU44;EW}=BWF+Y3Z?JZ`phA@7r|DqHIoa^qY(8Vs}q#&}Q<_ z>D<^~!nmPf>MHwRFBX5V*{U?BVvf^^4@|xLPAG1@+cVQ4U}u`uP1X|<*B|551ijg4H3`O*%pe|T-N82jbT&e6%o-q%SPzvGC1ez)&^Rt)!3V6=U9!L165NV zY>qp4kn8a|iA^kfw)|DR@yKk;eU=`Z$@#~$3Uz8qnDon+lpXn$Ia7G@##0AEA`W#a zXZ5Mi<=|cyx#fn2_R&k~eZO7i1-R!KMt@!}cWLp4s%`n%d+Zc4gG4Y|{e+Lh|nXJO5|JInM0s>*hN19Nc%Gbw*F$ExC>v=c`$BKg`M! zulZXhxlO~s*UG!UT33DCcKF5J ziPH?Oe6(bof6Bhee^+d4_pQGP%xcm$r-CttYj^*WKxKv-o)FKRe6(xh+Zz^WHRh%F3E%g-qv@wfgd~(=Ygc zo}}CBBP_|jjI9oa0Rn&C|NNY3-*@$5S8G9+#@aPzVU8TvT>?0y&2lR0@9ZedZ`x_Z zqGzxBx=tqgMUPeFCSCR`6?YDr-g>xb&1dubHOAulQZWfDA3iuJtz9O0{$F|bQuikP zJa?`T#UFX8P9}5KRF`=er}@gHEm?kRcX`YD)VGKH7xf&BJ<9x`nQ6k+{tZvX+mje= zPRj77ePgQ$uRlIDJg!oATAfJO<1dHz_$X^Co{QMM`pA{qsf?FHCMrG%{(aQBez$!7JfqZ8K_!ao z+E;tbm2GAAHxdz7QSa2w>h960S@coR=T!0%1F4VOn2#6uFYpx4-lQ5P&~g0R%ad;H zWp{pY&EMctFC6z!a?63&--}untaGo*?qi6U?)2bqQyIt2AB9`?Kd|Odo@kfP`8$=H zoma|)m7!pB?=Ah`e;v2ZUtsFa5HvrpTkA4ke{_2O%}r0=+g5#%ICSW9?}qd9?Gp|( z{C@bKwdP$}+mkAm)z8+w)C?^<@HCXwN>A3V<_B}dl+<36ihV~|{wtC%1mz|E3$ zN#{dnXt8d?^9dDlatwy`%T#2iP3Y`huKu8JUE;%?ekInAGB)z=iWMNe*X{KE$c3Y2klFL9t!qm zJy4bsXVAJK;b4>Pjh-lW;kWX=x;c_F<{GZc;eNOK{XToUuUCRsU(k!?n?7sRGvVe9 z8h0!m-uJvMXxElp$m=9!7dG9n{@)+Z0^j`yL|4c*xotitWPa`1+Gz9tZPIx^r0X=B z4-{{Dde2V%&W5{u=e|yyd!R#g!bYna`=2It6Dn=D>6sl;{d(m68IA8dYW^P2VXFRl zd*R3ad$r&1e*WO0cyRgYg$zt~aYFAL-fUucIsa{8(sQoP>s(vd+Cu(#y+AN z6|wfr#|^!2yw^IKtYUn;NAmFTq8)R6deax2Ubz4H(()U6?9Zc4@p;x*gj1*RV0ht;@;1TD9fYk$SRpU<~14BREk z$z<2RbFyUNgNyB+ew+?(`)j*gI}COlK6N0OZO;PX`38xHTH>b16nVDSr1<%~X^wgl##FWay zlc_cg3=H1_d_r6q7#Kp1{?Od^jnSilF?_b>wr?Rve}o+U!5BU}6>y4N#$)H8ZEGkUc!`m{6pbTImMF#2{f`gJk-_b~?aGX_m$ z44TXsJQ-wJ$W+GA>5O4B7{g{VhRtFOpT!tHo5?tW$tsn}K99+{jLE&4*|V;m*{hM+ zyGbmgUp#w?MA1CSise$Z>!cbtOE+(mZrvf>woA6_fabPuF8e|LDBQ4i0RsbrSV@py zFoS@Cfq{WRKte)6LBss{^UuErf!!>rf(#6d{+=$5AsP4H-n{O2*g>H6p@YW4?^#v( zj6O+CkC!G3Wj**C&vx2n+Vy+&ohjLDoEFckzShrrtt+zO{;qv9{fn4iEbh1ag-rav z|I7LClV6s6_iZYZ9B#I;M&xl4;4H2Ri}h2H$;D!9%fd~=dW$* zugQ6E`?E0fZKp%Sj~>(ban1J4pYksb1dBk${xlomw jC<})`ozHbP0l+XkKc-=2^ diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png new file mode 100644 index 0000000000000000000000000000000000000000..455f042a62e4d22f95b28738d5f3af16c792884a GIT binary patch literal 72301 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≰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

H6(|(*NE$@SOLF{JR6? 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 literal 0 HcmV?d00001 diff --git a/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..fcdb89bade57d1eed52315cb52d3b3fb6ab90029 100644 GIT binary patch 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 new file mode 100644 index 0000000000000000000000000000000000000000..3fd2f4fa22a42aaca5012374ccb871ee1fa349fe GIT binary patch literal 125855 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 JtaD0e0s!y77uNs) literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..c5df8264954b2db800da9ef0a5ebe02973e48a3b GIT binary patch literal 16499 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 literal 1443 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFy0FA32|j$U7=vLLgJC#>aTJ4T9D`W`gLwjjbtZ#N4x^eAqnb0LmM5cOIHO54qe%>- zNi3sjJfm3xqeU{KMGB*38lzP@qg4i@bta=t7NczrqirsuT`r?t9;018qkTT3eF39G z5u;-~4uK+6lW`UY0|SF-NswPKgMfko7&thbzyBTz-gcI+Wnf^o^K@|x zskrs_3VX0{ph#Pyi^G})N%|2R%{L?-ZV(U%Y+lqcfu(WAio}U)uIrV(+3WUaecD+A zmQ6SJem|Gdo_Kp z-*x@+`J3Y19B#kQTkx(t_`-K<>p6dn#rh_GuokuWC9d+nXX1zFdIcZVw{qEhc&=6O z^|eUFqwV?=KCBk6c(Pr4!l%_@70=G=P581}wBp75D22D-njfy%?{qk*AOB#Z{bq-g z`q2+|)-Q6ns2@Io{eMN{rubzF`u|EA+wSjG@UL6#aQc1N1oQe;4(H#;OmN?SS>~@F ztIeOC+&g|0i+=ccTfE@YZP5>((!~ot`|Cb zb^PFdrt-VXypJEaJ95?T2$v)Ws{O#V4Ednvz`|Pb} zf4VOe!@bWom-}e`tT2YtP3!%mny=z+}-K6mV2ZEt5Icwo(g z%Zr!wX>UAuh9QhqUj7<;)5IBxDQpH>KRz6|eoM6P*rQ_`EdPlXYgN?$U-3W2|NYf9 z3~H?J-^u1!lq%j3KgpL6_~F~TxcJXA&m~w0?N0Rh)m167XXobE9?sqiHmlnth&$|i z@b&H6->;epMCgPeb()B(Tr|RH~O+1PwlVxdT!ROU2OGQ3PvhLeQAwP zO|AMWqpQ}lM;-?Ix_3Z(ZoZK*%HiZ|EUDeVf^rGH<21r@EM zSf|zZ`p5aNP1ut4@|gFs0GYW>Kcl68^QPJ_Y[ + 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 d3af4df0c0..962ab047ce 100644 --- a/examples/flutter_gallery/lib/gallery/app.dart +++ b/examples/flutter_gallery/lib/gallery/app.dart @@ -8,53 +8,79 @@ 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 'item.dart'; -import 'theme.dart'; -import 'updates.dart'; +import 'options.dart'; +import 'scales.dart'; +import 'themes.dart'; +import 'updater.dart'; class GalleryApp extends StatefulWidget { const GalleryApp({ + Key key, this.updateUrlFetcher, this.enablePerformanceOverlay: true, - this.checkerboardRasterCacheImages: true, - this.checkerboardOffscreenLayers: true, + this.enableRasterCacheImagesCheckerboard: true, + this.enableOffscreenLayersCheckerboard: true, this.onSendFeedback, - Key key} - ) : super(key: key); + }) : super(key: key); final UpdateUrlFetcher updateUrlFetcher; - final bool enablePerformanceOverlay; - - final bool checkerboardRasterCacheImages; - - final bool checkerboardOffscreenLayers; - + final bool enableRasterCacheImagesCheckerboard; + final bool enableOffscreenLayersCheckerboard; final VoidCallback onSendFeedback; @override - GalleryAppState createState() => new GalleryAppState(); + _GalleryAppState createState() => new _GalleryAppState(); } -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; - +class _GalleryAppState extends State { + GalleryOptions _options; 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 @@ -64,80 +90,50 @@ class GalleryAppState extends State { super.dispose(); } - Widget _applyScaleFactor(Widget child) { + 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) { return new Builder( - builder: (BuildContext context) => new MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: _textScaleFactor, - ), - child: child, - ), + builder: (BuildContext context) { + return new MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaleFactor: _options.textScaleFactor.scale, + ), + child: child, + ); + }, ); } @override Widget build(BuildContext context) { Widget home = new GalleryHome( - 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, + optionsPage: new GalleryOptionsPage( + options: _options, + onOptionsChanged: _handleOptionsChanged, + onSendFeedback: widget.onSendFeedback ?? () { + launch('https://github.com/flutter/flutter/issues/new'); + }, + ), ); if (widget.updateUrlFetcher != null) { @@ -147,31 +143,21 @@ 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, - theme: _galleryTheme.theme.copyWith(platform: _platform ?? defaultTargetPlatform), - showPerformanceOverlay: _showPerformanceOverlay, - checkerboardRasterCacheImages: _checkerboardRasterCacheImages, - checkerboardOffscreenLayers: _checkerboardOffscreenLayers, - routes: _kRoutes, - home: home, + showPerformanceOverlay: _options.showPerformanceOverlay, + checkerboardOffscreenLayers: _options.showOffscreenLayersCheckerboard, + checkerboardRasterCacheImages: _options.showRasterCacheImagesCheckerboard, + routes: _buildRoutes(), builder: (BuildContext context, Widget child) { return new Directionality( - textDirection: _overrideDirection, - child: _applyScaleFactor(child), + textDirection: _options.textDirection, + child: _applyTextScaleFactor(child), ); }, + home: home, ); } } diff --git a/examples/flutter_gallery/lib/gallery/backdrop.dart b/examples/flutter_gallery/lib/gallery/backdrop.dart new file mode 100644 index 0000000000..8de2d9b1cd --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/backdrop.dart @@ -0,0 +1,330 @@ +// 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/item.dart b/examples/flutter_gallery/lib/gallery/demos.dart similarity index 60% rename from examples/flutter_gallery/lib/gallery/item.dart rename to examples/flutter_gallery/lib/gallery/demos.dart index ada4c4c767..c6a14e18e1 100644 --- a/examples/flutter_gallery/lib/gallery/item.dart +++ b/examples/flutter_gallery/lib/gallery/demos.dart @@ -1,19 +1,66 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. +// 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:developer'; - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../demo/all.dart'; +import 'icons.dart'; -typedef Widget GalleryDemoBuilder(); +class GalleryDemoCategory { + const GalleryDemoCategory._({ this.name, this.icon }); + @required final String name; + @required final IconData icon; -class GalleryItem extends StatelessWidget { - const GalleryItem({ + @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({ @required this.title, + @required this.icon, this.subtitle, @required this.category, @required this.routeName, @@ -24,363 +71,400 @@ class GalleryItem extends StatelessWidget { assert(buildRoute != null); final String title; + final IconData icon; final String subtitle; - final String category; + final GalleryDemoCategory category; final String routeName; final WidgetBuilder buildRoute; @override - 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); - } - } - ); + String toString() { + return '$runtimeType($title $routeName)'; } } -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 = [ +List _buildGalleryDemos() { + final List galleryDemos = [ // Demos - new GalleryItem( + new GalleryDemo( title: 'Shrine', subtitle: 'Basic shopping app', - category: 'Vignettes', + icon: GalleryIcons.shrine, + category: _kDemos, routeName: ShrineDemo.routeName, buildRoute: (BuildContext context) => new ShrineDemo(), ), - new GalleryItem( + new GalleryDemo( title: 'Contact profile', subtitle: 'Address book entry with a flexible appbar', - category: 'Vignettes', + icon: GalleryIcons.account_box, + category: _kDemos, routeName: ContactsDemo.routeName, buildRoute: (BuildContext context) => new ContactsDemo(), ), - new GalleryItem( + new GalleryDemo( title: 'Animation', subtitle: 'Section organizer', - category: 'Vignettes', + icon: GalleryIcons.animation, + category: _kDemos, routeName: AnimationDemo.routeName, buildRoute: (BuildContext context) => const AnimationDemo(), ), - new GalleryItem( - title: 'Video', - subtitle: 'Video playback', - 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( + + // Style + new GalleryDemo( title: 'Colors', subtitle: 'All of the predefined colors', - category: 'Style', + icon: GalleryIcons.colors, + category: _kStyle, routeName: ColorsDemo.routeName, buildRoute: (BuildContext context) => new ColorsDemo(), ), - new GalleryItem( + new GalleryDemo( title: 'Typography', subtitle: 'All of the predefined text styles', - category: 'Style', + 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( + title: 'Video', + subtitle: 'Video playback', + icon: GalleryIcons.drive_video, + category: _kMedia, + routeName: VideoDemo.routeName, + buildRoute: (BuildContext context) => const VideoDemo(), + ), ]; // Keep Pesto around for its regression test value. It is not included // in (release builds) the performance tests. assert(() { - galleryItems.insert(0, - new GalleryItem( + galleryDemos.insert(0, + new GalleryDemo( title: 'Pesto', subtitle: 'Simple recipe browser', - category: 'Vignettes', + icon: Icons.adjust, + category: _kDemos, routeName: PestoDemo.routeName, buildRoute: (BuildContext context) => const PestoDemo(), ), @@ -388,7 +472,18 @@ List _buildGalleryItems() { return true; }()); - return galleryItems; + return galleryDemos; } -final List kAllGalleryItems = _buildGalleryItems(); +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(); + }, + ); diff --git a/examples/flutter_gallery/lib/gallery/drawer.dart b/examples/flutter_gallery/lib/gallery/drawer.dart deleted file mode 100644 index 4dfe73269f..0000000000 --- a/examples/flutter_gallery/lib/gallery/drawer.dart +++ /dev/null @@ -1,349 +0,0 @@ -// 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 754ebdbbab..b81d8bf708 100644 --- a/examples/flutter_gallery/lib/gallery/home.dart +++ b/examples/flutter_gallery/lib/gallery/home.dart @@ -1,126 +1,286 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. +// 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 'dart:developer'; +import 'dart:math' as math; + import 'package:flutter/material.dart'; -import 'drawer.dart'; -import 'item.dart'; -import 'theme.dart'; +import 'backdrop.dart'; +import 'demos.dart'; -const double _kFlexibleSpaceMaxHeight = 256.0; const String _kGalleryAssetsPackage = 'flutter_gallery_assets'; +const Color _kFlutterBlue = const Color(0xFF003D75); +const double _kDemoItemHeight = 64.0; -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; -} - -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) -]; - -class _AppBarBackground extends StatelessWidget { - const _AppBarBackground({ Key key, this.animation }) : super(key: key); - - final Animation animation; +class _FlutterLogo extends StatelessWidget { + const _FlutterLogo({ Key key }) : super(key: key); @override Widget build(BuildContext context) { - 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() - ); - } + 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 _CategoryItem extends StatelessWidget { + const _CategoryItem({ + Key key, + this.category, + this.onTap, + }) : super (key: key); + + final GalleryDemoCategory category; + final VoidCallback onTap; + + @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(), + ), + ), + ), + ), + ), ); } } 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; - final GalleryTheme galleryTheme; - final ValueChanged onThemeChanged; + const GalleryHome({ + Key key, + this.optionsPage, + }) : super(key: key); - 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; + final Widget optionsPage; @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 @@ -139,75 +299,27 @@ class GalleryHomeState extends State with SingleTickerProviderState 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, - 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), - ), + 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, ), - 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 new file mode 100644 index 0000000000..7ec4cb2770 --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/icons.dart @@ -0,0 +1,50 @@ +// 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/options.dart b/examples/flutter_gallery/lib/gallery/options.dart new file mode 100644 index 0000000000..f3fbe02a46 --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/options.dart @@ -0,0 +1,466 @@ +// 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 new file mode 100644 index 0000000000..bd5c474036 --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/scales.dart @@ -0,0 +1,37 @@ +// 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 deleted file mode 100644 index f84b52bdf2..0000000000 --- a/examples/flutter_gallery/lib/gallery/theme.dart +++ /dev/null @@ -1,62 +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.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 new file mode 100644 index 0000000000..18d545c4ed --- /dev/null +++ b/examples/flutter_gallery/lib/gallery/themes.dart @@ -0,0 +1,65 @@ +// 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/updates.dart b/examples/flutter_gallery/lib/gallery/updater.dart similarity index 100% rename from examples/flutter_gallery/lib/gallery/updates.dart rename to examples/flutter_gallery/lib/gallery/updater.dart diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index 877d08aaee..f7bca7446c 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: d318485f208376e06d7e330d9f191141d14722b8 + ref: 43590e625ab1b07f6a5809287ce16f7e61d9e165 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,6 +79,11 @@ 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 @@ -166,5 +171,42 @@ 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 5a108b34ae..bcc1203a1f 100644 --- a/examples/flutter_gallery/test/drawer_test.dart +++ b/examples/flutter_gallery/test/drawer_test.dart @@ -14,87 +14,82 @@ void main() { testWidgets('Flutter Gallery drawer item test', (WidgetTester tester) async { bool hasFeedback = false; - void mockOnSendFeedback() { - hasFeedback = true; - } - await tester.pumpWidget(new GalleryApp(onSendFeedback: mockOnSendFeedback)); + await tester.pumpWidget( + new GalleryApp( + onSendFeedback: () { + hasFeedback = true; + }, + ), + ); await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - 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 + // Show the options page + await tester.tap(find.byTooltip('Show options page')); + await tester.pumpAndSettle(); MaterialApp app = find.byType(MaterialApp).evaluate().first.widget; expect(app.theme.brightness, equals(Brightness.light)); - // Change theme - await tester.tap(find.text('Dark')); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + // Switch to the dark theme: first switch control + await tester.tap(find.byType(Switch).first); + await tester.pumpAndSettle(); app = find.byType(MaterialApp).evaluate().first.widget; expect(app.theme.brightness, equals(Brightness.dark)); expect(app.theme.platform, equals(TargetPlatform.android)); - // Change platform - await tester.tap(find.text('iOS')); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + // 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(); 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('Small')); - expect(origTextSize, equals(const Size(176.0, 14.0))); + final Size origTextSize = tester.getSize(find.text('Text size')); + expect(origTextSize, equals(const Size(144.0, 16.0))); - // Switch font scale. + // 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.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))); + await tester.pumpAndSettle(); + Size textSize = tester.getSize(find.text('Text size')); + expect(textSize, equals(const Size(116.0, 13.0))); - // Set font scale back to default. + // Set font scale back to the default. + await tester.tap(find.byIcon(Icons.arrow_drop_down).first); + await tester.pumpAndSettle(); await tester.tap(find.text('System Default')); - 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)); + await tester.pumpAndSettle(); + textSize = tester.getSize(find.text('Text size')); + expect(textSize, origTextSize); - // 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. + // Switch to slow animation: third switch control + expect(timeDilation, 1.0); + await tester.tap(find.byType(Switch).at(2)); + await tester.pumpAndSettle(); expect(timeDilation, greaterThan(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)); + // Restore normal animation: third switch control + await tester.tap(find.byType(Switch).at(2)); + await tester.pumpAndSettle(); + expect(timeDilation, 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.pump(); + await tester.pumpAndSettle(); expect(hasFeedback, true); - // Close drawer - await tester.tap(find.byType(DrawerController)); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + // Hide the options page + await tester.tap(find.byTooltip('Show options page')); + await tester.pumpAndSettle(); }); } diff --git a/examples/flutter_gallery/test/example_code_display_test.dart b/examples/flutter_gallery/test/example_code_display_test.dart index 8b9624ef80..bdcba35c7b 100644 --- a/examples/flutter_gallery/test/example_code_display_test.dart +++ b/examples/flutter_gallery/test/example_code_display_test.dart @@ -18,25 +18,16 @@ void main() { await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - - // 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(); - } + Scrollable.ensureVisible(tester.element(find.text('Material')), alignment: 0.5); + await tester.pumpAndSettle(); + await tester.tap(find.text('Material')); + 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.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.pumpAndSettle(); 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 08e2c69975..caebc3ae74 100644 --- a/examples/flutter_gallery/test/live_smoketest.dart +++ b/examples/flutter_gallery/test/live_smoketest.dart @@ -10,18 +10,15 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_gallery/gallery/app.dart'; -import 'package:flutter_gallery/gallery/item.dart'; +import 'package:flutter_gallery/gallery/demos.dart'; +import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; // 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 _kUnsynchronizedDemos = const [ +const List _kUnsynchronizedDemoTitles = const [ 'Progress indicators', 'Activity Indicator', 'Video', @@ -29,38 +26,45 @@ const List _kUnsynchronizedDemos = const [ // These demos can't be backed out of by tapping a button whose // tooltip is 'Back'. -const List _kSkippedDemos = const [ +const List _kSkippedDemoTitles = const [ 'Pull to refresh', + 'Progress indicators', + 'Activity Indicator', + 'Video', ]; Future main() async { try { // Verify that _kUnsynchronizedDemos and _kSkippedDemos identify // demos that actually exist. - 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'); + 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'); runApp(const GalleryApp()); final _LiveWidgetController controller = new _LiveWidgetController(); - for (String demo in _kAllDemos) { - print('Testing "$demo" demo'); - final Finder menuItem = find.text(demo); - await controller.scrollIntoView(menuItem, alignment: 0.5); + 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); - if (_kSkippedDemos.contains(demo)) { - print('> skipped $demo'); - continue; - } + if (_kSkippedDemoTitles.contains(demo.title)) { + print('> skipped $demo'); + continue; + } - 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; + 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'); } - print('Success'); + await controller.tap(find.byTooltip('Back')); } _kTestChannel.invokeMethod('success'); diff --git a/examples/flutter_gallery/test/pesto_test.dart b/examples/flutter_gallery/test/pesto_test.dart index 9bf2b44a81..7d6d555aa7 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: 400.0, + width: 450.0, height: 800.0, child: const GalleryApp() ) @@ -26,29 +26,32 @@ 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.pump(); // Launch pesto - await tester.pump(const Duration(seconds: 1)); // transition is complete + await tester.pumpAndSettle(); await tester.tap(find.text('Pesto Bruschetta')); - await tester.pump(); // Launch the recipe page - await tester.pump(const Duration(seconds: 1)); // transition is complete + await tester.pumpAndSettle(); await tester.drag(find.text('Pesto Bruschetta'), const Offset(0.0, -300.0)); - await tester.pump(); + await tester.pumpAndSettle(); Navigator.pop(find.byType(Scaffold).evaluate().single); - await tester.pump(); - await tester.pump(const Duration(seconds: 1)); // transition is complete + await tester.pumpAndSettle(); }); 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.pump(); // Launch pesto - await tester.pump(const Duration(seconds: 1)); // transition is complete + await tester.pumpAndSettle(); 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 d889b30ea6..21baf516a0 100644 --- a/examples/flutter_gallery/test/simple_smoke_test.dart +++ b/examples/flutter_gallery/test/simple_smoke_test.dart @@ -16,37 +16,29 @@ void main() { await tester.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - final Finder finder = find.byWidgetPredicate((Widget widget) { - return widget is Tooltip && widget.message == 'Open navigation menu'; - }); - expect(finder, findsOneWidget); + final Finder showOptionsPageButton = find.byTooltip('Show options page'); - // Open drawer - await tester.tap(finder); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + // Show the options page + await tester.tap(showOptionsPageButton); + 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 + // Switch to the dark theme: the first switch control + await tester.tap(find.byType(Switch).first); + 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 + // Close the options page + expect(showOptionsPageButton, findsOneWidget); + await tester.tap(showOptionsPageButton); + await tester.pumpAndSettle(); - // Open Demos + // Show the vignettes await tester.tap(find.text('Vignettes')); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + await tester.pumpAndSettle(); - // Open Flexible space toolbar + // Show the Contact profile demo and scroll it upwards await tester.tap(find.text('Contact profile')); - await tester.pump(); // start animation - await tester.pump(const Duration(seconds: 1)); // end animation + await tester.pumpAndSettle(); - // 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 888a9f1143..18392629e2 100644 --- a/examples/flutter_gallery/test/smoke_test.dart +++ b/examples/flutter_gallery/test/smoke_test.dart @@ -2,31 +2,21 @@ // 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/item.dart' show GalleryItem, kAllGalleryItems; +import 'package:flutter_gallery/gallery/demos.dart'; import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; -const String kCaption = 'Flutter Gallery'; +// 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'; -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; +// All of the classes printed by debugDump etc, must have toString() +// values approved by verityToStringOutput(). +int toStringErrors = 0; void reportToStringError(String name, String route, int lineNumber, List lines, String message) { // If you're on line 12, then it has index 11. @@ -36,7 +26,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 ")}'); - errors += 1; + toStringErrors += 1; } void verifyToStringOutput(String name, String route, String testString) { @@ -56,22 +46,16 @@ void verifyToStringOutput(String name, String route, String testString) { } } -// 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); - +Future smokeDemo(WidgetTester tester, GalleryDemo demo) async { + print(demo); // 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(menuItem); + await tester.tap(find.text(demo.title)); await tester.pump(); // Launch the demo. await tester.pump(const Duration(milliseconds: 400)); // Wait until the demo has opened. - expect(find.text(kCaption), findsNothing); + expect(find.text(kGalleryTitle), findsNothing); // Leave the demo on the screen briefly for manual testing. await tester.pump(const Duration(milliseconds: 400)); @@ -85,6 +69,7 @@ Future smokeDemo(WidgetTester tester, String routeName) 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()); @@ -108,74 +93,85 @@ Future smokeDemo(WidgetTester tester, String routeName) 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 runSmokeTest(WidgetTester tester) async { - bool hasFeedback = false; - void mockOnSendFeedback() { - hasFeedback = true; - } +Future smokeOptionsPage(WidgetTester tester) async { + final Finder showOptionsPageButton = find.byTooltip('Show options page'); - await tester.pumpWidget(new GalleryApp(onSendFeedback: mockOnSendFeedback)); + // 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.pump(); // see https://github.com/flutter/flutter/issues/1865 await tester.pump(); // triggers a frame - expect(find.text(kCaption), findsOneWidget); + expect(find.text(kGalleryTitle), findsOneWidget); - for (String routeName in routeNames) { - final Finder finder = findGalleryItemByRouteName(tester, routeName); - Scrollable.ensureVisible(tester.element(finder), alignment: 0.5); + 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(); await tester.pumpAndSettle(); - await smokeDemo(tester, routeName); - tester.binding.debugAssertNoTransientCallbacks('A transient callback was still active after leaving route $routeName'); } - expect(errors, 0); + expect(toStringErrors, 0); - 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); + await smokeOptionsPage(tester); + expect(sendFeedbackButtonPressed, true); } void main() { - testWidgets('Flutter Gallery app smoke test', runSmokeTest); + testWidgets('Flutter Gallery app smoke test', smokeGallery); testWidgets('Flutter Gallery app smoke test with semantics', (WidgetTester tester) async { RendererBinding.instance.setSemanticsEnabled(true); - await runSmokeTest(tester); + await smokeGallery(tester); RendererBinding.instance.setSemanticsEnabled(false); }); } diff --git a/examples/flutter_gallery/test/update_test.dart b/examples/flutter_gallery/test/update_test.dart index 9d3b1263c1..f757a97001 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'; +import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; 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('Shrine')); - await tester.pump(); // Launch shrine + await tester.tap(find.text('Vignettes')); + await tester.pump(); // Launch 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 29390de943..8771a2fc36 100644 --- a/examples/flutter_gallery/test_driver/memory_nav_test.dart +++ b/examples/flutter_gallery/test_driver/memory_nav_test.dart @@ -14,14 +14,17 @@ void main() { }); test('navigation', () async { - final SerializableFinder menuItem = find.text('Text fields'); - await driver.scrollUntilVisible(find.byType('CustomScrollView'), menuItem, + await driver.tap(find.text('Material')); + + final SerializableFinder demoList = find.byValueKey('GalleryDemoList'); + final SerializableFinder demoItem = find.text('Text fields'); + await driver.scrollUntilVisible(demoList, demoItem, dyScroll: -300.0, alignment: 0.5, timeout: const Duration(minutes: 1), ); for (int i = 0; i < 15; i++) { - await driver.tap(menuItem); + await driver.tap(demoItem); 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 48368fb368..8ed957a6ff 100644 --- a/examples/flutter_gallery/test_driver/scroll_perf_test.dart +++ b/examples/flutter_gallery/test_driver/scroll_perf_test.dart @@ -22,24 +22,21 @@ void main() { test('measure', () async { final Timeline timeline = await driver.traceAction(() async { - final SerializableFinder home = find.byValueKey('Gallery List'); - expect(home, isNotNull); + await driver.tap(find.text('Material')); - await driver.tap(find.text('Vignettes')); - await driver.tap(find.text('Components')); - await driver.tap(find.text('Style')); + final SerializableFinder demoList = find.byValueKey('GalleryDemoList'); // 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(home, 0.0, -300.0, const Duration(milliseconds: 300)); + await driver.scroll(demoList, 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(home, 0.0, 300.0, const Duration(milliseconds: 300)); + await driver.scroll(demoList, 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 dcb401c0e9..ea21b2db6c 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/item.dart'; +import 'package:flutter_gallery/gallery/demos.dart'; import 'package:flutter_gallery/main.dart' as app; Future _handleMessages(String message) async { assert(message == 'demoNames'); return const JsonEncoder.withIndent(' ').convert( - kAllGalleryItems.map((GalleryItem item) => item.title).toList(), + kAllGalleryDemos.map((GalleryDemo demo) => '${demo.title}@${demo.category.name}').toList(), ); } diff --git a/examples/flutter_gallery/test_driver/transitions_perf_test.dart b/examples/flutter_gallery/test_driver/transitions_perf_test.dart index 1128934746..876cb921d5 100644 --- a/examples/flutter_gallery/test_driver/transitions_perf_test.dart +++ b/examples/flutter_gallery/test_driver/transitions_perf_test.dart @@ -45,8 +45,7 @@ const List kUnsynchronizedDemos = const [ 'Video', ]; -// All of the gallery demo titles in the order they appear on the -// gallery home page. +// All of the gallery demos, identified as "title@category". // // These names are reported by the test app, see _handleMessages() // in transitions_perf.dart. @@ -121,20 +120,26 @@ 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) { - print('Testing "$demo" demo'); - final SerializableFinder menuItem = find.text(demo); - await driver.scrollUntilVisible(find.byType('CustomScrollView'), menuItem, - dyScroll: -48.0, - alignment: 0.5, - ); + 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); for (int i = 0; i < 2; i += 1) { - 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')); + await driver.tap(demoItem); // Launch the demo if (kUnsynchronizedDemos.contains(demo)) { await driver.runUnsynchronized>(() async { @@ -144,8 +149,12 @@ 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 []]) { @@ -171,6 +180,7 @@ 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 { @@ -190,14 +200,9 @@ 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 Set unprofiledDemos = new Set.from(_allDemos)..removeAll(kProfiledDemos); + final List allDemoNames = _allDemos.map((String s) => s.substring(0, s.indexOf('@'))); + final Set unprofiledDemos = new Set.from(allDemoNames)..removeAll(kProfiledDemos); await runDemos(unprofiledDemos.toList(), driver); }, timeout: const Timeout(const Duration(minutes: 5))); diff --git a/packages/flutter/lib/src/services/asset_bundle.dart b/packages/flutter/lib/src/services/asset_bundle.dart index f6a933ce97..eb1135085f 100644 --- a/packages/flutter/lib/src/services/asset_bundle.dart +++ b/packages/flutter/lib/src/services/asset_bundle.dart @@ -67,8 +67,8 @@ abstract class AssetBundle { final ByteData data = await load(key); if (data == null) throw new FlutterError('Unable to load asset: $key'); - if (data.lengthInBytes < 10 * 1024) { - // 10KB takes about 3ms to parse on a Pixel 2 XL. + if (data.lengthInBytes < 20 * 1024) { + // 20KB takes about 6ms to parse on a Pixel 2 XL. // See: https://github.com/dart-lang/sdk/issues/31954 return utf8.decode(data.buffer.asUint8List()); }