From 9fc4b83e5c144ab1cb10633263bebfa89c75c752 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Wed, 22 Jul 2020 10:52:12 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=B7=BB=E5=8A=A0OrientationBuild?= =?UTF-8?q?er=E3=80=81MaterialBanner=E3=80=81CupertinoTextField=E3=80=81Va?= =?UTF-8?q?lueListenableBuilder=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/flutter.db | Bin 712704 -> 724992 bytes .../CupertinoTextField/node1_base.dart | 70 ++++++++++++++++++ .../CupertinoTextField/node2_style.dart | 41 ++++++++++ .../ValueListenableBuilder/node1_base.dart | 56 ++++++++++++++ .../MaterialBanner/node1_one_btn.dart | 47 ++++++++++++ .../MaterialBanner/node2_two_btn.dart | 60 +++++++++++++++ .../OrientationBuilder/node1_base.dart | 57 ++++++++++++++ lib/views/widgets/exp/stateful_unit.dart | 3 + lib/views/widgets/exp/stateless_unit.dart | 3 + lib/views/widgets/widgets_map.dart | 16 ++++ 10 files changed, 353 insertions(+) create mode 100644 lib/views/widgets/StatefulWidget/CupertinoTextField/node1_base.dart create mode 100644 lib/views/widgets/StatefulWidget/CupertinoTextField/node2_style.dart create mode 100644 lib/views/widgets/StatefulWidget/ValueListenableBuilder/node1_base.dart create mode 100644 lib/views/widgets/StatelessWidget/MaterialBanner/node1_one_btn.dart create mode 100644 lib/views/widgets/StatelessWidget/MaterialBanner/node2_two_btn.dart create mode 100644 lib/views/widgets/StatelessWidget/OrientationBuilder/node1_base.dart diff --git a/assets/flutter.db b/assets/flutter.db index 325a5923da88251a46e7480693ca79ebbe2327a6..33ad8e3b72cb5a3b53c885a05e1fed59b90ac80a 100644 GIT binary patch delta 11088 zcmcI~2~<@_^7rlAeb=|Kh=_<@+<=G($fCG`7!@~E-1jFuSURj%;cYc-S<#2nsdJMo%21<`MpPXbys&) zb#+y>RTukI?T)Sw6^c2IJHAC5hKi3bDDB4UD;qxO7ALntD;MZ!J>jo?>fpHm`b|F+ za)QKu=jc4uf^Z1G)Sa`)2J_H{%!!X2TGAcw=DII#T}`#RC!+kD$hTb6CSZIms|HprG}>t~Cy^{|E6 zf^Ggbi%qcpYW=tMd+WE>R_hnmPpuzV|7886^)>4SE3+QA9t24&vs4~4vS6o2jY)t< zj0u2;jd6g7j4^-*jZuKl8xI2>Fh&6GH_`$38EJse8bbm18iN3zHUt283vYlqPrkQ(8DjYc=X?M4^CZAK_ygAoF_ z)#wDc#RvwhH-Z4`j1GXCjX=OnhCkp&!vVO#umP?&RKRtH47k=10c#BmxW)kBR_m33 zHG1VL_^Q?`01bU5psud~tkRbPR_bMdtMpR93VjLSqq=EbEA=A46?y^Sa{Up&WqKaq zQr!huu4e<5=}th8J|D1Dp9ff?&jnnf&jBpfX95=K)67*A>ZS?`bW;WSdM4mveLUbJ z`dC1>ZYm;A9|^cfH&u|U4+nJVrV6t4VSo$u!GH_&6u|jx8)Axk@N$4b%K%b5 z00T<^2AI-KUJQ`52q1AGK!Pc|{<8q$X8^=a1&Eyt(9e`qjA^TVGXSDZ0rfFu@{lQ# zsG$InrdT3O!|a`C?z@)>J^KOlFn8PC++eu5Gpz?ew{U>2=7z#dv+L67#9uR)$$jFd z#Kop0B&YOGiisc4KRz}#9{%->P3{~2+n%_Fsu>%i?rDunOp1FjeOzKg!pxd`W=|fN zJYc{Bsm-2&4PVV%elPui*!biJ)0;gFwX-VkrB8}aN_sFo^dvXL&E9Y?eL_M~{DbMu zo`%-hYwx9xPwxLa>xZ6!4Lj#-zL!3BVEpf_2YQklvgY19f6~CX#DNc7kGH2moTuM2 ze^PRMT;hZ2p(m-~g?Z)o&?m+YjD4^?&7J`bS@Vs%^a(Ko1|$vW|A6(k^(4QrK-`U< z*)E}QyC9R<_&prJk3-qqGY$S)0ezB3uRP+?%Pd@6oU9<5zfqcAR_rSAxC@J>xR!ZF zx?TA>?#!%f&unhleg5i84b7{cZP~MiBqrP;^L4fEthv)0-F*DXma2WtTQ}aBqV@Q> zrt{~c8@e8-r1LTQMr>x!Hm_!MB0<}of}UmJqI$_Pvf1>pg>&4>#AHXj$9n``xhT>!5(EFP*u{ zp14}QvE{L&SJ%DJdUzdeBIrn^ppS*!_c6H#>dBcUZdakl>2Vho4li@(=fDaY&otL> zX?e2dTGj66$M*A}%B$5En)g1{yz9xU$EsV`p7O1(Wyeu-IrUqvzPtl|x1K!-zoVP$ zjy9cpwq?_imcx5no_H3fX+C$h>GY=N`i&s6=EL=(Z#3I1AdhP8$rbPdCoSb4#};b$ zLlORi9B)`MtX-^q#TC3@PvM*BNIx_*8fV%T+16OT6{hmhWV`q(e~SD87viqU9;u^c zy?mYjQGQqY0|~Ny$G=C9_@UTXk}Gr;-W2{JG&{zK{VWb!pd&`G;!C1cDG;J9m(d&c zedI++Ku0YVmWAkB>gSJw(I+(0AJr0kiR%Lf6G3o|?*|nEkk;)eXI^YvFplHz*ux#2 zb3f7%0jN-xfFcwR!)REo@K$WB`9>!CxQ4ZmeNDBke8N8fJh4}{u2jB>PWSOU| z#MLH#?hrY^b=i{EiEZzIiY%2&r5l{%AC6|n2aY!#7aT7-o|QTIQO7RFCdW!giNoob z;utAs$$4^}>~JJHdOK8zm2TKSw7+FP4slTf#6$V^Irg#k1bZ*}|JXa(t+pR*U)tV- zNau|0AOtwI5Y{Y&U?#>EYV(KSM?bj`lwo{&Qdeght&aU zFSWBODgUEJW&d?i@JZS>)blt71?AinYONI`Ahs$9((8_DI_*>(iEI zOSD?9Tv1}=HPSEAX7P#`B~*~hq$i%opM)T9HP4b0(I3^57toieGEA?ua09&_$EMGJ z@FrS!ZE3DQ)LeD`&e0QmhsoE`bh@hP^z+aS=f3#@_@z_Lbvv3jHnz}H*Q$12eYtj_ z@A&#oDV*4AwVUARwQk>d?TM~W!=P*W%gw7dHC=eQb=&?@mnRDjy{maGYiT^jei?>r zepsYD^-slrIH75Tx77|46b_A7Y9iK$b)kAb>Od2^$bR(2XHaiCe+Uj>ou{Fh7_Xj5 z*vFI6UwBqJ6Yc1YjxuW%3KV&}oqf9&ZRYXn3>ynygZ{{~l^f8yo-$8<=9GH!GYIKB zlDICglfv<%l$u4G6z=`o4$mil*z(mqrrYo>`m3t??4m-@yoc_YBJ`p!-b8)q%hPyO zPSL>oHNCWtriw~0T3&$?dgT_CWV_O`O}|z;+?8Ln^sA~ZDH`~x=KAMaHmv*G%Z3MPH(Q39klXo5)jpX9#=_Z+i*>5+e3J(bl46QNIxGh zcBS7wuUKf|%W?qy{E{HjnEj%auFgXN4`sm6(in3!(J)JXQAvuHZhn=<)BKUM7d6CB?)>!&-||wD_3VsOUS(xKBVSTCOv{)D^Au>!)2ix8v%O zz23i7dUK4_iyqAv1-g5>Xp@W=f&dFGlH2*JOe$>mQd0Jv16y z>9{|M{x~5@quu85!F1wiq70eq;~q5#7Ez(973#)d$ zR$Nk4?#^)mvCmF5(1})7>MAKUjmw#nQv%d6T11=9BGSB_Ug};&Fn_65;#yMXE^*~} zN4h;QYN5+qLxH=r)RhzS|J@|*K9gMPEGYyHMAOTUi$SQJ^~Ky{ebKJM95BOnMtE0s zrUp~!@?~vY-SyX%Xr|-_4V(G~^Sx%kT0~GPI0Q z6EY`196|qIxip6G0sfj6b?;GNzZ^x`2!%4|adaJ{&TPU-v|KX6wSgy zAgDuq*x4@pB!c=eYdC+1M=|V74}OxBSk{m_;I9+B$rI0vME(a6>jiOiYXbi*u9afh z^1*zWfD+k_G(Lex39RP`zPEt-v#}Zc1yQtRVx1e;;I9qEYvKp6%!zzFwl|DT26r-E zG2-?{aXR&%0sg7uR=y+c^MPQYnS1dV2G>QJf>*~Rv6?LY2;W$*5K0#CSJ7bh?E=0G zqd_b?hyR2}DQxH>zL$swvYY~b4=+g}oNba60!y|@cw^#Fc4-}-DB{)8L)erG{y4u+ zsONb!Y@fK5w~Kz9oQwQ`mLR-2D~yXuOC71$XBx3l%@y z9XNHsc*EjM7W6g$jeu)1C$JaZ=O^)KJR=|SyGY|jUX(9$7M{eQ%Rv1q!ZouevnxOG zb9pq0_4_w}Ma1h?PGrH&{C|ku46-mkinCdTKl7u2ejtx))v0W#fHz_^gE?9OZG1LZHN{hOT$Ny5wxna5J``9A~AIQK}De#&r5dt z)PIT8^Zv;q+xD5F&2RffkM9#g>BV>XP+E0~i1cD#K}+e^uVwcc$lKboyqz^gcQeDQ zFK>fp-&F~Vn(i&ywwrDz3aX6O+OgK!4UY0|MAJ%_x;@!>k?niT9h#qPXQ`|G@EG&r zEOEL$DQyHA+;os56>8>v6Y0Bjit~yJUGw1{Eh%#6M5mRySGZENq}XV0c;TCOVTsGR z*o-#J&wWhtVQgu(v)JY1LJyzDVSy&)k}_urgmqJZVQGpMM{iAl_-w&uQ5|qE&$}#t zk7tf6*IAbDNuk&KN+GC%I!BWPx+_z(NCnPiDO&$Tx~Gne3-W4rh*s{s8DXvpb?u7j zY)vR$L2zy7X>1R|J8@$b79?Q{XE`El0efE!$D;Er7VM9^h}M~4_cIkEd2=_e#`FuF z+00=45NTY%i&WHbXEcw6Yj__*bJ-umvB0A_>`y)LWrAk2-I3U-poI(^Xa$d)tSSKy zCTIb>FaQrAXg>RCF#ZCgMeO5L`~i=0*^zYo9*J&k)cO*02(n5D8u9ghq57_We1+wGkdR^KrZn<86yd*<-75zG^|M zI9sh{kvIsg0-{2M*QG3D6YKGLf|fGdcHBomSSQMDB8wV1! zoQ3SgF*a1eMjyxf1@tJpbqZhM(MtB(8Eoaz3U>J%P9ky!rw*3K2^qj+kU*YYs&j1o z>-c|olDd0tCChvZUq@uvhO|{|*xUHcUgDdaS}MH>#OEZkI#TD^JO9Mb^SqAO(x34x z8^Y{8iD)Vk+4ufr0&f#!4#g=2YqF=My9()&y+Ut#`7I@cKG{=_X-woL_G$;R93jF6 zcO(Z?q_7qZiXlj5k4BJa0ZHsYG>Ih0%HE45D+FX=H25jaf3tBMJ&+<&(*0JPKf0Q^~s+`Lpnuq(6`R*woo1R6#*(Ne=lzhU+G`fVf2z z%r2LbJpyFhCCkavBA8oH6)D1&5O2m<9n?@Und+-a2P!a}%D$>58wAve6|Ey@WC&iO zwh}5ru=C0eveyi5a(9z!Dg-wZ50WMk!j!}p$e(!>&eW6S86Iiu2qQJTwHugtmZICX zk40fLEf59Mf0cfRvBL>%OVmdaN-1L9wCy37`-o>r3purMn6epVys{l zA?yiE5@z^A7?eLs_|S^tSo##9h8JdTP0(Z6JJW=hx}kWspE(cLEm3p-dXobtCO zz@{@51MgeOou%QA2|>)*E_`5zuxQ3!VYCA!u{|e*hy748Ykf`VX~o5;5*D!pkv%i@ z6sEi{Tt|Yln%4)i>MMeQNTa9^U_bv^C=Z2zXUR>$Lm=R3`9XNriiWX`NPGpOp=^R6 zz9XO^EYu=?9E{S~58cJ5C6vnOLt>tQa!$pHokcX9g(iu+ED)oxH1Q097-h*wG0K8Q zvR#wJEfT~qeP@bUGK3DgQye3p4E9d0cnG7>Z22SNUwMc>rWc5nG8)T1DihzgL(Fin zM*NJRacu26ae|66*+&iHrvjS5PCO>MREQTs_KKefXd?UJfcU+Fve?xVVxWj7v;UqE zbqP<6mY|AWvmmUl;chh!>LI7XL1znJoByF`b|pZ1zVY#G%vK;ZMc00yx0DFFpz7^miI=1|1#o)5T$a9(!RcN5i?mU+tbn6AQ>huX zb8ZQ}(g}5@gI7o+*xx>v>LqY~MOURyFj4By?qxWtv~UgoX#G_Tv#dcKO@%0M9#e9hyFa?Bx6 zFY@6PG%`oEns zyR4+NsKi^p@vf-l^l4gIEk_9ui^9(%)pD0HKAOo;-Y6@*P1Lfxw)ycjSNCo8E&EQV zxlRaoaxx3^m-}eFwXWv6=dT_;r_o6tLdC2&OirVRx5<+APSHBcvz#J3A4cb#CX;CK z1|oF56LV?W{kn*x&iVX9)NivK*hzy5hAHe6Us!gBn0~uf?UZ^~;wjn#g&R{?p?TN37dxR7enaLS~*BaFj>-!H>Jo< z?F$knkK0nDw>smXAyCfAcI6eBFC!^hgwN7UYh25k>o-NTUwD*PaBbDC3UyP3Au;Th z5!^JW2d7k`9$@dmh}6$8RJLz{JVQ>~SYaq&`Wecavz=ARDNDP>fQ}(; zp~XXRH~Q-*QkOum8n6vmKN!NoqN02tpkEsD47%e%WF5)sB6Y zWm@==(u02TJ+gQ8HTdQjGAb)kOS5j$RZHG)rYe!}#NOaR-Ss8kV5oCD$~Tb{YZm$S5o>^Jo*C1um~;(7HFJ-h!qTxC?357O5i*ZGl`J zOpl^uz9+reoww3YpO+n$`9+24dCtN`uAFFk>~X$>3JoB5uZ<3^lY=q*P5nPpf~b8i zZ=pjvscK`2;@7bpQXlQ^;K(db37jT6XNMd~dmohT$rWwpXo{wd7Uqq-os$&n(7$Xz*>xqP|Q118NXTUY?~M^{eU5wK~%oQP#TD#%Tj3x4B>{y>{_`wOC zgsKC#guvsS`H07A8{|Nt@t8~?hU7VUC*fh-PnfLhU<9)KgYq^)HZL>+*poZtTuDTh zGo0lNP#m?8wdqC&*7+GZoiu6+VdS!$iy^#T{JuOU&;rG9xTE!q+Vohur&aFEK53Ch z^AKhCxF)}7fe8BJALJhXP!{~Jps1=Sa;m>5!n{8VWUXXC^>CjoK_I)>fOx#KazkL` zqWm%s5%(Wnl~Zjh=1Vy16G|>$0%LM`vZ>hU#{8m`n<81$-{{Kz)=}w?$(s2_7~6AR z&c@)j@;FNp$^-H_h%}5b!dX(1^0q?OjWjeivZwL}@s_fdan=%LBKa?l;g&V{Yq?}~ zywRJfBb1Xo1mPD)D(@l)&Nq)%vIqp{Uyf6{Vp6Lb-P!(lWj*%EU+BQ8=YT+gA-1yo2bH4QgpZ9|2H1iOH$NUYC z!Bd9PL(f2_5qXLq%15YxPITe$1drR34;P*3`XakOm|yp(cJ69nQO_KV({rA6=2pan&6wEKXd66!tQv|v|ki&Ak6GqG|D%0|uMJ=-cYE@tIq4pk z7({QZk_ErJ1EDGf;-FXl22bV1<3*{H`Nrk(Z5dvgoCR8X9{jh2aPZMCF_rGfQ^#0} z^UF%XUAbUUH2f(P8hBfxG3DONpwAE}+Jtw3{PXiqg)qg(9o!K;4uvXOyjc(fy@b)X zD_Pkl3p&&;LRh>Q;w0_giXf(yfSPh>+LKaLrwE^?YA*)gn79=KJM-(e{1ghxUJ<4zis^}lDR2D0cK8{$e9Jg9xy$QB4sxfNr_AT-h8ieHTtbD8T zu>hH6<_<--Ko)uB86{AL46_+3g9=p4Z@j2hUl zn}i?~3=38esa;_VVB&Sr@ zPBR9v1+uzZA{!nxQdm%v@~Z$<^PsPl>&Wqp*HfdhoE$5Jqp`qb2r!v!3}xM-)DJKu znLkFWDi)rr8)pnYS+Bk$o$^x!zYbgwXO)C%`0{<$KVqb@fCRNbfIPHnpjsu8+A?Dp z>)lKJ(N`FgD>z%cTmc-G$YfodkcagJ;oT$M#QOa^QR`NZUXu0BU9998|0_d zsXpNkd1zv(x>kU^^`&KMF9q_|CS6@aAYWa)MmYqgPHy9hm1Mb)o?I>g%7WgYf?Xqml6J delta 6058 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 Q62+4vuu+^fJl)y<09FBb761SM diff --git a/lib/views/widgets/StatefulWidget/CupertinoTextField/node1_base.dart b/lib/views/widgets/StatefulWidget/CupertinoTextField/node1_base.dart new file mode 100644 index 0000000..feeff0a --- /dev/null +++ b/lib/views/widgets/StatefulWidget/CupertinoTextField/node1_base.dart @@ -0,0 +1,70 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 245 CupertinoTextField 1 Cupertino风格的输入框,属性和TextField类似,可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。 +// { +// "widgetId": 245, +// "name": 'CupertinoTextField基础使用', +// "priority": 1, +// "subtitle": "【placeholder】 : 提示文字 【String】\n" +// "【showCursor】 : 是否显示游标 【bool】\n" +// "【minLines】 : 最小行数 【int】\n" +// "【maxLines】 : 最大行数 【int】\n" +// "【padding】 : 内边距 【EdgeInsetsGeometry】\n" +// "【onChanged】 : 变化监听 【ValueChanged】\n" +// "【onTap】: 点击监听 【GestureTapCallback】\n" +// "【onSubmitted】: 提交监听 【ValueChanged】", +// } +class CupertinoTextFieldDemo extends StatefulWidget { + @override + _CupertinoTextFieldDemoState createState() => _CupertinoTextFieldDemoState(); +} + +class _CupertinoTextFieldDemoState extends State { + var _value = ''; + var _color =Colors.black; + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + children: [ + Text('输入了:$_value',style: TextStyle(color: _color),), + CupertinoTextField( + placeholder: 'Input Name', + showCursor: true, + minLines: 1, + maxLines: 4, + padding: EdgeInsets.all(8), + onChanged: _onChanged, + onTap: _onTap, + onSubmitted: _onSubmitted, + ), + ], + ), + ); + } + + void _onChanged(String value) { + setState(() { + _value = value; + }); + } + + void _onTap() { + print('----_onTap----'); + setState(() { + _color=Colors.blue; + }); + } + + void _onSubmitted(String value) { + print('----_onSubmitted:$value}----'); + setState(() { + _color=Colors.black; + }); + } + +} diff --git a/lib/views/widgets/StatefulWidget/CupertinoTextField/node2_style.dart b/lib/views/widgets/StatefulWidget/CupertinoTextField/node2_style.dart new file mode 100644 index 0000000..5e88485 --- /dev/null +++ b/lib/views/widgets/StatefulWidget/CupertinoTextField/node2_style.dart @@ -0,0 +1,41 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/22 +/// contact me by email 1981462002@qq.com +/// 说明: 245 CupertinoTextField 1 Cupertino风格的输入框,属性和TextField类似,可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。 +// { +// "widgetId": 245, +// "name": 'CupertinoTextField常用样式属性', +// "priority": 2, +// "subtitle": "【style】 : 输入文字样式 【TextStyle】\n" +// "【prefix】: 前缀组件 【Widget】\n" +// "【prefixMode】: 前缀模式 【OverlayVisibilityMode】\n" +// "【suffix】: 后缀组件 【Widget】\n" +// "【suffixMode】: 后缀模式 【OverlayVisibilityMode】\n" +// "【cursorColor】: 游标颜色 【Color】\n" +// "【cursorWidth】: 游标宽度 【double】\n" +// "【cursorRadius】: 游标圆角 【Radius】\n" +// "【readOnly】: 是否只读 【bool】", +// } +class CupertinoTextFieldStyle extends StatelessWidget { + + @override + Widget build(BuildContext context) { + return Container( + child: + CupertinoTextField( + style: TextStyle(color: Colors.blue), + prefix: Icon(CupertinoIcons.add), + prefixMode: OverlayVisibilityMode.notEditing, + suffix: Icon(CupertinoIcons.clear), + suffixMode: OverlayVisibilityMode.editing, + cursorColor: Colors.purple, + cursorWidth: 4, + cursorRadius: Radius.circular(2), + readOnly: false, + placeholder: '输入用户名', + ) + ); + } +} diff --git a/lib/views/widgets/StatefulWidget/ValueListenableBuilder/node1_base.dart b/lib/views/widgets/StatefulWidget/ValueListenableBuilder/node1_base.dart new file mode 100644 index 0000000..b60bade --- /dev/null +++ b/lib/views/widgets/StatefulWidget/ValueListenableBuilder/node1_base.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/21 +/// contact me by email 1981462002@qq.com +/// 说明: 255 ValueListenableBuilder 1 可以监听一个值,当其变化时通过builder回调能重建界面,避免使用setState刷新。 +// { +// "widgetId": 255, +// "name": 'ValueListenableBuilder基本使用', +// "priority": 1, +// "subtitle": "【builder】: 组件构造器 【ValueWidgetBuilder】\n" +// "【valueListenable】: 监听值 【ValueListenable】\n" +// "【child】: 子组件 【Widget】", +// } + +class ValueListenableBuilderDemo extends StatelessWidget { + ValueListenableBuilderDemo({Key key}) : super(key: key); + + final ValueNotifier _counter = ValueNotifier(0); + + @override + Widget build(BuildContext context) { + return Container( + height: 200, + child: Scaffold( + appBar: AppBar(title: Text("ValueListenableBuilder")), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('You have pushed the button this many times:'), + ValueListenableBuilder( + builder: _buildWithValue, + valueListenable: _counter, + child: const Text('I am Child!'), + ) + ], + ), + ), + floatingActionButton: FloatingActionButton( + child: Icon(Icons.plus_one), + onPressed: () => _counter.value += 1, + ), + ), + ); + } + + Widget _buildWithValue(BuildContext context, int value, Widget child) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text('$value'), + child, + ], + ); + } +} diff --git a/lib/views/widgets/StatelessWidget/MaterialBanner/node1_one_btn.dart b/lib/views/widgets/StatelessWidget/MaterialBanner/node1_one_btn.dart new file mode 100644 index 0000000..5db4583 --- /dev/null +++ b/lib/views/widgets/StatelessWidget/MaterialBanner/node1_one_btn.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/21 +/// contact me by email 1981462002@qq.com +/// 说明: 211 MaterialBanner Material风格的横幅组件,支持左中右或左中下结构,可指定边距背景色等。 + +// { +// "widgetId": 211, +// "name": 'MaterialBanner一行的使用', +// "priority": 1, +// "subtitle": "【content】 : 中间组件 【Widget】\n" +// "【leading】: 左侧组件 【Widget】\n" +// "【actions】: 右侧组件列表 【List】\n" +// "【padding】: 内边距 【EdgeInsetsGeometry】\n" +// "【forceActionsBelow】: 是否按钮在下方 【bool】\n" +// "【backgroundColor】: 背景色 【Color】", +// } +class MaterialBannerDemo extends StatelessWidget { + final info = + 'Welcome to Flutter Unit!'; + + @override + Widget build(BuildContext context) { + return Column( + children: [MaterialBanner( + content: Text( + info, + style: TextStyle(color: Colors.white), + ), + backgroundColor: Colors.purple, + leading: Icon(Icons.info, color: Colors.lightBlueAccent), + padding: EdgeInsetsDirectional.only(start: 16.0, top: 2.0), + forceActionsBelow: false, // 默认false + actions: [ + Text( + 'I KNOW', + style:TextStyle( + color: Colors.orange, + fontWeight: FontWeight.bold, + fontSize: 14) , + ) + ], + )], + ); + } + +} diff --git a/lib/views/widgets/StatelessWidget/MaterialBanner/node2_two_btn.dart b/lib/views/widgets/StatelessWidget/MaterialBanner/node2_two_btn.dart new file mode 100644 index 0000000..46e976c --- /dev/null +++ b/lib/views/widgets/StatelessWidget/MaterialBanner/node2_two_btn.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/21 +/// contact me by email 1981462002@qq.com +/// 说明: +// { +// "widgetId": 211, +// "name": 'MaterialBanner两行的使用', +// "priority": 2, +// "subtitle": "【contentTextStyle】: 中间位置样式 【TextStyle】\n" +// "【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】\n" +// "当尾部组件数量大于1,该组件结构为左中下。", +// } +class MaterialBannerDemoTwo extends StatelessWidget { + final info = + 'A banner displays an important, succinct message, and provides actions for users to address. ' + 'A user action is required for itto be dismissed.'; + + @override + Widget build(BuildContext context) { + return Column( + children: [MaterialBanner( + content: Text( + info, + style: TextStyle(color: Colors.white), + ), + backgroundColor: Colors.purple, + leading: Icon(Icons.warning, color: Colors.yellow), + padding: EdgeInsetsDirectional.only(start: 16.0, top: 2.0,end: 2), + leadingPadding:EdgeInsetsDirectional.only(end: 16.0) , + actions: [ + RaisedButton( + color: Colors.white, + onPressed: () {}, + child: Text( + 'I KNOW', + style: TextStyle( + color: Colors.purple, + fontWeight: FontWeight.bold, + fontSize: 14), + ), + ), + + RaisedButton( + color: Colors.white, + onPressed: () {}, + child: Text( + 'I IGNORE', + style: TextStyle( + color: Colors.purple, + fontWeight: FontWeight.bold, + fontSize: 14), + ), + ), + ], + )], + ); + } + +} diff --git a/lib/views/widgets/StatelessWidget/OrientationBuilder/node1_base.dart b/lib/views/widgets/StatelessWidget/OrientationBuilder/node1_base.dart new file mode 100644 index 0000000..dacb663 --- /dev/null +++ b/lib/views/widgets/StatelessWidget/OrientationBuilder/node1_base.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; + +/// create by 张风捷特烈 on 2020/7/21 +/// contact me by email 1981462002@qq.com +/// 说明: 203 OrientationBuilder 能够回调父组件是横向还是纵向,可以据此来构建不同的子组件。 +// { +// "widgetId": 203, +// "name": 'OrientationBuilder基本使用', +// "priority": 1, +// "subtitle": "【builder】 : 方向组件构造器 【OrientationWidgetBuilder】", +// } +class OrientationBuilderDemo extends StatefulWidget { + @override + _OrientationBuilderDemoState createState() => _OrientationBuilderDemoState(); +} + +class _OrientationBuilderDemoState extends State { + double _width = 200; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Container( + width: _width, + height: 200, + child: OrientationBuilder(builder: _builder), + color: Colors.orange, + ), + _buildSlider() + ], + ); + } + + //根据回调的orientation返回组件 + Widget _builder(BuildContext context, Orientation orientation) { + switch(orientation){ + case Orientation.portrait: + return Icon(Icons.phone_android,size: 60,); + break; + case Orientation.landscape: + return RotatedBox( + quarterTurns: 1, + child: Icon(Icons.phone_android,size: 60,)); + break; + default: return Container(); + } + } + + Widget _buildSlider() =>Slider( + value: _width, + max: 350.0, + min: 80.0, + divisions: 17, + onChanged: (v)=> setState(() => _width= v), + ); +} diff --git a/lib/views/widgets/exp/stateful_unit.dart b/lib/views/widgets/exp/stateful_unit.dart index 57b151b..4226bc7 100644 --- a/lib/views/widgets/exp/stateful_unit.dart +++ b/lib/views/widgets/exp/stateful_unit.dart @@ -50,6 +50,9 @@ export '../StatefulWidget/SelectableText/node1_base.dart'; export '../StatefulWidget/SelectableText/node2_align.dart'; export '../StatefulWidget/CupertinoNavigationBar/node1_base.dart'; export '../StatefulWidget/CupertinoTabBar/node1_base.dart'; +export '../StatefulWidget/CupertinoTextField/node1_base.dart'; +export '../StatefulWidget/CupertinoTextField/node2_style.dart'; +export '../StatefulWidget/ValueListenableBuilder/node1_base.dart'; export '../StatefulWidget/DropdownButton/node1_base.dart'; export '../StatefulWidget/DropdownButton/node2_style.dart'; diff --git a/lib/views/widgets/exp/stateless_unit.dart b/lib/views/widgets/exp/stateless_unit.dart index 118be64..7b3f0bd 100644 --- a/lib/views/widgets/exp/stateless_unit.dart +++ b/lib/views/widgets/exp/stateless_unit.dart @@ -26,9 +26,12 @@ export '../StatelessWidget/Container/node3_alignment.dart'; export '../StatelessWidget/Container/node4_decoration.dart'; export '../StatelessWidget/Container/node5_transform.dart'; export '../StatelessWidget/Container/node6_constraints.dart'; +export '../StatelessWidget/MaterialBanner/node1_one_btn.dart'; +export '../StatelessWidget/MaterialBanner/node2_two_btn.dart'; export '../StatelessWidget/DataTable/node1_base.dart'; export '../StatelessWidget/DataTable/node2_operation.dart'; +export '../StatelessWidget/OrientationBuilder/node1_base.dart'; export '../StatelessWidget/CupertinoTheme/node1_base.dart'; export '../StatelessWidget/CupertinoTheme/node2_use.dart'; diff --git a/lib/views/widgets/widgets_map.dart b/lib/views/widgets/widgets_map.dart index 32d905a..6f0113d 100644 --- a/lib/views/widgets/widgets_map.dart +++ b/lib/views/widgets/widgets_map.dart @@ -55,6 +55,20 @@ class WidgetsMap { return [ NavigationToolbarDemo(), ]; + case "CupertinoTextField": + return [ + CupertinoTextFieldDemo(), + CupertinoTextFieldStyle(), + ]; + case "MaterialBanner": + return [ + MaterialBannerDemo(), + MaterialBannerDemoTwo(), + ]; + case "OrientationBuilder": + return [ + OrientationBuilderDemo(), + ]; case "Icon": return [ CustomIcon(), @@ -85,6 +99,8 @@ class WidgetsMap { ]; case "ChoiceChip": return [CustomChoiceChip()]; + case "ValueListenableBuilder": + return [ValueListenableBuilderDemo()]; case "ActionChip": return [CustomActionChip()]; case "InputChip":